VBAの初心者です。
取引実績データのC列「取引先名」を順次読んで重点顧客リストのB列「顧客名」と照合し、部分一致する行があれば、その顧客名を取引実績データのZ列「重点顧客」にコピーしたいです。
この場合の部分一致ですが、取引先名には正式名称(例.ABC食品株式会社)、顧客名には略称(例.ABC食品)が入っています。
したがって、参照元ファイルの文字データの一部が参照先ファイルにあれば、それをコピーする、という動作となります。
ネットで検索しても、逆のパターン(参照元ファイルの略称から参照先ファイルの正式名称を取得する)しか見つけられず、このソースコードでは(当然?)目的を達せられなかったため、質問させていただきます。
No.1
- 回答日時:
普通は部分一致での検索は複数ヒットしてしまう可能性が有るので、まずは候補をリストとして表示したものからの選択の仕組みを作らないといけないので普通はやりません。
「正式名称」と「略称」の「1対多」のリストを用意しておいて「略称」から「正式名称」を導いてそれを使えばいいだけです。
ご回答有難うございます。
ご指摘はごもっともなのですが、本質問は部分一致を使用することを前提としています。
取引実績データは会社の公式なデータであり、取引先もマスター化されています。
これに対して、重点顧客との照合というのは、営業担当者が独自に行っているものであり、名称の精度や粒度は本人が決めています。
ABC食品の例でいえば、グループ会社も全て対象としたいのであれば、”ABC食品”で登録すれば良いし、親会社のみを検索したければ、”ABC食品株”と登録すれば良いという使い方です。
つまり、検索対象を簡易的に登録でき且つ検索に自由度を与えるために敢えて部分一致を使用したいのです。
以上、よろしくお願いします。
No.2
- 回答日時:
No1の方のいうとおりですね。
部分一致で良いなら
正式名称が「ABC食品株式会社」の場合、
略称が
「AB]
「ABC」
「ABC食品」
「株式会社」
等がマッチしてしまいます。
もし、AB物流株式会社があったなら、ABは、どちらの会社にもマッチしてしまいます。
又、
「ABC株式会社」を「ABC食品株式会社」にマッチさせたくてもこれはマッチしません。
上記のようになっても良いなら、部分一致は使えますが、おそらくそれは、あなたの望んだ結果ではないはずです。
No.3
- 回答日時:
Dim a, b, r1
a = "ABC食品株式会社"
b = "ABC"
r1 = InStr(a, b)
aが正式名称です。
bが略称です。
r1が1以上の場合、部分一致しています。
if r1 > 0 then
Z列にコピーする処理
end if
のようになります。
ご回答有難うございます。
もう少し教えてください。
InStr関数を使う場合、InStr(a, b) のbはどのように指定すれば良いのでしょうか?
aは、単純にシート名.セル範囲を指定してFor Nextの中で取得して行けば良いのは分かるのですが、bは参照テーブルで直接値を指定できないので、どのように指定すれば良いのか分かりません。
幾つか関数や指定のパターンを調べては試してみたのですが、どれも上手く行きませんでした。(泣
No.4ベストアンサー
- 回答日時:
>InStr関数を使う場合、InStr(a, b) のbはどのように指定すれば良いのでしょうか?
>aは、単純にシート名.セル範囲を指定してFor Nextの中で取得して行けば良いのは分かるのですが、bは参照テーブルで直接値を指定できないので、どのように指定すれば良いのか分かりません。
回答:
bは、重点顧客リストのB列「顧客名」になるので、これも
For Nextの中で取得すればよいかと。
For row1 = 2 to rowMax1 '取引実績データのC列
a = workbooks(取引実績データのブック名).worksheets(取引実績データのシート名).Cells(row1,"C").value
For row2 = 2 to rowMax2 '重点顧客リストのB列
b = workbooks(重点顧客リストのブック名).worksheets(重点顧客リストのシート名).Cells(row2,"B").value
if Instr(a,b) > 0 then
workbooks(取引実績データのブック名).worksheets(取引実績データのシート名).Cells(row1,"Z").value = b
Exit For 'マッチしたので以降は検索しない
end if
Next row2
Next row1
maxrow1は取引実績データのC列の最大行
maxrow1 = workbooks(取引実績データのブック名).worksheets(取引実績データのシート名).Cells(Rows.count, "C").End(xlUp).row
maxrow2は重点顧客リストのB列の最大行
maxrow2も同様に算出
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- その他(データベース) accessについて 2 2022/05/31 16:58
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(社会・学校・職場) 業務内容についてどう思いますか? 私は客先の仕事を下請けとして行うという仕事をしていますが、(客先の 2 2022/05/04 16:17
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- その他(社会・学校・職場) 業務内容についてどう思いますか? 私は客先の仕事を下請けとして行うという仕事をしていますが、(客先の 3 2022/05/04 17:55
- Excel(エクセル) エクセルにおいてセル内の文字を出来るだけ大きく表示する方法を教えてください。 4 2022/07/30 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
B列の最終行までA列をオート...
-
【VBA】2つのシートの値を比較...
-
Excelで、あるセルの値に応じて...
-
VBAを使って検索したセルをコピ...
-
rowsとcolsの意味
-
データグリッドビューの一番最...
-
エクセルVBAにて =A1=B1とすれ...
-
URLのリンク切れをマクロを使っ...
-
VBAで、特定の文字より後を削除...
-
マクロ 最終列をコピーして最終...
-
マクロ 関数を使った抽出でエラ...
-
EXCEL VBAマクロについて質問です
-
VBAコンボボックスで選択した値...
-
エクセルVBAでデータをカウント...
-
エクセルVBA シートモジュール...
-
VBAでのリスト不一致抽出について
-
最終列の右へSUM関数を作成する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
すみません。質問タイトルは正しくは「元データが正式名称、参照テーブルが略称の場合」でした。訂正いたします。