エクセルのマクロで以下のシート1とシート2を比較して表を作成したいのですが
上手くいきません。
シート1は比較元データ、シートは例は一つですが、シート3・・・・と
ひとつずつ比較、それぞれシートを分けて印字したいです
① 比較元シート1の「氏名1氏名2」と比較先シートの「氏名1氏名2」を比較します。
(「氏名1氏名2」はセットで比較します)
② 氏名を検索、合致したら項目同士を比較します。→⑤、⑥へ
③ 氏名を検索し、比較先シートに該当なしならば、末尾シートに「キャンセル」と表示し、比較元シートの当該行を記入します。
④ 氏名を検索し、比較元シートに該当なしならば、末尾シートに「追加」と表示し、比較先シートの当該行を記入します。
⑤ 項目が全て合致の場合は①に戻り次の氏名1氏名2を検索します。
⑥ 項目が不一致の場合は「不一致」と表示し比較元シート、比較先シート1の氏名、不一致項目を2行に表示します。
比較した結果は、シート1とシート2の結果、シート1とシート3の結果といった風に、末尾のシートに追加していきます。
初心者です。(項目の並び順は変えられません)
宜しくお願いいたします。
似たマクロを見つけました。これを修正するとしたらどうしたらいいですか?
Sub test06()
‘ Dim t As Single
‘ t = Timer
Dim myDic As Object
Dim myV, myV2, myW, myX, myY
Dim i As Long, uw As Long, uv As Long
With Sheets("Sheet1")
myV = .Range("A2", .Cells(Rows.Count, "C").End(xlUp)).Value
End With
With Sheets("Sheet2")
myW = .Range("B2", .Cells(Rows.Count, "G").End(xlUp)).Value
End With
uv = UBound(myV)
uw = UBound(myW)
ReDim myV2(1 To uv, 1 To 1) As String
ReDim myX(1 To uw, 1 To 1) As String
ReDim myY(1 To uv, 1 To 1) As String
Set myDic = CreateObject("Scripting.Dictionary")
For i = 1 To uv
myV2(i, 1) = myV(i, 1) & "!" & myV(i, 2) & "!" & myV(i, 3)
Next i
For i = 1 To uw
myDic(myW(i, 5) & "!" & myW(i, 6) & "!" & myW(i, 1)) = i
myX(i, 1) = "非対象"
Next i
For i = 1 To uv
If Not myDic.Exists(myV2(i, 1)) Then
myY(i, 1) = "再発行"
Else
myX(myDic(myV2(i, 1)), 1) = "対象"
End If
Next i
Application.ScreenUpdating = False
Sheets("Sheet2").Range("AF2").Resize(uw, 1).ClearContents
Sheets("Sheet2").Range("AF2").Resize(uw, 1).Value = myX
Sheets("Sheet1").Range("G2").Resize(uv, 1).ClearContents
Sheets("Sheet1").Range("G2").Resize(uv, 1).Value = myY
Application.ScreenUpdating = True
‘ Debug.Print Timer - t
End Sub
No.1ベストアンサー
- 回答日時:
こんばんは。
急いでいるということですが、内容を検証してみました。おそらく、これはしばらく時間がかかってしまうと思います。
質問を、VBAにそって考えながら、チェックしてみました。
マクロ自体は、問題なく作成できるとは思いましたが、その表自体に少し問題があるのではないかと思いました。
つまり、名前のキャンセルや追加に関しては、氏名 の比較では、問題があるように思われます。
おそらく実務で使うとなれば、本来、「一意の番号」の管理でないと無理だと思います。
確かに、Sheet1側には、グループ番号とNOはありますが、Sheet2 側は、単なる通し番号のみですから、比較はできません。
言い換えれば、絶対に同姓同名がないとは限りません。同じグループ内さえも、同姓同名の可能性もあります。そうすると、プログラムでは、どちらがどちらだとかは区別がつきません。これでは、マクロ処理では、間違った答えを導きだす可能性があることがわかりました。もう一度、考えなおしたほうが良いかもしれません。
なお、ご質問に出ている、VBAコードはまったく参考にはしませんでした。
有難うございます。確かにSheet1はグループ別に番号です。伝わりにくい書き方ですみませんが、Sheet2はグループ毎の塊です。他のグループのデータは混ざってません。例えばSheet2はGP1、Sheet3はGP3、Sheet4はGP2・・・といった具合です。GPの並びはランダムです。
もう少し、考えてみます。なにか方法があったらお知恵を貸していただけたら助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
【ExcelVBA】マクロの入ったシ...
-
【Excel VBA】データ貼り付け先...
-
Excel 全シート上のボタンを削...
-
ワークシートそのものの色を変...
-
エクセルのシート連番の振り直し
-
エクセル2003で、複数のシート...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
Wordで差し込み印刷時に表示す...
-
エクセルのシー名を二段表示に...
-
エクセルで「シートを追加」→「...
-
エクセル、特定のシートにパス...
-
エクセル 非表示のシートをハ...
-
Accessのテーブルを既存のExcel...
-
accessへエクセルの複数のシー...
-
エクセルでリンク貼り付けした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
【ExcelVBA】マクロの入ったシ...
-
ワークシートそのものの色を変...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセル、特定のシートにパス...
-
エクセルのシー名を二段表示に...
-
Accessのテーブルを既存のExcel...
-
確定申告用の医療費集計フォー...
-
エクセルのシート連番の振り直し
-
【Excel】エクセルの1ファイル...
-
エクセルの複数シートでのリン...
-
【Excel VBA】データ貼り付け先...
-
エクセルでリンク貼り付けした...
おすすめ情報