从Excel表格中的一列短语dynamic地填充string数组

我有2张。 我在表1中使用用户定义的函数,我想用数组来比较一些string。 该数组由第二个表单元格中的一列单元格的内容组成(称为“短语”)。

所以(用另一种方式来看)在“短语”中,我有100个stringinput到列P,单元格3到102.我想把它们放到一个数组中,以后我可以使用。

现在,让我把它复杂一点 – 我的意图是电子表格的用户将能够添加新的内容到列P,以便它可能最终是500单元或更多。 所以我真的想dynamic地填充该数组。

这是我的地方 – 而且似乎没有工作:

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 

我哪里错了?

请注意 – 我试过这没有.Value – 似乎没有工作。 我已经用.Text而不是.Value尝试了这个 – 似乎没有工作。 我试过CStr(Worksheets("phrases").Range(i + 3, 16).Value)和几个变化 – 它似乎并没有工作。

我期望有一些简单的东西在这里失踪 – 但我不知道是什么。

 Dim newarray() As String Dim i As Long Dim lr AS Long Dim counter As Long lr = ActiveSheet.Range("P" & Rows.Count).End(xlUp).Row counter = 0 For i = 1 To lr If Worksheets("phrases").Range("P" & i).value <> 0 Then Redim Preserve newarray(counter) newarray(counter) = Worksheets("phrases").Range("P" & i).value counter = counter + 1 End If Next 

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

您可以直接从单元格创build数组,而不必使用一行代码循环,这还将捕获用户通过使用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