【VBA EXCEL データ有無 行 判定】
エクセルの勉強をしていて行き詰まってしまったので相談させて下さい。
大まかな概要としては、シートAにあるデータがシートBにあればシートAのD列に○、なければ×と、出力する処理をしたいです。
シートAにあるデータがシートBにあるかただ検索して判定するのであれば自分で関数などを使用し処理ができたのですが、
①両シートのデータ数は毎回可変
②シートAにあるデータが必ずしもシートBにあるとは限らない
③データ数が膨大
④シートBには重複するデータもある
なことから処理方法がわからず完全に手が止まっている状況です。
<シートA>
A列 B列 C列 D列
りんご 青森 300 ○
りんご 青森 400 ○
りんご 岩手 500 ×
みかん 山形 1000 ○
みかん 山形 5000 ×
<シートB>
A列 B列 C列
りんご 青森 300
りんご 青森 400
りんご 岩手 400
みかん 山形 1000
ぶどう 山梨 500
ぶどう 山形 1000
・
・
・
みかん 山形 500
うまく説明が出来ず大変申し訳ありませんが、お助けいただけないでしょうか。
周りにスキルのある方がおらず、自力で学習するしかありません。
不足部分については補足させて頂きますのでどうぞよろしくお願い致します。
No.5ベストアンサー
- 回答日時:
No.1・2です。
No.1の件について・・・
↓の画像のように「B」シートのD列に通番が入っているというコトでしょうか?
そして「A」シートの「○」の行のE列にその通番を表示したい!と解釈しました。
VBAでやってみました。
「A」シートのデータ数が最大300件程度というコトなので今回はループさせる方法です。
前回のコードは消去し、↓のコードにしてみてください。
Sub Sample2()
Dim i As Long, lastRow1 As Long, lastRow2 As Long
Dim c As Range, myStr As String, wS As Worksheet
Set wS = Worksheets("B")
Application.ScreenUpdating = False
lastRow2 = wS.Cells(Rows.Count, "A").End(xlUp).Row
wS.Range("E:E").Insert
Range(wS.Cells(2, "E"), wS.Cells(lastRow2, "E")).Formula = "=A2&B2&C2"
With Worksheets("A")
lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
Range(.Cells(2, "D"), .Cells(lastRow1, "E")).ClearContents
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
myStr = .Cells(i, "A") & .Cells(i, "B") & .Cells(i, "C")
Set c = wS.Range("E:E").Find(what:=myStr, LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
.Cells(i, "D") = "×"
Else
With .Cells(i, "D")
.Value = "○"
.Offset(, 1) = c.Offset(, -1)
End With
End If
Next i
End With
wS.Range("E:E").Delete
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
作ってくださったんですね、ありがとうございます。
作ってくださったイメージそのものです。
お手数おかけしますが教えていただけるととてもうれしいです。
よろしくお願い致します。
No.6
- 回答日時:
続けてお邪魔します。
>作ってくださったイメージそのものです
というコトなので解決ではないのでしょうか?
>教えていただけるととてもうれしいです。
>よろしくお願い致します。
とは何をお答えすれば良いのかちょっと判りかねます。
① VBAそのものの操作方法
② コードの意味
①の場合は基本的なコトなので、
失礼にあたると思いNo.2に「標準モジュールにしてください。」としか記載していません。
②VBAのコードそのものの説明が必要なのでしょうか?
などが判ればお答えできる範囲で可能です。m(_ _)m
アプリで確認していたため、続きの表示があるにも関わらず確認が漏れておりました。
詳しく教えてくださり、また何度もお答えをありがとうございました。
教えていただいたコードを応用して、作成シートで実施したところ望む処理ができました。
tom04さんのお力添えのお陰です。
ご親切に本当にありがとうございました。
大変助かりました。
No.4
- 回答日時:
>シートAで最大300件程度です。
>シートBはちなみに1500件程度です。
それならNo2のかたの方法で問題ないかと思います。
データが10万行以上であれば、他の方法を提示するつもりでしたが、そこまでのデータ量ではないので、No2の方の方法を採用してください。
No.2
- 回答日時:
No.1です。
どうも失礼しました。
VBAでの方法をご希望なのですね?
ループする方法もありますが、データ量が膨大!というコトですので
ワークシート関数を使う方法にしてみました。
尚、両シートとも1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。
Sub Sample1()
Dim lastRow1 As Long, lastRow2 As Long, wS As Worksheet
Set wS = Worksheets("B")
Application.ScreenUpdating = False
lastRow2 = wS.Cells(Rows.Count, "A").End(xlUp).Row
wS.Range("D:D").Insert
Range(wS.Cells(2, "D"), wS.Cells(lastRow2, "D")).Formula = "=A2&B2&C2"
With Worksheets("A")
lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
With Range(.Cells(2, "D"), .Cells(lastRow1, "D"))
.Formula = "=IF(COUNTIF(B!D:D,A2&B2&C2),""○"",""×"")"
.Value = .Value
End With
End With
wS.Range("D:D").Delete
Application.ScreenUpdating = True
End Sub
※ シート名は「A」と「B」にしています。
こんな感じではどうでしょうか?m(_ _)m
ご回答ありがとうございます。
こんなに早くお答えがもらえると思っていなかったのでとても驚いています。
ありがとうございます。
頂いた回答を参考に明日一度やってみます。
また分からなければご質問させていただけると幸いです。( ; _ ; )
No.1
- 回答日時:
こんばんは!
シートBは「Sheet2」とし、シートAの1行目は項目行でデータは2行目以降にあるとします。
D2セルに
=IF(COUNTIFS(Sheet2!A:A,A2,Sheet2!B:B,B2,Sheet2!C:C,C2),"○","×")
という数式を入れフィルハンドルでダブルクリックしてみてください。
※ データ量が極端に多く、上記数式では計算速度が遅い場合は
作業用の列を設けた方が良いかもしれません。m(_ _)m
何度もすみません。
追加でご質問させてください。
シートAのE列に、(シートBのD列に実際はある)見つかったシートBデータの通番をシートAのE列に振るとすれば、offsetを使用すればいいのでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
- Excel(エクセル) Excelマクロの作成方法・コーディングをご教授ください。 3 2023/02/26 18:09
- Excel(エクセル) excelの列幅高さが勝手に変わる(特定のPCだけ) 8 2022/07/14 16:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字の色も参照 VLOOKUP
-
VBAで繰り返しコピーしながら下...
-
Excel VBA ピボットテーブルに...
-
【条件付き書式】countifsで複...
-
ExcelのVlookup関数の制限について
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
Excel の複数シートの列幅を同...
-
エクセルの列の限界は255列以上...
-
エクセルの保護で、列の表示や...
-
【VBA】シート名と見出しが一致...
-
Excel複数シートにあるデータを...
-
エクセルで、チェックボックス...
-
納品日から得意先ごとの請求日...
-
エクセル機能 オートフィルター
-
【VBA】複数のシートの指定した...
-
Excelに自動で行の増減をしたい...
-
エクセル関数に詳しい方、教え...
-
エクセルで横並びの複数データ...
-
エクセルのグラフのマクロでエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセル関数に詳しい方、教え...
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセル マクロ 標準モジュー...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
Excel VBA ピボットテーブルに...
-
【エクセル】1列のデータを交...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
【VBA】複数のシートの指定した...
おすすめ情報