簡體   English   中英

Excel VBA:如何在For Each語句中使用更改單元格的值?

[英]Excel VBA: How to use changing cell values in For Each statement?

因此,我構建了以下宏,幾乎可以捕獲其需要執行的操作。 它從一張sheet3復制數據,然后將數據粘貼到sheet1中。 之后,它將用sheet2中找到的值替換變量1-7。

當它在一行中執行時,宏工作得很好。 但是,我希望它遍歷Sheet2中所有填充的行,並用Sheet2中的相應行值替換變量。

希望在這里找到答案,因為我是VBA的新手,還沒有找到答案。

Sub Macro1()

For Each c In Sheets("Sheet2").Range("A2:G13").Rows

Sheets("Sheet3").Activate
Range("A1:AH125").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Activate
lMaxRows = Cells(Rows.Count, "A").End(xlUp).row
Range("A" & lMaxRows + 1).Select
ActiveSheet.Paste

Selection.Replace What:="Variable1", Replacement:=Sheets("Sheet2").Range("A").Value, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:="Variable2", Replacement:=Sheets("Sheet2").Range("B").Value, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:="Variable3", Replacement:=Sheets("Sheet2").Range("C").Value, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:="Variable4", Replacement:=Sheets("Sheet2").Range("D").Value, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:="Variable5", Replacement:=Sheets("Sheet2").Range("E").Value, LookAt:= _
    xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:="Variable6", Replacement:=Sheets("Sheet2").Range("F").Value, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:="Variable7", Replacement:=Sheets("Sheet2").Range("G").Value, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False

Next

End Sub

您顯然已經使用宏記錄器創建了此宏。 在嘗試理解新語句的語法時,這是一個不錯的起點。 但是,宏記錄器不知道您的目標,而是將每個小步驟記錄為一條語句。 在嘗試圍繞它們進行循環之前,有必要整理並合並這些語句。

考慮:

Sheets("Sheet3").Activate
Range("A1:AH125").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Activate
lMaxRows = Cells(Rows.Count, "A").End(xlUp).row
Range("A" & lMaxRows + 1).Select
ActiveSheet.Paste

我可以將其替換為:

  lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row
  Sheets("Sheet3").Range("A1:AH125").Copy _
                   Destination:=Sheets("Sheet1").Range("A" & lMaxRows + 1)

我保留了用於計算lMaxRows的語句,但是將所有其他語句替換為一個Copy語句。 該語句的語法為:

SourceRange.Copy Destination:=TopLeftCellOfDestination

Destination:=是可選的,但有助於使語法更清晰。

我尚未切換工作表或未選擇任何內容。 這個VBA更快,一旦掌握了語法,就更容易理解VBA在做什么。

現在考慮:

Selection.Replace What:="Variable1", Replacement:=Sheets("Sheet2").Range("A").Value, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False

Selection必須走,因為我還沒有選擇任何東西。 但是真正的問題是:

Sheets("Sheet2").Range("A").Value

這是無效的VBA,並且確實包含For變量c

正確的對象是:

c.Columns("A").Value

c是例如A2:G2A13:G13 我已經選擇了范圍A列來給我A2A13 然后,我就采用了該單元格的價值。

要替換我在此Replace塊外面放置的With語句的Selection ,以給出下面的代碼,我相信它可以滿足您的要求:

Sub Macro1()

For Each c In Sheets("Sheet2").Range("A2:G13").Rows

  lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row
  Sheets("Sheet3").Range("A1:AH125").Copy _
                   Destination:=Sheets("Sheet1").Range("A" & lMaxRows + 1)

  With Worksheets("Sheet1")
    With .Range(.Cells(lMaxRows + 1, "A"), .Cells(lMaxRows + 126, "AH"))

     .Replace What:="Variable1", Replacement:=c.Columns("A").Value, LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
         ReplaceFormat:=False
     .Replace What:="Variable2", Replacement:=c.Columns("B").Value, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False
     .Replace What:="Variable3", Replacement:=c.Columns("C").Value, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False
     .Replace What:="Variable4", Replacement:=c.Columns("D").Value, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False
     .Replace What:="Variable5", Replacement:=c.Columns("E").Value, LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False
     .Replace What:="Variable6", Replacement:=c.Columns("F").Value, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False
     .Replace What:="Variable7", Replacement:=c.Columns("G").Value, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False

    End With
  End With

Next

End Sub

暫無
暫無

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

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