dポイントプレゼントキャンペーン実施中!

ファイル (A.xlsx)にある注文番号(画像が切れていますがB列です)が、
ファイル (B.xlsx)にある注文番号(B列・D列)の中に存在すれば
ファイル (A.xlsx)にあるチェック(D列)が〇、なければ✕にしたいです。

(B.xlsx)は空白を含みます。
(A.xlsx)と(B.xlsx)は同じフォルダ内にあります。
実際の(B.xlsx)のデータ数は数千あります、関数では厳しいでしょうか?

VBAで途中まで作成しましたが、完全に訳が分からなくなりました。
メチャクチャですが、少しでも完成イメージがお伝えできればと思い以下にまとめます。

Sub 判定()
Dim hida As Long
Dim migi As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets(1)
Workbooks.Open Filename:=ThisWorkbook.Path & "\B.xlsx"
Set ws2 = ActiveWorkbook.Worksheets(1)
For migi = 4 To 2000
For hida = 4 To 8
If ws2.Range("B" & migi).Value = ws1.Range("B" & hida).Value Then
ws1.Range("D" & hida).Value = ”0”
Exit For
End If
Next
Next


End Sub

お詳しい方、お助け頂けますと幸いです。
宜しくお願いいたします。

「2つのファイルを比較して判定を付ける」の質問画像

質問者からの補足コメント

  • めぐみんさん、いつもお世話になっております。
    早速コードを使わせていただきましたが、「End Withに対するWithがありません」
    とエラーが表示されます。見た感じではWithとEnd Withの数は問題ないようです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/12/31 16:47
  • ご回答ありがとうございます。
    もう一つ教えてください。
    コードを実行するとエラーで、オブジェクトが必要です、と表示されます。
    If WorksheetFunction.CountIf(r2, r.Value) > 0 Then
    の部分のようです。

    No.5の回答に寄せられた補足コメントです。 補足日時:2022/01/01 04:00

A 回答 (6件)

No.1です。



テキストでコード修正した際に書き換えが漏れたのですね。

If WorksheetFunction.CountIf(r2, r.Value) > 0 Then



If WorksheetFunction.CountIf(r2, r1.Value) > 0 Then

に修正願います。(ループ変数を r ⇒ r1 に変えた際漏れました)
    • good
    • 0
この回答へのお礼

ありがとうございました!
完璧です。

お礼日時:2022/01/02 08:24

No.1 です。



申し訳ございません。

End With
Next



Next
End With

逆でした。。。
手打ちだけで検証してませんでした。
初級レベルなジジィはまた1つ歳を取ります。
この回答への補足あり
    • good
    • 0

こんばんは



>関数では厳しいでしょうか?
両方のブックが開いている状態であると仮定してよければ・・
D4セルに以下の式を入力して、下方にフィルコピー
=IFS(B4="","",COUNTIF([B.xlsx]Sheet1!$B:$B,B4)+COUNTIF([B.xlsx]Sheet1!$D:$D,B4),"〇",1,"×")

※ 計算が重いようであれば「$B:$B$」「$D:$D」部分の範囲を限定してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます!
この関数、別の案件で使用できる事がわかりました。
早速活用させていただきます。

お礼日時:2022/01/02 08:27

#2様へ



Book名・シート名の指定方法が抜けていると感じますが如何でしょう?
    • good
    • 0

こんにちは。



IFとCOUNTIF関数の組み合わせでどうでしょうか?
A.xlsのD4セルに、下記を入れる。
その後、D4セルをコピーして、D5以下セルに貼り付けを行う。
=IF(COUNTIF($B$4:$D$末尾の行,B4)>0,"〇","×")
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2022/01/02 08:27

Sub 判定_改()


Dim ws1 As Worksheet
Dim r1 As Range, r2 As Range
Set ws1 = ThisWorkbook.Worksheets(1)
Workbooks.Open Filename:=ThisWorkbook.Path & "\B.xlsx"
Set r2 = ActiveWorkbook.Worksheets(1).Range("B:D")
With ws1
For Each r1 In .Range("B4", .Cells(Rows.Count, "B").End(xlUp))
If WorksheetFunction.CountIf(r2, r.Value) > 0 Then
r1.Offset(, 2).Value = "○"
Else
r1.Offset(, 2).Value = "×"
End If
End With
Next


End Sub

かな?
B.xlsxのシートC列の値が注文番号に一致するような物でないと言う前提ですが。
この回答への補足あり
    • good
    • 0

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