【问题标题】:Looping over a list of strings in excel VBA循环遍历excel VBA中的字符串列表
【发布时间】:2016-06-21 16:38:22
【问题描述】:

我正在尝试编写一个宏,该宏在 Excel 工作表中运行时将选择特定列,并将字符串列表的所有实例替换为其他特定字符串的列表。例如,“string a1”的任何实例都将替换为“string a2”,任何“string b1”到“string b2”等等。

所以选择列后我需要运行

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

现在我想创建一个循环来遍历这两个列表,但我不知道可以为此使用哪种循环。
我将不胜感激有关如何从(隐藏)工作表中的列表或 VBA 模块中定义的列表中执行此操作的建议。 非常感谢!

【问题讨论】:

  • 你的意思是你需要用字符串b替换更大数据集中字符串a的所有实例吗?或者您是否有两列并且需要用第一列替换第二列中的所有条目?您能否提供一个更清晰的数据示例,以及您已经尝试过的一些事情?
  • @F. Stephen Q 我将添加和编辑更多信息

标签: excel loops vba


【解决方案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

【讨论】:

  • 能否添加一个填充sArray 列表的代码示例?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 2023-01-24
    • 1970-01-01
    • 2017-04-26
    • 2021-04-02
    • 2017-10-19
    • 2015-10-14
    • 2016-01-24
    相关资源
    最近更新 更多