• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAの転記処理について)

エクセルVBAの転記処理について

このQ&Aのポイント
  • エクセルVBAを使用して、ブックAのデータをブックBに転記する方法を知りたい。
  • ブックAとブックBには同じ列に同じ項目があり、ブックBのB列が空欄の場合、ブックAのB・C・D列の値を転記する必要がある。
  • 現在のプログラムは途中で混乱し、正しく動作しないため、助けが必要。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

アドバイスですが、 1、一度にすべてのプログラム書きまくらずに分けてみましょう。  ここでは、ブックAのシート1をブックBのSheet2に貼り付けています。  最初にこれを実行しておいて方が、いちいちブックの変更がなくて楽です。  必要であれば Sub データの移動()  Workbooks.Open Filename:=("C:\Documents and Settings\PC01\デスクトップ\bookA.xls")  ThisWorkbook.Sheets("Sheet2")=Sheets("sheet1") activeworkbook.Close End Sub を別途実行するボタンでも作ってください。 2、空白のセルの探して置き換えですので  For Each~UsedRnge ですべてのセルをチェックさせます。 3、空白だった場合の処理を、サブルーチンで処理(コードを分けて書きます) 4、検索にはワークシート関数より Findを使った方がエラーが発生せず楽です。 以上の考え方で Dim 置換 As String Sub ボタン1_Click() Dim MyRng As Range For Each MyRng In Sheets("Sheet1").UsedRange If MyRng.Value = "" Then 列 = MyRng.Column コード = Range("A" & MyRng.Row).Value Call 検索(コード, 列) MyRng.Value = 置換 End If Next End Sub Sub 検索(コード, 列) Set c = Sheets("Sheet2").Columns("A:A").Find(What:=コード, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then 置換 = c.Offset(0, 列 - 1).Value End If End Sub といった風にもできます。

pheriar
質問者

お礼

ありがとうございました。 おかげさまでプログラムができました。1度に書こうとするのは昔、学生時にも指摘されました。もっと精進しますです。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> ブックBにてB列が空欄の場合、ブックAのB・C・D列の値を転記する方法がわからず 転記のルールは? コードを提示するよりも、先になさりたいことを明確にしてください。 「ブックA・ブックBともに、列Aの値がそれぞれの中で重複しない」なら、 列Aの値でVlookupで関連付け。 一度に更新しようとしないで、ブックB内に新たな列を設けブックAを反映する。 結果を反映できたことを確認してから、ブックBを編集し完成させればよさそう。 「ブックA・ブックBともに、列Aの値がそれぞれの中で重複する」なら別な案が必要。

pheriar
質問者

補足

すみません。ブックBには上記のような虫食い状態の行と、 ちゃんと全セルが埋まっている行があります。転記ルールとしまして、ブックBの空欄になっている箇所のみ、ブックAから転記をしたいです。ちゃんと入力されている行も連続していくつかあるため、フィルタやVlookupでは手入力より多少ましという状態です。列Aは両ブック共、お客様コードのため同じコードで別の会社が載ってくることはありません。

すると、全ての回答が全文表示されます。

関連するQ&A