Arrays 从excel工作表中的一列短语动态填充字符串数组

Arrays 从excel工作表中的一列短语动态填充字符串数组,arrays,string,excel,vba,Arrays,String,Excel,Vba,我有两张床单。我在第1页中使用了一个用户定义的函数,其中我想使用数组来比较一些字符串。该数组由第二个工作表(名为“短语”)中一列单元格的内容组成 所以(换一种方式来看)在“短语”中,我有100个字符串输入到第p列,第3到102单元格。我想把它们都放到一个数组中,以后可以使用 现在,让我把它复杂化一点——我的意图是电子表格的用户将能够向p列添加新内容,这样它最终可能是500个单元格或更多。所以我真的想动态地填充这个数组 这就是我所在的地方,但它似乎不起作用: Dim newarray() As S

我有两张床单。我在第1页中使用了一个用户定义的函数,其中我想使用数组来比较一些字符串。该数组由第二个工作表(名为“短语”)中一列单元格的内容组成

所以(换一种方式来看)在“短语”中,我有100个字符串输入到第p列,第3到102单元格。我想把它们都放到一个数组中,以后可以使用

现在,让我把它复杂化一点——我的意图是电子表格的用户将能够向p列添加新内容,这样它最终可能是500个单元格或更多。所以我真的想动态地填充这个数组

这就是我所在的地方,但它似乎不起作用:

Dim newarray() As String
Dim i As Long
Dim counter As Long
counter = 0
For i = 0 To 5000
    If Worksheets("phrases").Cells(i + 3, 16).Value <> 0 Then
    newarray(counter) = Worksheets("phrases").Range(i + 3, 16).Value
    counter = counter + 1
    End If
Next
Dim newarray()作为字符串
我想我会坚持多久
昏暗的柜台一样长
计数器=0
对于i=0到5000
如果工作表(“短语”)。单元格(i+3,16)。值为0,则
新数组(计数器)=工作表(“短语”)。范围(i+3,16)。值
计数器=计数器+1
如果结束
下一个
我哪里做错了

请注意-我在没有
的情况下尝试了此操作。Value
-似乎不起作用。 我用
.Text
而不是
.Value
尝试了这个方法,但似乎不起作用。 我尝试了CStr(工作表(“短语”).Range(I+3,16).Value)和一些变体,但似乎不起作用


我希望这里缺少一些简单的东西,但我不知道是什么。

首先构造一个逗号分隔字符串。然后使用Split()函数将字符串转换为数组。

Dim newarray()作为字符串
我想我会坚持多久
变暗lr为长
昏暗的柜台一样长
lr=ActiveSheet.Range(“P”和Rows.Count).End(xlUp).Row
计数器=0
对于i=1至lr
如果工作表(“短语”).范围(“P”和i).值为0,则
Redim保留新阵列(计数器)
newarray(计数器)=工作表(“短语”).范围(“P”和i).值
计数器=计数器+1
如果结束
下一个

您可以直接从单元格生成数组,而无需使用一行代码进行循环,这也将捕获用户使用
Resize()方法添加到p列底部的任何内容:

Sub SO()

stringArray = [P3:P102].Resize(Range("P" & Rows.Count).End(xlUp).Row - 2, 1)

'// Print each value in the array
For Each x In stringArray
    Debug.Print CStr(x)
Next x

End Sub

你能解释一下为什么这有助于解决问题吗?谢谢-这很有效-但我不确定为什么。我将“活动表”改为“工作表(“短语”)”。因为短语不是活动表-假设这是正确的(它工作了)。您使用“ActiveSheet.Range(“P”&Rows.Count).End(xlUp.Row)”清楚地处理了动态列大小,但我不知道您是如何形成该对象引用的。很明显,我需要了解ReDim。最后-我的“计数器变量”在这里似乎没有什么意义(除非列中有一些空单元格。不过,多亏了muchKen,引用活动工作表意味着在运行宏时选择的工作表。如果您希望它在特定工作表上运行,那么可以将其称为工作表(“名称”)或者你可以通过索引号工作表(1)、工作表(2)等来引用它。其中1是工作簿中的第一个工作表,2是第二个工作表,依此类推。谢谢。稍后我会尝试(上面的答案有效)-但我的算法中有几个数组-我会尝试以这种方式形成另一个数组作为学习练习
Sub SO()

stringArray = [P3:P102].Resize(Range("P" & Rows.Count).End(xlUp).Row - 2, 1)

'// Print each value in the array
For Each x In stringArray
    Debug.Print CStr(x)
Next x

End Sub