人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

bookBから2列にまたがるデータを引用して、bookAに正しいデータを貼り付けたい(Excel)
bookAで、AT列にある重複データ(例えば「りんごごりら」など)を検索します。該当するセルに来ましたら、左に5列(AO列)、下に1セル移動した場所のセルをコピーします。(?とします)

次にbookBのG列において?の文字列を検索し、完全一致する該当セルがありましたら。そのセルから上に、データのあるセルは無視し最初の空白セルのある場所まで移動(最初の空白セルでストップ)し、更に右に5列移動(L列)します。そしてL列のセルと、隣のM列のセル、2つのセルをコピーします。(?とします)

最後にbookAのAO列において?の文字列を完全一致で検索をかけ、該当セルに来ましたら。そこから上に空白セルのある場所まで移動し、該当の空白セルから更に右に5列移動した場所に、?を貼り付けます。(AT列、AU列のセルに貼り付け)

こういった処理を6万行ぐらい行いたいのですが、かなり複雑な動きであるとは思います。ですがもし自動化が可能であれば…お教えいただけますと幸いです。

よろしくお願い致します<m(__)m>

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●2000ポイント ベストアンサー

下記のマクロを bookA の標準モジュールにはりつけて、copy_data サブルーチンを実行してください。

Const REF_BOOK = "D:\data\bookB.xlsx"  ' bookB のフルパス

Function is_blank_cell(c)
 is_blank_cell = IsEmpty(c) Or c.Value = ""
End Function

Sub copy_data()
 search_word = "りんごごりら"
 target_column = 46  ' AT列
 ref_column = 7  ' G列

 Set this_book = ActiveWorkbook
 Set bookB = Workbooks.Open(REF_BOOK)
 this_book.Activate
 Set ref_sheet = bookB.Sheets(1)  ' bookB の 1番目のシート

 last_row = Cells(Rows.Count, target_column).End(xlUp).Row
 last_row_b = ref_sheet.Cells(Rows.Count, ref_column).End(xlUp).Row

 last_blank_row = -1
 last_blank_row_b = -1

 For r = 1 To last_row
 If is_blank_cell(Cells(r, target_column - 5)) Then
 last_blank_row = r
 End If
 If InStr(Cells(r, target_column).Value, search_word) > 0 Then
 Key = Cells(r + 1, target_column - 5).Value
 rr = -1
 For r2 = 1 To last_row_b
 If is_blank_cell(ref_sheet.Cells(r2, ref_column)) Then
 last_blank_row_b = r2
 End If
 If ref_sheet.Cells(r2, ref_column).Value = Key Then
 rr = last_blank_row_b
 Exit For
 End If
 DoEvents
 Next
 If last_blank_row <> -1 And rr <> -1 Then
 Set s_range = ref_sheet.Range(ref_sheet.Cells(rr, ref_column + 5), ref_sheet.Cells(rr, ref_column + 6))
 rd = last_blank_row
 Set d_range = Range(Cells(rd, target_column), Cells(rd, target_column + 1))
 s_range.Copy d_range
 End If
 End If
 DoEvents
 Next
 bookB.Close SaveChanges:=False
 MsgBox "FINISH !"
End Sub

今回も、分レベルの処理時間がかかりそうなので、終わったらメッセージボックスを表示するようにしてみました。

一応、テストデータを作って試してはみましたが、実物で試していないので、題意を汲み取れているか不安なところはあります。
# まあ、人力検索だとやり取りが第三者に見えてしまうので、実物をもらうのは厳しいところですが。


moon-fonduさんのコメント
遅くなりましてすみません、ありがとうございます、うまくいきました(^^♪
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ