• ベストアンサー

エクセルのVBA

AB列に複数行データがありB列の条件でその行のABのデータ を抽出し特定の場所に貼り付けたいのですが貼付け場所が 任意に選択できません。今はデータの無いA列から貼り付けていますが できればD列の1行目か2行目から貼り付ける方法を教えてください。 また今のコードでは貼付けたいデータの順番が下のデータからになってしまいます。 これも元のデータ順にしたいのでよろしくお願いします。 今使っているコードは下記の通りです。 For i = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1 If Cells(u, 2) < "96" And Cells(u, 2) <> "0" And Cells(u, 2) <> " " Then Range(Cells(u, 1), Cells(u, 2)).Select Selection.Copy Range("A1").End(xlDown).Offset(1, 0).Activate Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End If Next

質問者が選んだベストアンサー

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

Range("A1").Offset(0, 0) = Range("A1") Range("A1").Offset(2, 3) = Range("D3") です。 Range("A1").End(xlDown) は、A1を選択した状態で、[Ctrl]+[↓]を押した結果のセルのことになります。 Range("A1").End(xlDown).Offset(1, 0) は、A1を選択した状態で、[Ctrl]+[↓]を押した結果のセルの、1つ下の行で、同じ列のセルのことになります。 ところで、質問文には、「データの無いA列」と書いてありますが、本当にA列にデータが何も無ければ、 Range("A1").End(xlDown) は、A65536(シートの最下行)となり、 Range("A1").End(xlDown).Offset(1, 0) は、更にその1行下のセルを参照しようとしているのですが、シートの最下行の更に下にはセルは無いので、エラーになるはずです。 Range("D1").End(xlDown).Offset(1, 0).Activate がエラーになるのは、そういう理由だと思います。

popogoe
質問者

お礼

Offsetが理解できました。 丁寧に説明していただき本当にありがとう ございました。

その他の回答 (2)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

  >For i = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1 >If Cells(u, 2) < "96" And Cells(u, 2) <> "0" And Cells(u, 2) <> " " Then カウンター変数が、i なのに、Forの次からのセル参照は 全て、u になっているので、Uに変更してあります。 '--------------------------------------------------- Sub Test()  Dim u As Long  Dim R As Long  For u = 1 To Cells(Rows.Count, 2).End(xlUp).Row   If Cells(u, 2) < "96" And Cells(u, 2) <> "0" And Cells(u, 2) <> " " Then    R = Cells(Rows.Count, 4).End(xlUp).Row + 1      Cells(R, 4).Resize(1, 2).Value = Cells(u, 1).Resize(1, 2).value   End If  Next End Sub '----------------------------------------------------- 値のみのコピーですから、Copyメソッドを使う必要はありません また、Selectメソッドも不要です。 以上です。

popogoe
質問者

お礼

ありがとうございます。 Resizeの使い方をまた勉強しておきます。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

>できればD列の1行目か2行目から貼り付ける方法を教えてください。 Range("A1").End(xlDown).Offset(1, 0).Activate ↓ Range("D1").End(xlDown).Offset(1, 0).Activate >また今のコードでは貼付けたいデータの順番が下のデータからになってしまいます。 >これも元のデータ順にしたいのでよろしくお願いします。 For i = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1 ↓ For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row 検証はしていません。 このコードは、ご自分で書いたコードではないようですね。 まずは、このコードの内容を理解することから始めてみてはいかがでしょうか。

popogoe
質問者

補足

ありがとうございます。 データの順番は並び変わりましたが やはりA1をD1に変えてもエラーになります。 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=Fals の部分は自動記述ですがそれ以外は自分で書いたコードです。 ただOFSETの使い方がいまいち理解できていません。 できれば教えていただけないでしょうか

関連するQ&A

専門家に質問してみよう