1

とについて基本的な質問がSheet.Rangeあり.Insert Shift:=xlDownます。ワークシートに、2列しかない数値のテーブルをインポートしたいと思います。マクロが元のテーブルの2つの値(同じ行)を読み取るたびに、ワークシートの列AとBにそれらをコピーし、次の行に別の数値のペアを書き込んでプロセスを続行する必要があります。私が書いたら

Sheet.Range("A1:B1").Insert Shift:=xlDown
Sheet.Cells(1, 1) = "number 1 "
Sheet.Cells(1, 2) = "number 2"

最後に取得するのは、元のテーブルの最後の値のペアだけです。つまり、マクロは行ごとに下に移動するのではなく、上書きします。何を修正すればよいですか?ありがとう!Avitus

4

1 に答える 1

3

投稿されたコードは機能しているように見えますが、新しいデータは逆の順序で配置されます

としてテスト

Sub demoAsIs()
    Dim Sheet As Worksheet
    Dim i As Long
    Set Sheet = ActiveSheet
    For i = 0 To 4
        Sheet.Range("A1:B1").Insert Shift:=xlShiftDown
        Sheet.Cells(1, 1) = "number " & 2 * i + 1
        Sheet.Cells(1, 2) = "number " & 2 * i + 2
    Next
End Sub

サンプルデータ

前:
ここに画像の説明を入力してください

後:
ここに画像の説明を入力してください

順序を逆にするには、これを試してください

Sub demo()
    Dim Sheet As Worksheet
    Dim i As Long
    Dim rNewData As Range
    Set Sheet = ActiveSheet
    Set rNewData = Sheet.Range("A1:B1")
    For i = 0 To 4
        rNewData.Insert Shift:=xlShiftDown
        ' rNewData now refers to the one row down from where it was
        rNewData.Cells(0, 1) = "number " & 2 * i + 1
        rNewData.Cells(0, 2) = "number " & 2 * i + 2
    Next
End Sub

結果:
ここに画像の説明を入力してください


xlDownvsに関する注記xlShiftDown

Excel VBaは、パラメータの多くの列挙セットを提供します。各列挙には、基になる数値があります。Insertメソッド、Shiftパラメータは列挙 XlInsertShiftDirection型を使用します:xlShiftDownxlShiftToRight
xlShiftDown= -4121
同じ基になる数値(などxlDown)を持つ別のセットから列挙を提供することは機能しますが、厳密には正しくありません。

に注意してくださいInsert

Shiftパラメータはオプションです。省略した場合、Excelは範囲の形状に基づいてシフトする方向を決定します。

于 2013-03-24T23:10:36.713 に答える