4

データがごちゃ混ぜになっているExcelシートがあります。たとえば、列ABとACにあるはずのデータは、代わりに列BとCにありましたが、後の行にありました。データをBとCからそれぞれABとACに移動した次のように書かれています。

Dim rCell As Range
Dim rRng As Range

Set rRng = Sheet1.Range("A:A")

i = 1

lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

For Each rCell In rRng.Cells

If rCell.Value = "" Then

    Range("AB" & i) = rCell.Offset(0, 1).Value

    rCell.Offset(0, 1).ClearContents

    End If

    i = i + 1

    If i = lastRow + 1 Then

    Exit Sub

    End If

Next rCell

End Sub

ただし、データが正しい列にあるため、適切な行の下の行にデータがあるという問題は修正されません。私はVBAマクロを初めて使用するので、データを整列させるための支援をいただければ幸いです。オフセットパラメータ(-1,0)を切り替えようとしましたが、機能しません。

4

2 に答える 2

1

このようなことを試してみませんか?

For i = Lastrow To 1 Step -1
    ' move data into cell AA from Cell A one row down
    Cells(i, 27).Value = Cells(i + 1, 1).Value
Next
于 2012-10-30T20:11:30.913 に答える
0

やろうとしていることを達成するために範囲をループする必要はありません。

代わりにこれを試してください:

Sub MoveBCtoAbAcUpOneRow()
    Dim firstBRow As Integer
    Dim lastBRow As Long
    Dim firstCRow As Integer
    Dim lastCRow As Long

    ' get the first row in both columns
    If Range("B2").Value <> "" Then
        firstBRow = 2
    Else
        firstBRow = Range("B1").End(xlDown).Row
    End If
    If Range("C2").Value <> "" Then
        firstCRow = 2
    Else
        firstCRow = Range("C1").End(xlDown).Row
    End If

    ' get the last row in both columns
    lastBRow = Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row
    lastCRow = Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row

    ' copy the data to the correct column, up one row
    Range("B" & firstBRow & ":B" & lastBRow).Copy Range("AB" & firstBRow - 1)
    Range("C" & firstCRow & ":C" & lastCRow).Copy Range("AC" & firstCRow - 1)

    ' clear the incorrect data
    Range("B" & firstBRow & ":B" & lastBRow).ClearContents
    Range("C" & firstCRow & ":C" & lastCRow).ClearContents

End Sub

ノート:

  • 各列のデータの形状が同じであれば、それぞれの最初と最後の行を見つける必要はありません。2 つではなく、それぞれに 1 つの変数と 1 つのコピー操作のみが必要です。
  • 変数宣言が必須に設定されていることを確認してください。(Tools -> Options -> Require Variable Declaration) すでにこれを行っているかもしれませんが、Sub の先頭が切り捨てられたように見えるため、わかりませんでした。
于 2012-10-30T22:53:15.267 に答える