简体   繁体   English

VBA ElseIf具有多个范围

[英]VBA ElseIf with multiple ranges

I have a file with data in A - U and W - AA. 我有一个文件,数据在A-U和W-AA中。 I am trying to write code that will copy cells from the first range A - U and once it encounters a blank cell in A, it looks to the second range W - AA. 我正在尝试编写将复制第一个范围A-U中的单元格的代码,一旦遇到A中的空白单元格,它将查找第二个范围W-AA。 The first part of the code is working, but I cannot seem to figure out how to call the second range. 代码的第一部分正在工作,但是我似乎无法弄清楚如何调用第二个范围。

Sub Test()

    Dim rowCount2 As Long, shtSrc As Worksheet
    Dim shtDest As Worksheet
    Dim rng2 As Range
    Dim rng3 As Range
    Dim currentRow As Long


    Set shtSrc = Sheets("Data")
    Set shtDest = Sheets("Audit")

    rowCount2 = shtSrc.Cells(Rows.Count, "A").End(xlUp).Row

    Set rng2 = shtSrc.Range("A1:A" & rowCount2)
    Set rng3 = shtSrc.Range("W1:W" & rowCount2)

    currentRow = 2

    For Each cell2 In rng2.Cells
        If cell2.Value <> "" Then
            shtDest.Range("B" & currentRow).Value2 = cell2.Value2
            shtDest.Range("C" & currentRow).Value2 = cell2.Offset(0, 1).Value2
            shtDest.Range("G" & currentRow).Value2 = cell2.Offset(0, 2).Value2

            currentRow = currentRow + 1

        ElseIf cell2.Value = "" Then

            shtDest.Range("B" & currentRow).Value2 = cell2.Value2
            shtDest.Range("C" & currentRow).Value2 = cell2.Offset(0, 1)

            currentRow = currentRow + 1

        End If
    Next cell2

End Sub

You could just use the offset function to get to the appropriate columns: 您可以只使用offset函数到达相应的列:

Dim RangeDiff As Integer
...
Set rng2 = ...
Set rng3 = ...
RangeDiff = Rng3.Column - rng2.column
...

ElseIf cell2.Value = "" Then

        shtDest.Range("B" & currentRow).Value2 = cell2.Offset(0, RangeDiff).Value2
        shtDest.Range("C" & currentRow).Value2 = cell2.Offset(0, RangeDiff + 1)

...

EDIT per new understanding of requirements: 根据对需求的新理解进行编辑:

...
For Each cell2 In rng2.Cells
    If cell2.Value <> "" Then
        shtDest.Range("B" & currentRow).Value2 = cell2.Value2
        shtDest.Range("C" & currentRow).Value2 = cell2.Offset(0, 1).Value2
        shtDest.Range("G" & currentRow).Value2 = cell2.Offset(0, 2).Value2

        currentRow = currentRow + 1

    ElseIf cell2.Value = "" Then

        Exit For
    End If
Next cell2

For Each cell3 In rng3.Cells
    If cell3.Value <> "" Then
        shtDest.Range("B" & currentRow).Value2 = cell3.Value2
        shtDest.Range("C" & currentRow).Value2 = cell3.Offset(0, 1).Value2
        shtDest.Range("G" & currentRow).Value2 = cell3.Offset(0, 2).Value2

        currentRow = currentRow + 1

    ElseIf cell3.Value = "" Then

        Exit For
    End If
Next cell3

... ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM