プロが教えるわが家の防犯対策術!

C:\Users\〇〇〇\Desktop\新しいフォルダー 内の
「ブック1」の「貼付」シートのB列の値が
「ブック2」の「参照」シートのAV列の値と同じ場合
「ブック2」の「参照」シートのG列の値を
「ブック1」の「貼付」シートのV列に返したいです。

B列の最終行まで取得したいです。
50000行以上あります。
VBAでなるべく処理の早い方法で実現できませんでしょうか?
宜しくお願いいたします。

A 回答 (1件)

こんにちは


条件が出揃っていませんので・・回答付かずですね
やり取りを望んでいらっしゃるのでしょうか?
>宜しくお願いいたします。
何をお願いされているのか分かりませんがDIYキットのような
例を書いてみます

想定条件で主な処理
>「ブック1」の「貼付」シートのB列の値が
「ブック2」の「参照」シートのAV列の値と同じ場合
「ブック2」の「参照」シートのG列の値を
「ブック1」の「貼付」シートのV列に返したいです。

>C:\Users\〇〇〇\Desktop\新しいフォルダー 内の
何処から実行するのか、どのような状態環境なのか不明の為

①自身で設定して(対象ブックの設定)
Set bk1 = ブック1 
Set bk2 = ブック2

②ブック2のデータ取得
Dim k, v
With bk2.Worksheets("参照")
k = Application.Transpose(.Range(.Cells(1, "AV"), .Cells(.Rows.Count, "AV").End(xlUp)))
v = Application.Transpose(.Range(.Cells(1, "G"), .Cells(.Rows.Count, "G").End(xlUp)))
End With
Set bk2 = Nothing

③ブック1のデータ取得
Dim ck, cv
With bk1.Worksheets("貼付")
ck = Application.Transpose(.Range(.Cells(1, "B"), .Cells(.Rows.Count, "B").End(xlUp)))
cv = Application.Transpose(.Range(.Cells(1, "V"), .Cells(.Rows.Count, "V").End(xlUp)))
End With

>B列の値がAV列の値と同じ場合 ?行も同じでいいかな
>G列の値をV列に返したいです。 ?不一致の場合元のデータのままでいいかな
とすると

④仮定条件でデータを作成
Dim i As Long
Dim vv
ReDim vv(LBound(ck) To UBound(ck))
For i = LBound(ck) To UBound(ck)
On Error Resume Next
If k(i) = ck(i) Then
vv(i) = v(i)
Else
vv(i) = cv(i)
End If
Next

⑤結果を出力
If UBound(vv) > 0 Then
bk1.Worksheets("貼付").Range("V1").Resize(UBound(vv)) = Application.Transpose(vv)
End If

>VBAでなるべく処理の早い方法
比較するものが提示されていないので不問(取り敢えず配列で)

Set bk1 = ブック1 Set bk2 = ブック2 を適切に設定すれば
つなげる事で実行可能と思いますが・・未検証
ブロックごとに分けているので改造は簡単?
仮定条件なので違えば
④仮定条件でデータを作成 の条件を変更、添削してください

組み立て改造などは自己責任で行ってください
    • good
    • 1

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