两个数组相乘 - 区域小数分隔符问题

2024-05-23

Background:

刚才,我回答了一个问题,我必须将两个相同大小的数组相乘。但是我注意到我的本地小数分隔符存在一个特殊问题。


Sample Code:

Sub Sample()

Dim arr1 As Variant, arr2 As Variant, arr3 As Variant, arr4 As Variant

arr1 = Array(1, 2, 3)
arr2 = Array(0.4, 0.3, 0.2)

'Working method for static
arr3 = Evaluate("{1,2,3}*{0.4,0.3,0.2}")

'Failing method for dynamic
arr4 = Evaluate("{" & Join(arr1, ",") & "}*{" & Join(arr2, ",") & "}")

End Sub

Issue:

Whereas arr3将正确填充,arr4不会并且会出现很多错误。原因是我的区域设置小数点分隔符。

只是一个简单的Debug.Print arr2(1)将返回0,4。没什么大不了的,因为 VBA 仍然可以使用以本机 (en_us) 点作为小数分隔符输入的变量。

问题是Debug.Print Join(arr2, ",")将返回:0,5,0,4,0,3。正如您所看到的,VBA 本来需要处理的点现在全部变成了逗号。这反过来又不能正常工作.Evaluate这将期望原生点。


Question:

在不改变的情况下解决这个问题的任何方法Application.DecimalSeperator或者编写一个字符串值(我现在做了什么来克服这个问题),这在动态检索数组的情况下并不是很好?

根据要求,可以找到 linkedin 帖子here https://stackoverflow.com/a/59323867/9758194这基本上归结为添加一些变量来插入书面值字符串,例如:str = {0.4,0.3,0.2}


Edit:

我可以解决这个问题的另一种方法是使用TEXTJOIN,而不是Join实际上保留了点:

arr4 = Evaluate("{" & Application.TextJoin(",", True, arr1) & "}*{" & Application.TextJoin(",", True, arr2) & "}")

问题是,并不是每个人都可以使用该功能。因此,虽然可以将其交换给具有不同本地设置的其他人,但他们需要拥有最新的 Excel 版本之一。

另一种使用的方法是循环arr2,将每个元素与Cstr然而,这也会将点替换为逗号。


我的第一个猜测是,Application.DecimalSeperator 在 arr4 的情况下不起作用的原因是因为 Join() 函数生成一个字符串,该字符串不作为小数处理,因此点不会被逗号替换。

我假设下面的代码运行如下:

  1. 首先,它将小数点符号“.”转换为小数点。到“,”,包括 arr2
  2. 然而 Join(arr2, ";") 会导致string所以Application.Decimal Separator =“。”不起作用(提醒 - 它 需要将数组项识别为数字以更改小数点 分隔器)

- 要修复它,我们可以使用 Replace() 作为字符串的解决方法。


Sub Sample()

Dim arr1 As Variant, arr2 As Variant, arr3 As Variant, arr4 As Variant

arr1 = Array(1, 2, 3)
arr2 = Array(0.4, 0.3, 0.2)
Debug.Print arr2(1)
'Failing method for dynamic

arr4 = Application.WorksheetFunction.Transpose(Evaluate("{" & Join(arr1, ";") & "}*{" & Replace(Join(arr2, ";"), Application.DecimalSeparator, ".") & "}"))
Debug.Print Join(arr1, ";")
Debug.Print Join(arr2, ";")

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

两个数组相乘 - 区域小数分隔符问题 的相关文章

  • VBA - 填充自定义功能区下拉列表/列表框

    我无法填充下拉列表 列表框 原始代码来自 https exceloffthegrid com inserting a dynamic drop down in ribbon https exceloffthegrid com inserti
  • 根据当前工作簿中的匹配值编辑主工作簿中的单元格

    这里的目标是比较两个工作簿之间 A 列中的值 当前工作簿是 xlsm 目标工作簿是 xlsx 如果找到任何匹配项 匹配值同一行的 E 列中的值在目标工作簿中发生更改 在这种情况下 必须将工作簿分开 我决定通过选择当前工作簿 A2 中的第一个
  • 从“查找”结果中出现“下标超出范围”错误

    我想在 Excel 工作表中查找一个字符串 Excel 单元格值是使用公式计算的 当我运行这段代码时 Set firstExcel CreateObject Excel application firstExcel Workbooks Op
  • 如何将 JavaScript 图表导出到 Excel 文件 (HighCharts)

    我必须将 Javascript 图表 HighCharts 导出到 Excel 文件中 图表在div中呈现 但excel不呈现javascript生成的html css内容 仅呈现没有样式的文本 一个解决方案是将图表渲染为图像 jpeg 但
  • VBA 激活 Internet Explorer 窗口

    我正在制作一个宏 用于打开 Internet Explorer 导航并登录网站 一切正常 但我需要将 IE 窗口放在前面并激活它 这样我就可以使用SendKeys在上面 我发现网站和视频在名为的命令上有不同的方法AppActivate我已经
  • 从网站上的表格中抓取数据,而无需搜索标签

    这是这个问题的延续使用 InStr 搜索引号 空格 冒号等 https stackoverflow com questions 52673819 using instr to search for quotes spaces colons
  • Countif 不适用于小时和/或日期

    您好 我有 3 列内的数据 A 目的地 例如洛杉矶 B 承运人 例如 Ups C 发货时间 预计 4 00 使用的时间是24小时时间 不含Am Pm 我需要进行计数才能知道在特定时间我们有多少批货物 尝试过 COUNTIF A1 A100
  • 将最后几个功能添加到我的调度模板生成器中

    感谢 StackOverflow 上的一些出色的人 我几乎完成了调度模板生成器的代码 我还想补充三件事 但我遇到了一些麻烦 当前细分 我有两张表 2 员工列表 和 X 模板 员工列表中的值是从单元格 D9 开始的一列员工姓名 然后将员工值转
  • 文本到行 VBA Excel

    我有一个电子表格 其中包含大约 4000 行数据 其中一列数据具有唯一的订单号 我希望使用 作为分隔符将其分隔 所以本质上我想要 Name Order Date Jane 123 001 111 08 15 2013 Gary 333 12
  • 将范围内的每个值乘以常数,但跳过空白单元格

    我需要一个简单快速的解决方案 用于将范围内的所有值乘以 VBA 代码中的数值 我知道这个解决方案 将整个范围乘以值 https stackoverflow com questions 18990541 multiply entire ran
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • VBA 中的多线程

    这里有人知道如何让VBA运行多线程吗 我正在使用 Excel 无法用 VBA 本地完成 VBA 构建在单线程单元中 获得多个线程的唯一方法是使用 VBA 之外的其他具有 COM 接口的东西构建 DLL 并从 VBA 调用它 信息 OLE 线
  • 导出到excel时如何显示前导零?

    我正在通过更改内容类型来创建 Excel 报告 Response ContentType application vnd ms excel 我有包含前导零的值 问题是导出到 Excel 时缺少前导零 e g 000123 gt 123 我知
  • 如何在 Excel 中对一组数据进行排序以匹配另一组数据?

    我有一个不按字母或数字顺序排列的数据列表 我想对同一日期的第二个列表进行排序以匹配第一个列表 我无法更改数据的顺序 我的目标是将第二组中的附加数据粘贴回第一个数据集中 DATA SET A DATA SET B 22350 BH160 10
  • 如何找到特定程序的安装目录?

    我已经成功地编写了一些用于工作的 VBA 宏 这些宏基本上创建了一个数据文件 将其提供给一个程序并对该程序的输出进行后处理 我的问题是程序安装路径是硬编码在宏中的 并且安装在我同事的计算机上可能会有所不同 我首先想到的是 我可以从每个人那里
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • JasperReports 中每个工作表属性一页

    我有一个要求 我必须在 JasperReports 中设计一个报告 该报告有 4 页 第一张纸有 5 页 类似的其他纸有一页或两页 我面临的问题是 如果我使用net sf jasperreports export xls one page
  • VBA 中的匈牙利语好吗?

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

    这是我想要完成的任务 Value Display 1 1 11 11 111 111 1111 1 11k 11111 11 11k 111111 111 11k 1111111 1 11M 11111111 11 11M 11111111
  • 检查未绑定控件是否具有值的正确方法

    简单场景 一个表单和一个文本框 未绑定 Text1 If lt gt Text1 Then MsgBox Not Empty End If 上面的代码有效 表达方式 lt gt Text1如果文本框包含字符 则计算结果为 True 无论文本

随机推荐