人生のプチ美学を教えてください!!

こんばんは。EXCEL VBAで教えてください。
シート1、シート2があります。シート1にはデータが入っています。シート2に名簿が入っています。
シート2のB列に社員番号があります。
シート1のC列にシート2のB列の社員番号が該当する場合、シート3にシート1の該当行データ(1行)をコピーしていきたいのです。
arrayやフィルタオプション、select case等どのように使えばいいかわかりません。
ご教示よろしくお願い致します。

A 回答 (2件)

No1です。

以下のマクロを標準モジュールへ登録してください。
----------------------------------------
Public Sub データコピー()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim dicT As Object
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim okctr As Long
Dim ngctr As Long
Dim row As Long
Dim row3 As Long
Dim key As String
Set sh1 = Worksheets("data")
Set sh2 = Worksheets("名簿")
Set sh3 = Worksheets("結果")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow1 = sh1.Cells(Rows.Count, "C").End(xlUp).row
maxrow2 = sh2.Cells(Rows.Count, "B").End(xlUp).row
Application.ScreenUpdating = False

For row = 2 To maxrow2
key = sh2.Cells(row, "B").Value
dicT(key) = sh2.Cells(row, "C").Value
Next
okctr = 0
ngctr = 0
row3 = 2
sh3.Cells.Clear
sh1.Rows(1).Copy sh3.Rows(1)
For row = 2 To maxrow1
key = sh1.Cells(row, "C").Value
If dicT.exists(key) = True Then
sh1.Rows(row).Copy sh3.Rows(row3)
okctr = okctr + 1
row3 = row3 + 1
Else
ngctr = ngctr + 1
End If
Next
Application.ScreenUpdating = True
MsgBox ("処理件数=" & okctr & " 未処理件数=" & ngctr)

End Sub
------------------------------------------
    • good
    • 0
この回答へのお礼

tatsu99さん、こちらのコードもありがとうございました。無事作成できました。ありがとうございました。

お礼日時:2017/10/12 21:04

1)シート1、シート2、シート3の具体的なシート名はどうなってますか。


2)シート1、シート2、シート3の1行目は見出し行ですか。
3)提示された情報でわかるのは、添付の図の情報だけです。
添付の図のように具体的なセル位置の情報を提示していただけませんでしょうか。
「EXCEL VBA で教えてください。(」の回答画像1
    • good
    • 0
この回答へのお礼

tatsu99さん、返信ありがとうございます。
(1)シート名1は"data",シート名2は"名簿",シート名3は"結果"です。(2)1行目はすべて見出し行にしたいです。
(3)シート1"data"はA列からM列まであり、行は2万行ぐらいあります。
   シート2"名簿"はB列社員番号、C列氏名、D列所属で300行ぐらいあり
   ます。

ご教示よろしくお願い致します。

お礼日時:2017/10/12 06:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!