かんたん登録!
未経験を強みに。
年収 500万以上 企業多数
未経験求人 95%
最短 2週間で 内定
カンタン登録フォーム
1 / -

ご入力いただいた選択肢は「お問い合わせ内容」としてまとめて送信されます。個人情報はお問い合わせ対応以外には使用しません。

Excel VBAマクロで発注データと発送先一覧を照合し、不一致データを抽出する方法

Excel VBAマクロで発注データと発送先一覧を照合し、不一致データを抽出する方法

マクロについて質問です。2つのシートを照合して不一致だったものを抽出する方法を教えて下さい。「シート1」に日々の発注データが表示されてます。「シート2」には発送先一覧が表示されてます。両シートもA~C列までデータが複数行あります。(両シートイメージ) A列/B列/C列 得意先CD/得意先名/発送先 両シートともA列とB列には複数行データが表示されていますが、「シート1」の「C列」は項目名のみC1に表示されており、C2以降は空白になっています。「シート1」に表示されている得意先の発送先を「シート2」から探し出し、「シート2」のC列に表示されている「発送先」を「シート1」のC列にコピーします。両シートを照合する項目は「A列の得意先CD」を使用します。もし、「シート1」に表示されている得意先のデータが「シート2」に載ってない場合は、「シート1」の「得意先CD」と「得意先名」を「シート2」の最終行に貼り付けて、なおかつ、メッセージBOXで「新店があります。データの登録を行って下さい。」と表示します。以上の内容をマクロで作成したいのですが、両シートを照合し、該当した場合にシート1に発送先をコピーする構構文はできたのですが、照合が不一致だった場合の構文が色々と試したものの上手くいきません。回答の程、宜しくお願い致します。

この記事では、Excel VBAマクロを用いて、発注データシートと発送先一覧シートの照合を行い、不一致データを抽出する方法を解説します。特に、業務効率化を図りたい経理担当者や、データ管理に課題を感じている営業担当者の方にとって、具体的なマクロコードと解説を通して、業務の自動化を実現するための実践的な知識を提供します。既存システムとの連携や、データの正確性向上にも役立つ内容となっています。

1. マクロコードの概要

まず、全体の流れを把握するために、マクロコードの概要を示します。このコードは、以下の3つのステップで構成されています。

1. **シート1のデータを読み込み、シート2との照合を行うループ処理:** 各得意先CDについて、シート2で対応するデータを探します。
2. **一致した場合の処理:** シート2から発送先を取得し、シート1にコピーします。
3. **不一致の場合の処理:** シート2に新しい得意先データを追加し、メッセージボックスを表示します。

2. マクロコードの詳細

それでは、具体的なマクロコードを見ていきましょう。以下のコードをExcel VBAのモジュールに貼り付けて実行してください。

vba
Sub 照合と不一致データ抽出()

Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastRow1 As Long, lastRow2 As Long
Dim i As Long, j As Long
Dim customerCD As String, customerName As String

‘ ワークシートの設定
Set ws1 = ThisWorkbook.Sheets(“シート1”) ‘ 発注データシート
Set ws2 = ThisWorkbook.Sheets(“シート2”) ‘ 発送先一覧シート

‘ 最終行の取得
lastRow1 = ws1.Cells(Rows.Count, “A”).End(xlUp).Row
lastRow2 = ws2.Cells(Rows.Count, “A”).End(xlUp).Row

‘ シート1のデータループ
For i = 2 To lastRow1 ‘ ヘッダー行をスキップ

customerCD = ws1.Cells(i, “A”).Value
customerName = ws1.Cells(i, “B”).Value

‘ シート2との照合
For j = 2 To lastRow2
If ws2.Cells(j, “A”).Value = customerCD Then
‘ 一致した場合、発送先をコピー
ws1.Cells(i, “C”).Value = ws2.Cells(j, “C”).Value
Exit For ‘ 一致したら次の得意先へ
End If
Next j

‘ 不一致の場合
If ws1.Cells(i, “C”).Value = “” Then
‘ 新しい得意先データをシート2に追加
lastRow2 = lastRow2 + 1
ws2.Cells(lastRow2, “A”).Value = customerCD
ws2.Cells(lastRow2, “B”).Value = customerName
‘ メッセージボックスを表示
MsgBox “新店があります。データの登録を行って下さい。”
End If

Next i

End Sub

解説: このコードでは、まず各シートの最終行を取得し、ループ処理でシート1のデータとシート2のデータを比較しています。`If`文で一致判定を行い、一致した場合はシート1のC列に発送先をコピー、不一致の場合はシート2に新しい行を追加し、メッセージボックスを表示します。`Exit For`は、一致した時点で内側のループを終了し、処理効率を向上させます。エラー処理などは簡略化していますが、実運用ではより詳細なエラー処理を追加することをお勧めします。

3. 実行方法と注意点

1. Excelを開き、マクロを有効化します。
2. Alt + F11 を押してVBE(Visual Basic Editor)を開きます。
3. メニューバーから「挿入」→「標準モジュール」を選択します。
4. 上記のコードをモジュールに貼り付けます。
5. 「シート1」と「シート2」という名前のシートがワークブックに存在することを確認します。
6. VBAエディタを閉じ、Excelに戻り、開発タブの「マクロ」から「照合と不一致データ抽出」を実行します。

注意点:

  • シート名「シート1」と「シート2」は、実際のシート名に合わせて変更してください。
  • A列に得意先CD、B列に得意先名、C列に発送先が入力されていることを確認してください。
  • エラー処理は簡略化されています。本番環境では、より詳細なエラー処理を追加することを推奨します。
  • 大量のデータ処理を行う場合は、処理時間を短縮するための最適化が必要となる場合があります。

4. さらに高度な機能

このマクロは基本的な機能を提供しますが、さらに高度な機能を追加することで、より実用的なツールにすることができます。例えば、

* **エラー処理の強化:** データの型違いや空欄データに対する処理を追加することで、マクロの堅牢性を高めることができます。
* **進捗表示:** 大量のデータ処理において、ユーザーに処理の進捗状況を表示することで、安心感を与えることができます。
* **ログ出力:** 処理結果をファイルに出力することで、後から処理内容を確認することができます。
* **ユーザーインターフェースの追加:** 入力ダイアログなどを追加することで、ユーザーフレンドリーなインターフェースを実現できます。

5. まとめ

この記事では、Excel VBAマクロを用いて、発注データと発送先一覧の照合を行い、不一致データを抽出する方法を解説しました。このマクロを活用することで、データ管理業務の効率化を図り、人的ミスを削減することができます。 しかし、複雑なデータ処理や大量データの処理には、より高度なスキルと知識が必要となる場合があります。

もっとパーソナルなアドバイスが必要なあなたへ

この記事では一般的な解決策を提示しましたが、あなたの悩みは唯一無二です。
AIキャリアパートナー「あかりちゃん」が、LINEであなたの悩みをリアルタイムに聞き、具体的な求人探しまでサポートします。

今すぐLINEで「あかりちゃん」に無料相談する

無理な勧誘は一切ありません。まずは話を聞いてもらうだけでも、心が軽くなるはずです。

もし、マクロの作成や修正でお困りのことがあれば、お気軽に専門家にご相談ください。 より効率的な業務プロセス構築のため、最適なソリューションをご提案いたします。

コメント一覧(0)

コメントする

お役立ちコンテンツ