【问题标题】:excel vba looping cellsexcel vba循环单元格
【发布时间】:2015-07-31 22:27:48
【问题描述】:

我是 vba 的新手,正在从事一个可以自动重新排列我的电子表格的项目。在众多步骤之一中,我循环遍历单元格以进行匹配和填充。它有效,但存在效率问题。

**更具体的东西**

感谢大家这么快回复我。我还想在循环中放置一个 if 语句。这是我最终想要实现的目标:

sheet1 
    C1  C2  C3
R1          
R2          
R3          

sheet2
Row Col Ind
R1  C1  b
R1  C2  a
R1  C3  b
R2  C1  b
R2  C2  a
R2  C3  b
R3  C1  b
R3  C2  a
R3  C3  b

我写的代码:

Sub test()
Dim field As Range, crit1 As Range, crit_search1 As Range, crit2 As Range, crit_search2 As Range, ind As Range
Dim i As Integer, j As Integer, m As Integer

Set field = Sheets("Sheet1").Cells(i, j)
Set crit1 = Sheets("sheet1").Cells(i + 1, 1)
Set crit_search1 = Sheets("sheet2").Cells(m + 1, 1)
Set crit2 = Sheets("sheet1").Cells(1, j + 1)
Set crit_search2 = Sheets("sheet2").Cells(m + 1, 2)
Set ind = Sheets("sheet2").Cells(m + 1, 3)

For i = 1 To 3
    For j = 1 To 3
        For m = 1 To 9
            If crit1 = crit_search1 And crit2 = crit_search2 Then
            field = ind
    Next
Next
End Sub

而且,我想要得到的结果:

Sheet1
    C1  C2  C3
R1  b   a   b
R2  b   a   b
R3  b   a   b

所以基本上,我通过匹配 Row 和 Col 标准来填充 2D 矩阵。

如果有更好的解决方案,请随意丢弃我的代码。谢谢大家!

【问题讨论】:

标签: vba excel


【解决方案1】:

这里完全不需要循环。您可以设置范围内每个单元格的值,只需说出Range.Value = [value] 为例:

Sub test()
Dim field As Range
Dim i As Integer, j As Integer

Set field = Sheets("Sheet1").Range(Cells(1,1), Cells(i, j))

field.value = "a"

End Sub

这会将 A1 中的每个单元格设置为 ij 对应的任何值,设置为值“a”,没有任何循环。

【讨论】:

  • 非常感谢您的快速回复。这只是一个过于简单的例子。为了能够在我的实际宏中实现我想要的,我不允许在这里发布任何东西,需要循环。
【解决方案2】:

在您发布的示例中,您将 field 设置为固定范围 - 或者至少如果它没有出错,因为您尝试引用 Cells(0,0)...

如果要对数组进行操作,则如下所示:

Sub test()
    Dim arr
    Dim i As Long, j As Long

    'fill array from sheet
    arr = Sheets("Sheet1").Cells(1,1).resize(100,100)

    'modify array
    For i = 1 To 100 
        For j = 1 To 100
                arr(i,j) = "R" & i & ":C" & j
        Next
    Next

    'put array back on sheet
    Sheets("Sheet1").Cells(1,1).Resize(100,100).Value = arr

End Sub

【讨论】:

  • 感谢您的回答!我可能需要的不仅仅是填写单元格。对于发布这样一个模糊的示例,我深表歉意,我还想使用 if 语句来实现匹配,我将编辑我的示例并重新发布它。
【解决方案3】:

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多