Tag: 数组

如何在Excel中初始化vba中的multidimensional arrayvariables

微软网站build议下面的代码应该工作: Dim numbers = {{1, 2}, {3, 4}, {5, 6}} 但是,当我尝试在excel VBA模块中使用它时,我收到了一个complile错误。 以下工作适用于一维数组: A = Array(1, 2, 3, 4, 5) 然而,我还没有设法find一种方法来做一个二维数组。 有任何想法吗?

将Excel范围转换为VBAstring

我想将给定范围内的值转换成VBAstring,其中原始单元格值由任何选定的列分隔符和行分隔符分隔。 分隔符可以是一个字符或更长的string。 行分隔符是行尾的string。 string应该像我们从左上angular,从左到右,到右下angular读文本一样。 以下是范围A1中的VALUES的示例:C5: +—-+—-+—-+ | A1 | B1 | C1 | +—-+—-+—-+ | A2 | B2 | C2 | +—-+—-+—-+ | A3 | B3 | C3 | +—-+—-+—-+ | A4 | B4 | C4 | +—-+—-+—-+ | A5 | B5 | C5 | +—-+—-+—-+ 期望的结果是一个VBAstring: A1,B1,C1@$A$2,$B$2,$C$2@A3,B3,C3@A4,B4,C4@A5,B5,C5@ 为了可读性,我会这样显示它: A1,B1,C1@ A2,B2,C2@ A3,B3,C3@ A4,B4,C4@ A5,B5,C5@ 作为列分隔符,我select了(逗号)和行分隔符@符号。 […]

Redim可变数量的维度在VBA中

我有一个Excelmacros(VBA)的情况下,我想维数组维数和维度的边界在运行时确定。 我让用户通过为每个选项types创build一个列并填写下面的可能性来指定一系列组合选项。 运行时通过检查纸张来确定列数和选项数量。 一些代码需要运行每个组合(从每列中select一个),我想将结果存储在一个multidimensional array中。 维度的数量可能在2到6之间,所以如果必须的话,我总是可以回到一堆其他的块中,但是感觉应该有一个更好的方法。 我在想,如果我可以在运行时将Redim语句构build为string并执行string,那么可以这样做,但这似乎不可能。 有没有办法dynamic地用不同数量的维度来进行Redim处理?

迟绑定一个数组

我很难过 ,因为我无法find任何关于在VBA中绑定数组的问题。 这甚至有可能吗? 如果是的话,怎么样? 如果不是 – 为什么? 注意:我不介意使用像.Net / C#这样的原生types Dim o as Object set o = CreateObject("System.Array") 即使System.Array是COM可见 ,似乎不可能实例化它。 任何想法如何延迟绑定VBA中的数组数据types? 请不要提及Dictionary或Collections,因为这个问题对于数组非常具体 附加信息: 这是我的另一个问题的后续行动。 由于似乎不可能将本地VBA数组传递到本地.Net集合而不循环,我只是想知道是否有可能延迟绑定一个数组,因为两者似乎都是安全的,这意味着它们是兼容的,因此将一个VBA数组传递给一个。净一个将是可能的 – 请纠正我,如果我完全错了。

在VBA中调整数组

我有3个数据的数组,通过读取excel表格填充,一些数据点丢失,因此刚刚进入excel作为“NA”,所以我想通过我的数组,查找每个这些NA的实例,并从arrays中删除,因为信息是无用的。 我需要同时更新所有三个数组。 Sub group_data() Dim country(), roe(), iCap() As String Dim i As Integer For i = 1 To 3357 country(i) = Workbooks("restcompfirm.xls").Worksheets("Sheet1").Range("C1").Offset(i, 0) roe(i) = Workbooks("restcompfirm.xls").Worksheets("Sheet1").Range("AP1").Offset(i, 0) iCap(i) = Workbooks("restcompfirm.xls").Worksheets("Sheet1").Range("BM1").Offset(i, 0) Next i End Sub 所以,如果我发现一个“NA”作为roe或iCap中的值之一,我想摆脱所有数组中的那块数据。

混合编号和文本时出现意外的COUNTIF行为(EXCEL)

这个问题是关于当用作数组公式时,Excel的COUNTIF函数如何处理不同的数据types。 有很多很好的post详细介绍了如何使用COUNTIF来完成诸如从列表中提取唯一值的任务,例如这篇文章 。 我已经设法使用这个和其他职位的例子来解决具体的问题,但我想更深入地了解数组公式以适应新的需求。 我遇到了COUNTIF的一个奇怪的行为。 一般来说,Excel似乎将string视为“大于”数字,因此以下示例是有效的: Cell Formula Returns =1<2 TRUE ="a"<"b" TRUE ="a">"b" FALSE =1<"b" TRUE 现在,假设范围A1:A6包含以下数据集: 1 2 3 A B C 对于这个集合中的每个单元格,我想检查集合中所有单元格中小于或等于那个单元格的数量(在更复杂的公式中有用的技术)。 我在范围B1中input以下数组公式:B6: {=COUNTIF($A$1:$A$6,"<="&$A$1:$A$6)} (CTRL + SHIFT + ENTER) 根据上面比较数字和string的例子(也在下面的D列中说明),我期望下面显示的输出看起来像列C.然而,数组公式返回列B中显示的结果,这表明string和数字元素按照COUNTIF分别计算。 Column A Column B Column C Column D 1 1 1 A1<"C" = TRUE 2 2 2 A2<"C" = TRUE 3 3 […]

VBA – 获取数组中第n个最大值的索引

我想查找数组中第n个最大值的索引。 我可以做以下事情,但是当两个值相等时会遇到麻烦。 fltArr(0)=31 fltArr(1)=15 fltArr(2)=31 fltArr(3)=52 For i = 0 To UBound(fltArr) If fltArr(i) = Application.WorksheetFunction.Large(fltArr, n) Then result = i End If Next n = 1 —> 3 n = 2 —> 2(但我希望这是0) n = 3 —> 2 n = 4 —> 1

使用VBA将单元格值的范围分配给variables数组

我对VBA很新,在这里忍受着我。 我想给一组variables赋值一组范围,即。 运行一个简短的代码来简化以下内容 Dim Sample 1 as string Sample1 = activeworksheet.range("C17").value Dim Sample 2 as string Sample2 = activeworksheet.range("C18").value} 等等 遵循excelfunctions.net教程,我知道我可以缩短声明 Dim Sample(1 to 20) as a string 但教程放在那里(因为它是一个关于名字的教程),build议我填充它如下 sample(1)=activesheet.range("C7").value sample(2)=activesheet.range("C7").value 等等 我发现下面的讨论是在正确的轨道上回答我的追求,但是我很难将其应用于我的情况。 ( 用于循环的Excel VBA数组范围 ) 作为一个后续的说明,我最终试图为这些variables赋值,以便在下面的过程中使用,而不是每次声明和赋值。 谢谢!

用分隔符分割string的最有效的方法,同时使用excel vba忽略所述分隔符的某些实例

我有一个非常冗余的旧代码,我创build时,我第一次发现,并决定学习vba(和男人我走了很长的路)。 我正在使用此代码来循环通过包含多个用逗号分隔的值的单元格。 但是,有些情况下,我不能简单地使用诸如Split(string,",")函数之类的东西,因为某些值在该值内有逗号(示例值: [blah blah,so blah blah] )。 在存在这些括号的情况下(它们围绕着每个值都有一个逗号),我devise了一个相当冗长的方法,这是我的老方法来正确地分割值,把它们倒入一个数组,然后继续我的其他任务。 但是,现在我已经决定重新审视这些代码并修正了这个问题的准确性。 这是一些背景。 示例可以在一个单元格中find的数据: 请注意:这是供应商发给我们的数据,我们无法控制他们input的内容或input内容。 这是一个简单的例子,以显示在某些情况下通常提供数据的要点 Available on 2 sides: Silkscreen,[full: color, covers entire face],Pad Print: One color,[heat transfer, may bleed] 价值观是: 可用于两面:丝网印刷 [全部:颜色,覆盖整个脸] 移印:一种颜色 [传热,可能stream血] 我在找什么: 我正在寻找一个更有效和更简单的方法来正确地分割值(同时保留有它们的值的括号)。 我相信我已经设法创build一个更有效率和紧凑的方法来处理不包含使用下面的代码括号的实例 新的代码(正在build设中):我不知道如何有效和准确地分割与括号的单元格的问题 Sub Test() Dim rngXid As Range, RegularColons As New Collection, UpchargeColons As New Collection, additionals As Range, […]

在VBA自动筛选器中使用string数组作为条件

我搜查了其他post,发现类似的问题,但没有什么可以帮助我具体。 我试图采取一个string数组,并将其用作过滤条件。 这很棘手,因为数组是由一个函数创build的,并且具有可变数量的元素和内容。 我需要自动filter,并检查列E的每一个元素。 我试过两种方法 1) With Sheet17 .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr) End With 结果:将筛选器应用于列E,但未能select任何选项 2) For i = 0 To counter – 1 With Sheet17 .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr(i)) End With Next 计数器是一个整数,表示数组中元素的数量结果:这个数组正确地循环遍历数组,但是只select了filter的最后一个选项 – 大概是因为每次循环它都会重新开始并取消选中所有其他选项最后只有最近的选项保持被选中。