Excel:将数组传递给用户定义函数 (VBA)

2023-12-19

编辑:解决方案- 请参阅下面的原始问题

在将 {1,2,3} 这样的数组传递给 UDF 时,我发现需要考虑两件事:

  • 区域设置 - 请参阅答案 1。德国系统上的列表分隔符(通常)是“;”因此我需要使用{1; 2 ; 3}.

  • 传递的数组在函数中显示为二维数组。因此,它的第 n 个元素必须定位为 myArray(n,1)。忽略这给了我#VALUE!错误。

因此,一个简短的“选择案例”-UDF 可能如下所示:

Function SelCase(a1, a2, a3)
    For i = 1 To UBound(a2)
        If a2(i, 1) = a1 Then SelCase = a3(i, 1)
    Next
End Function

称为(德语语言环境!):

=SelCase(A1;{1;2;3};{"a";"b";"c"})

根据 A1 给出结果“a”、“b”或“c”,结果为 1、2 或 3。

找到了更详细的“选择案例”——UDFhere https://stackoverflow.com/questions/4716382/excel-select-case/4719706#4719706.


原问题:

我想将像 {1,2,3,4} 这样的数组传递给 Excel 2002 中的用户定义函数 - 并且无法找到执行此操作的方法。

我使用的是德语版本,所以“,”是我的小数分隔符,也分隔水平(一维)数组中的值- 编辑:这是错误的 -, 然而 ”;”据我所知,将公式中调用的函数中的参数与工作表分开,也将垂直(1D-)数组中的值分开。

我尝试过类似的东西

Function test(myArray)
Function test(myArray())

与类似的东西

=test({1,2,3,4})
{=test({1,2,3,4})} (with ctrl+shift+enter)

在我的工作表中,但 Excel 总是要求我更正我的公式,例如“=test({1,234})”,这不是我想要的。

如果我尝试类似的事情

=test({1;2;3;4})
=test(1,2,3,4)
=test(1;2;3;4) <- ok this would be for paramArray

作为工作表中的公式,我得到一个#VALUE!错误。

我无法使用 paramArray ,因为最后我必须传递两个数组(大小可变)和一个单个值作为 3 个参数。在工作表和 VBA 中需要什么语法来传递数组(未定义为范围)?

先感谢您! 马丁·林登劳夫

edit:

我想要构建的是“Select Case”的简写 UDF,例如:

Function SelCase() As Variant
a1 = "b"
a2 = Array("a","b","c")
a3 = Array("e1","e2","e3")
For i = 0 To UBound(a2)
    If a2(i) = a1 Then SelCase = a3(i)
Next
End Function

a1、a2、a3 未在函数内定义,而是通过函数调用传递,例如

=SelCase(A1;{"a","b","c"};{"e1","e2","e3"})

根据 A1 =“a”、“b”或“c”给出“e1”...“e3”。

我可以用 CHOOSE() 和 MATCH() 实现这一点,但我经常需要它 -> 喜欢有一个不错的“简短版本”,顺便说一句。我想了解我在数组和 UDF 上做错了什么...谢谢。

edit 2:

我找到了“选择案例 UDF”的工作方法here https://stackoverflow.com/questions/4716382/excel-select-case/4719706#4719706。一般问题仍然是:如何将一种 {1,2,3} 表示法的数组传递给 UDF(如果可能)。


你是这个意思吗?

Excel公式:

=sumArray({1,2,3,4,5},2,{9.5,8.7,7.3,6,5,4,3},D1:D11)

UDF:

Function sumArray(ParamArray arr1() As Variant) As Double

    sumArray = WorksheetFunction.Sum(arr1(0)) + arr1(1) + _
        WorksheetFunction.Average(arr1(2)) + WorksheetFunction.Sum(arr1(3))

End Function

update:

上面的代码和公式肯定可以使用英国区域设置和以下设置。如果出现错误,请替换控制面板中的符号或使用正确的列表分隔符和小数点符号更新公式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel:将数组传递给用户定义函数 (VBA) 的相关文章

  • excel 2010刷新BackgroundQuery中运行时错误1004

    我正在尝试用 vba 编写一个脚本 用于将多个文本文件导入 Excel 一张纸 然后将它们绘制在一张图表上 我面临一个问题刷新后台查询命令并出现 1004 运行时错误 我怎样才能解决它 谢谢 埃亚勒 这是我的代码 Sub fring1 Di
  • JavaScript 比较数组

    我有一个以下格式的数组 var markers Title 15 102253 38 0505243 Description 1 Another Title 15 102253 38 0505243 Another Description
  • Excel 工作簿 - 从 C# 读取速度非常慢?

    正在尝试读取 Excel 工作簿 发现读取 3560 行 7 列的工作表需要很长时间 大约需要 1 分 17 秒 我所做的就是循环遍历整个工作表并将值存储在列表中 这是正常现象 还是我做错了什么 static void Main strin
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • Java中char数组的默认值是多少?

    如果我像这样分配字符数组 char buffer new char 26 它分配的默认值是什么 我尝试打印它 但它只是一个空字符 System out println this is what is inside gt buffer 1 t
  • Excel FILTER() 对于空白单元格返回 0

    我怀疑以前有人问过这个问题 但我找不到 FILTER 即使指定了返回字符串 通常也会为空白行返回 0 Using filter 我经常收到空单元格的 0 返回值 假设 A 列中有 6 行数据 abc xyz abc xyz abc If I
  • VBA 有没有办法了解未使用的变量?

    标准 VBA 编辑器中是否有工具 方法或设置来警告已被修改的变量Dim med 但没有被使用 MZ Tools http www mztools com index aspx将搜索您的代码并告诉您哪些内容未被使用 VBA的版本可以找到her
  • 创建动态多维对象/数组

    我正在尝试使用 JS 创建一个多维数组 以便我可以通过 Ajax 调用 PHP 来发布一些数据 这可能很简单 但我对 JS 的了解很少关于这个具体的事情 这是带有代码的 JSFiddle http jsfiddle net k5Q3p 我想
  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • 关于 ArrayList[] x 的 Java 问题

    我一直对 ArrayList 数组有这个问题 也许你能帮忙 declare in class private ArrayList
  • 在哪里可以找到 Java 数组的源代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以找到java数组的源代码 Example double arr new double 20
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • VBA 中 AND 函数如何工作?

    如果这是一个愚蠢的问题 我很抱歉 但是 Excel VBA AND 函数是否检查其中的每个条件然后继续 或者在第一个 FALSE 条件处停止而不检查其他条件 我想知道出于优化目的 但到目前为止在网上没有找到任何相关信息 提前致谢 示例 如果
  • VBA 中的匈牙利语好吗?

    我在 Net 中不使用匈牙利语 str int 前缀 但我仍然发现它在 VBA 中很有用 因为在 VBA 中很难看到类型 这很糟糕吗 不必要 也许我错过了一些东西 我真的很感激任何反馈 我想知道有一段时间了 谢谢大家 我想说 这种匈牙利符号
  • 如何在Power Query中对N列求和

    我的数据每月都会更新 因此我尝试创建一个强大的查询表 该表将显示我创建的枢转 N 列的总和 但我似乎不知道如何在强大的查询中执行此操作 我目前有这个代码 旋转后 创建要求和的列的列表 添加索引列以限制每行 添加一列 该列对该行的列进行求和
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 我如何以更好的方式编码而不是像这样的VBA编码

    我正在 Excel 中创建一个仪表板 但是我想知道是否有比这更好的编码方式 我想对其进行模块化 而不是这样做以使其更加整洁 Private Sub Afford If af Value True Then af afr Value Shee
  • Fortran 子例程返回错误值

    嘿 我正在开发一个 Fortran 程序 遇到了一个奇怪的问题 当我尝试在调用特定子例程之前直接输出数组的某些值时 我得到了正确的值 然后 我尝试在启动子例程时输出同一数组的一些值 它们都是 0 我最终在子例程之后输出数组的值 并且这些值回

随机推荐

  • SQL Server Varbinary(max):从 varbinary 字段中选择字节子集

    在 SQL Server 2008 中从 varbinary MAX 字段 不使用 FileStreams 读取部分二进制数据的最有效方法是什么 将数据写入列时 T SQL 中提供了 VarBinary Write 函数 允许将字节增量写入
  • 从 Zend Framework 2 中的模块发布资产

    通常建议将模块资产存储在模块的目录中moduleName public 或者您想要命名资产目录的任何名称 不幸的是 Zend Framework 2 不支持资产发布默认情况下用于模块资产 根据MWOP 大约 1 个月前没有任何计划 我想仍然
  • 在windows服务中设置端口号

    我要开发一个windows服务 当服务启动时 就会有一个端口 我的问题是我们可以为其分配一个特定的端口号吗 例如 端口号为 55431 是的 假设您使用 WCF 作为通信层 您只需配置要侦听的绑定 协议作为服务配置的一部分 在您的服务中On
  • 重写条件总和和计数查询/日期范围比较的更好方法

    我不确定我所做的尝试是否正确 看来有很多重复的事情 以下示例在本月 上个月运行 但通常我不希望能够设置我的子句以供以后使用 例如 昨天与今天 这是一个简单的比较查询 只是为了让我们更容易 我们在这个 上个月进行操作 我的数据 CREATE
  • 如果log4net日志无法写入数据库,如何设置?

    我知道可以同时登录文件和数据库 也可以登录不止一种资源 https stackoverflow com questions 1372435 configure log4net to write to multiple files 但是如果l
  • 如何使用 Spring data REST 公开自定义 DTO CRUD 存储库?

    我不想公开我的模型类 jpa 实体 而是使用不同的数据传输对象 DTO 公开其属性的不同子集 这个想法是DTO CrudRepository lt gt JpaRepository lt gt entities 我想通过 Spring Da
  • 通过 ng build 构建 Angular 项目时,出现 angular.json 文件未找到错误

    我在笔记本电脑上克隆了一个存储库 该存储库是我一个月前从另一台计算机创建的 我的项目很成功 一个月前没有出现任何错误 但今天在我将存储库克隆到新计算机中后 我遇到了一些错误 其实我写的npm i为了安装软件包 然后我尝试通过构建我的项目ng
  • 计算上传文件的数量

    我正在开发我的 CodeIgniter 项目 到目前为止它运行得很好 但是 我需要某种方法来计算上传文件的数量 因为我想在某些情况下 但不是全部 限制它 我怎样才能做到这一点 我试过count FILES 但这没有给我任何可用的东西 我还尝
  • 了解 AMD GPU 中的 oneAPI 和 SYCL

    我是一名 GPGPU 开发人员 我使用 CUDA 完成了所有工作 最近 我为我的家庭设置购买了 AMD GPU 并且我一直在阅读有关 SYCL 和 oneAPI 的内容 但我不确定我是否理解它们各自是什么以及它们如何互补 如果我理解正确的话
  • 无法读取属性“getText”量角器

    我正在尝试将一个循环插入一个循环并获取Cannot red property getText of undefined error 这是我的代码 element all by className col md 4 ng scope then
  • 重置选择框的值

    我正在尝试重置两个选择字段的值 其结构如下
  • 艰难地学习 Ruby 第 9 章 三引号

    Zed Shaw 的 Learn Ruby the Hard Way 第 9 章使用了三重双引号 puts There s something going on here With the three double quotes We ll
  • 在给定合并提交 SHA1 的情况下,您如何查看/显示已完成的 git 合并冲突解决方案?

    当您解决冲突 然后暂存更改 然后执行 git diff 时 它会显示两列 和 一列代表 我们的 一列代表 他们的 给定存储库的 git 历史记录中的合并提交 我如何查看由其他人完成的解决方案 在其他情况下 我以前见过它 我想是在 gitk
  • 滚动到验证摘要 - ASP.net MVC

    当用户单击应用程序中导致验证错误的按钮时 是否有办法让页面滚动到验证摘要的位置 如果出现错误 我需要对这两种情况执行此操作 客户端验证阻止页面提交 服务器验证重新显示网页 在 MVC 中是否有一种简单的方法可以实现这一点 jquery 滚动
  • 自定义 Android TabHost 慢片段

    我使用 ActionbarSherlock 和 SlidingMenu 我的 MainActivity 不访问数据库 也不解析任何内容 一切都是静态的 根据您从滑动菜单中选择的 部分 动态生成选项卡 单击 2 次后 应用程序变得非常慢 下面
  • 检查android应用程序是否在前台? [复制]

    这个问题在这里已经有答案了 我针对这个问题找到了很多答案 但这都是关于单个活动的 如何检查整个应用程序是否在前台运行 我不明白你想要什么 但你可以检测当前的前台 后台应用程序ActivityManager getRunningAppProc
  • 表溢出到 div 之外

    我试图阻止一个已明确声明宽度的表在其父级之外溢出div 我想我可以使用某种方式做到这一点max width 但我似乎无法让它工作 以下代码 窗口非常小 将导致这种情况 div div
  • 我什么时候应该在响应标头中真正将“Access-Control-Allow-Credentials”设置为“true”?

    MDN https developer mozilla org en US docs Web HTTP Headers Access Control Allow Credentials表示 当必须在站点之间交换 cookie 授权标头或 T
  • 在 Excel 中将 HEX 转换为 RGB

    我有一列 HEX 和三列 R G 和 B 如何将 HEX 转换为 RGB 例如ff0000 to R 255 G 0 and B 0 我知道前 2 个字符ff属于 R 接下来的200属于 G 最后的200属于 B 所以我必须使用 LEFT
  • Excel:将数组传递给用户定义函数 (VBA)

    编辑 解决方案 请参阅下面的原始问题 在将 1 2 3 这样的数组传递给 UDF 时 我发现需要考虑两件事 区域设置 请参阅答案 1 德国系统上的列表分隔符 通常 是 因此我需要使用 1 2 3 传递的数组在函数中显示为二维数组 因此 它的