循环使用excel VBA中的字符串列表

时间:2016-06-21 16:38:22

标签: excel-vba loops vba excel

我正在尝试编写一个宏,当在Excel工作表中运行时将选择一个特定的列,并将用一个其他特定字符串列表替换字符串列表的所有实例。例如,"字符串a1"的任何实例将替换为" string a2",any" string b1" to" string b2",etc'。

所以选择列后我需要运行

Selection.Replace What:="string a1", Replacement:="string a2", LookAt:=xlWhole    
Selection.Replace What:="string b1", Replacement:="string b2", LookAt:=xlWhole
etc'

现在我想创建一个循环来运行这两个列表,但是我无法弄清楚可以使用哪种循环。
我将很感激有关如何从(隐藏)工作表中的列表或从VBA模块中定义的列表中执行此操作的建议。 非常感谢!

2 个答案:

答案 0 :(得分:1)

我相信如何与大量单元格进行交互的最快方法是将它们保存在内存中。

我个人会将所有字符串存储在字符串Dim sArray() as String列表中,之后我会简单地从第一个元素循环到最后一个元素,如下所示:

Dim iCounter as Long

For iCounter = lbound(sArray) to UBound(sArray)-1 (based on the update below)
   sArray(iCounter) = '...string manipulation logic here'
Next iCounter

修改

我不太清楚你想要填充这个数组的确切程度,但是让我们说你的值在A1的单元格中到A列的最后一个单元格,那么你可以做以下

'initialize initial array
ReDim sArray(0 to 0)

'now loop through the cells
For iCounter = 1 to Range("A999999").End(XlUp).Row 
    If Range("A" & iCounter).value <> vbnullstring then
        'we don't want to store empty strings, right?
        sArray(UBound(sArray)) = Range("A" & iCounter).Value
        ReDim Preserve sArray(0 to UBound(sArray)+1)
    End If       
Next iCounter

答案 1 :(得分:1)

将这些对放入隐藏的工作表后,像这样循环遍历它们:

Dim r As Range
Set r = [HiddenSheet!A1]
Do Until IsEmpty(r.Value)
    [MainSheet!A:A].Replace r.Value, r.Offset(0, 1).Value, xlWhole
    Set r = r.Offset(1, 0)
Loop