• ベストアンサー

エクセルのマクロ

以下のマクロを教えて下さい。 よろしくお願いします。 [1] Book1のSheet1のA列のデータを、Book2のSheet1のB列にコピーする(B列の先頭から)。 [2] Book1のSheet2のA列のデータを、Book2のSheet1のB列にコピーする([1]で貼り付けたものの次行から)。 [3] Book1のSheet3のA列のデータを、Book2のSheet1のB列にコピーする([2]で貼り付けたものの次行から)。 *A列はデータがない場合はありません。途中に空行があることもありません。 *[1][2][3]は一括処理で結構です。 *マクロ自体はBook3に作成する予定です。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

Book1.xls と Book2.xls は開いている Book1.xls の Sheet1~3 は一番左から並んでいる Book2.xls の Sheet1 は一番左にある 上記の前提で、Book3のマクロ Sub Test() Dim cBook As Workbook, pBook As Workbook Dim pR As Range  Set cBook = Workbooks("Book1.xls")  Set pBook = Workbooks("Book2.xls") For i = 1 To 3  With pBook.Worksheets(1).Range("A65536")   If .End(xlUp).Row = 1 Then    Set pR = .End(xlUp)   Else    Set pR = .End(xlUp).Offset(1, 0)   End If  End With  With cBook.Worksheets(i)   .Range("A1:A" & .Range("A65536").End(xlUp).Row).Copy   pR.PasteSpecial xlPasteAll  End With Next i  Application.CutCopyMode = False End Sub

Florence20
質問者

お礼

ありがとうございました。

その他の回答 (4)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.5

#4 です。 B列だったようで、、 For i = 1 To 3  With pBook.Worksheets(1).Range("A65536") を For i = 1 To 3  With pBook.Worksheets(1).Range("B65536") に。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

値だけをコピーするで良ければ下記をどうぞ。 同時に書式も移すことは簡単でしょうが略。 (仮定等) (1)Book1(名前つけて保存したものを呼び出している)のSheet1のA列-->Book(名前をつけて保存する前)のSheet1へ書き出している。 (2)Book1(名前つけて保存したものを呼び出している)のSheet2-->Book(名前をつけて保存する前)のSheet1へ書き出している。 (3)質問ではSheet3も対象ですが、手抜き省略。 Dim、Setの追加、ForNext部コピーと手直しで直ぐ追加可能。 (4)質問ではBook2のB列に移しますが、私のは A列に移してます。”A”-->”B”に変えるだけです。 (5)Book3(第3のブック)にはマクロを作成してません。どうしてそうする必要があるのか。 非常に難しくなるかどうか判りません。 (6)物足りないロジックです(コピーメソッドも使っていません)。しかし他ブックの参照法や、保存前のブックを対象にするなど、他の面で私にとって手探りでテストした面があり、参考までに載せます。 このVBAは、新規ブックの側(BOOK1)に書いています。 Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Set sh1 = Workbooks("Book1.xls").Worksheets("sheet1") Set sh2 = Workbooks("Book1.xls").Worksheets("sheet2") Set sh3 = Workbooks("Book1").Worksheets("sheet1") j = 1 For i = 1 To 65000 If sh1.Cells(i, "A") = "" Then GoTo p01 ' MsgBox sh1.Cells(i, "A") sh3.Cells(j, "A") = sh1.Cells(i, "A") j = j + 1 Next i p01: For i = 1 To 65000 If sh2.Cells(i, "A") = "" Then GoTo p02 ' MsgBox sh2.Cells(i, "A") sh3.Cells(j, "A") = sh2.Cells(i, "A") j = j + 1 Next i p02: End Sub

Florence20
質問者

お礼

ありがとうございました。

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.2

マクロの記録でイケます。 「・・・で貼り付けたものの次行から」については A65536セルを選択して[Ctrl]+[↑]キーを押した操作で、そのセルの行をRowプロパティを使って取得することができます。 lastRow = Range("A65536").End(xlUp).Row ですね。

Florence20
質問者

お礼

ありがとうございました。

  • kotetsu2
  • ベストアンサー率20% (1/5)
回答No.1

単純にBook1の各シートのA列データをBook2の シート1のB列に順番に貼り付けていく処理の ようですが >以下のマクロを教えて下さい。 ではなく「マクロを作ってくれ」的な内容のようです がご自分ではどの程度努力されて、不明な点はどの 部分なのでしょうか? 想像できる部分としては  Book2 Sheet1のB列で[2]以降での処理の時の  貼り付け行の取得ぐらいですが・・・たぶん

関連するQ&A

専門家に質問してみよう