
教えてください。
EXCELで3万件の商談情報があり、その情報に顧客情報をセットするようにマクロを作成しています。
顧客情報にある顧客コードをキーにしてCollectionオブジェクトを作成し、商談情報にある顧客コードを元にセットしているのですが、この顧客コードが英数の大文字と小文字が混在しています。
例えば、60000AABBと60000AaBbは違う顧客コードということになり、Collectionオブジェクトのキーに指定するとエラーとなります。
Collectionオブジェクトのキーを大文字・小文字を区別する方法はありますか?
もし、区別する方法がなければ、Collectionオブジェクト以外に何か良い方法はありますか?
No.5ベストアンサー
- 回答日時:
n-junです。
ご参考程度として新規Bookで試してみて下さい。
Sub try_next()
Dim myDic As Object
Dim s1 As String, s2 As String
Dim s1t As String, s2t As String
Dim s1n As String, s2n As String
Dim r As Range
Set myDic = CreateObject("Scripting.Dictionary")
s1 = "60000AABB": s1t = "鹿児島店": s1n = "001-0789-0123"
s2 = "60000AaBb": s2t = "神奈川店": s2n = "001-0123-4567"
'顧客コードをキーに、顧客名と電話番号を項目として
myDic.Add s1, Array(s1t, s1n)
myDic.Add s2, Array(s2t, s2n)
'A1~A2に顧客コードを代入
Range("A1").Resize(2).Value = Application.Transpose(Array(s1, s2))
'A列の顧客コーtどに対して、B・C列に顧客名と電話番号を代入
For Each r In Range("A1:A2")
r.Offset(, 1).Resize(, 2).Value = myDic.Item(r.Value)
Next
Set myDic = Nothing
End Sub
例えばこんな感じでしょうか?
すごいです!!!!!
思ったとおりの動きをしてくれました。
何ヶ月も悩んでいたのですが、すっきりしました。
早速使用させて頂きますm(_ _)m
No.6
- 回答日時:
FSOなどでDictionaryを使う方法が出来るわけですが、そういう高等な(初心者には内部の仕掛けが不明な)ものを使わずに
顧客コードは大文字小文字・全角半角などを強制的に統一した(修正)顧客コードを作る
修正顧客コードで商談情報データと顧客情報データをソートする。
顧客コードをマッチングキーにして、マッチングのロジックで情報を統合すするプログラムを組む。
(注)マッチングのロジックは基本情報処理試験やアルゴリズムの教科書を見てください。
総体的な処理完了時間が少ない(早い)はずです。
この回答への補足
ありがとうございます。
ただ・・・顧客情報と商談情報はセールスフォース(SFA)を使用していて、そこからデータを抽出してエクセルにて処理しています。
セールスフォースの方でも大文字・小文字の制御を問い合わせてもらったのですが、基本的に制御はおこなっていないということで回答されました。
各販売会社と共有しているシステムツールなので、こちらで勝手にコードを修正することができません。
処理時間が早いというのは、とても魅力的なので、使用できる方向性がないか、検討してみたいとおもいます。
No.1
- 回答日時:
Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
一例:
Sub try()
Dim myDic As Object
Dim s1 As String, s2 As String
Set myDic = CreateObject("Scripting.Dictionary")
s1 = "60000AABB"
s2 = "60000AaBb"
myDic.Add "60000AABB", Empty 'キー:60000AABB、項目:Empty
Debug.Print myDic.Exists(s1), myDic.Exists(s2) '判定結果
Set myDic = Nothing
End Sub
等は如何でしょう?
この回答への補足
ありがとうございます。
Dictionaryオブジェクトを利用すれば、思った処理ができそうです。
で、もうひとつ質問ですが。
キーに対してセットしたい項目が複数ある場合は、どのように処理すればいいですか?
【顧客情報】
顧客コード 顧客名 連絡先
6000AaBb 神奈川店 001-0123-4567
6000AABB 鹿児島店 001-0789-0123
この顧客情報の顧客名と連絡先を ↓↓↓↓↓↓↓↓ここにセットしたい。
【商談情報】
顧客コード 商品 売上日 顧客名 連絡先
6000AaBb オレンジ 2009/5/1 神奈川店 001-0123-4567
6000AABBアップル 2009/5/15 鹿児島店 001-0789-0123
6000AaBb アップル 2009/5/25 神奈川店 001-0123-4567
この場合、Dictionaryオブジェクトで顧客情報を作成すると思うのですが、キーは顧客コードで、項目を複数(顧客名と連絡先)にするにはどうしたらいいですか?(そんなことができますか?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数ページあるPDFファイル内の文字列等の情報をキーにPDFをグループ分け分割したい。 2 2022/06/25 09:51
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- PDF PDFファイルを分割するマクロの作り方を教えてください。 2 2022/06/24 11:09
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- 社会学 日本の企業はアメリカの企業に比べて口が軽いの? 2 2022/05/02 00:39
- Excel(エクセル) エクセルについて教えてください。 1 2023/02/23 10:08
- その他(法律) この場合、不正ログインになりますか? 1 2022/04/16 22:28
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- その他(コンピューター・テクノロジー) ChatGPT ExcelVBAの精度は3.5と4で違いはある? 1 2023/04/21 21:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
[VBA]CDOメッセージ送信エラー
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルのVBAの標準モジュール...
-
AccessVBAで「dim dbs as datab...
-
テキストボックス中の文字列の...
-
VBAで既に開いている別アプリケ...
-
ExcelVBAでのNZ関数について
-
実行時エラー 3265「要求された...
-
Excel VBA Collection.add で R...
-
コンパイルエラーの対処がわか...
-
横軸ラベルの追加に関するエラ...
-
Excel VBAでWordの複数ファイル...
-
「オブジェクト変数または With...
-
Excelでフィルタをかけると警告...
-
(初心者です)VBAについて。「実...
-
エクセル エラー438
-
アクセスにてオブジェクト名変...
-
エクセルマクロエラー「'Cells'...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
AccessVBAで「dim dbs as datab...
-
Excel VBAでWordの複数ファイル...
-
オブジェクトが見つかりません
-
CreateObjectとGetObjectの違い
-
エクセルVBAで配列内に空白デー...
-
オブジェクト変数またはWITHブ...
-
VBScriptからDLL参照設定したい
-
エクセルVBAでcode128のバー...
おすすめ情報