- ベストアンサー
EXCEL VBA テーブル間のコピー
お世話になります。 VBA初心者です。 Excelで、元データであるSheet1にあるテーブルのB列をSheet2にあるテーブルのA列に転記したいと思います。このとき、Sheet2のテーブルにはデータが入っており、そのデータと重複するものを除外したものだけをSheet2テーブルの続きから入力させるにはどうしたらよいでしょうか? なにとぞご教授のほど、お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
入れ忘れてました。 最後に Set Sh2 = Nothing Set Sh1 = Nothing を追加しておいてください。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
データ例 Sheet1 A1:B8 区分 属性 a y b x c z s x d u f z a v Sheet2 A1:B4 区分 属性 a y b x c z -- ありきたりのコードだが、 標準モジュールに Sub test01() Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") lr = sh1.Range("B100000").End(xlUp).Row 'MsgBox lr For i = 1 To lr x = sh1.Cells(i, "B") y = sh1.Cells(i, "C") If WorksheetFunction.CountIf(sh2.Range("A:A"), x) = 0 Then sh2.Range("A100000").End(xlUp).Offset(1, 0) = x sh2.Range("A100000").End(xlUp).Offset(0, 1) = y End If Next i End Sub 実行結果 Sheet2 区分 属性 a y b x c z s x d u f z ーーー 質問の表現に小生なら異議あり ・テーブルというのは、エクセル独自の仕組みがある。 表という意味で、俗語的な使いはするな。 ーー ・質問表題は、 Sheet1のB列セルデータのうちで、シート2のA列データになければ、追加する。 と表現する方がよかろう. さすれば画像は添付せずとも判るだろう。 ーー またコピーというより、データの代入(Let)でよいのではないか。 この表現の結果の差は分かるかな?
お礼
ご回答いただきありがとうございます。 なお、ご指摘いただきました点について。 >テーブルというのは、エクセル独自の仕組みがある。 表という意味で、俗語的な使いはするな ー こちらは俗語的に「テーブル」という単語を使用したわけではなく、エクセルにおけるテーブル書式、表の意味で質問させていただきました。 >質問表題は、 Sheet1のB列セルデータのうちで、シート2のA列データになければ、追加する。 と表現する方がよかろう. ーわかりました。今後の参考にさせていただきます。 >またコピーというより、データの代入(Let)でよいのではないか。 ー今後質問する際の参考にさせていただきます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
色々やり方はあると思いますが、単純な方法で Sub Test() Dim i As Long Dim FRange As Range Dim Sh1 As Worksheet, Sh2 As Worksheet Set Sh1 = Worksheets("Sheet1") Set Sh2 = Worksheets("Sheet2") For i = 1 To Sh1.Cells(Rows.Count, "B").End(xlUp).Row Set FRange = Sh2.Range(Sh2.Cells(1, "A"), Sh2.Cells(Rows.Count, "A").End(xlUp)). _ Find(Sh1.Cells(i, "B").Value, LookIn:=xlValues, LookAt:=xlWhole) If FRange Is Nothing Then Sh2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Value = _ Sh1.Cells(i, "B").Value End If Next End Sub
お礼
ありがとうございます!!!バッチリ機能しました。 本当に困っていたので助かりました。