簡體   English   中英

Excel VBA循環單元格

[英]excel vba looping cells

我是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矩陣。

如果有更好的解決方案,請隨意破壞我的代碼。 謝謝你們!

這里完全不需要循環。 您可以簡單地通過說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”,而不會發生任何循環。

在您發布的示例中,您正在將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM