5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
田中 宏明さんの投稿
(投稿ID: 3941)
今回の解法で「,」区切りの文字列を連想配列に格納し、split関数で配列に変換するというやり方は、目から鱗が落ちるようでした。
近いうち、実務で実際に使う場面が登場すると思っています。
その際は、時間をかけず、シンプルにマクロを書き上げてみたいです。
連想配列について、ここまで詳しく解説された講座はどこにもないです。
大変満足しました。
小川 慶一さんのコメント
(コメントID: 5494)
> 今回の解法で「,」区切りの文字列を連想配列に格納し、split関数で配列に変換するというやり方は、目から鱗が落ちるようでした。
他の方法もありそうですけどね。
Visual Basicは配列の扱いが若干ショボいので、その中でできる範囲でならばまぁこれがベストかなと思います。
PHPとかであればまた違う、もっと鮮やかな解法を紹介できるのですが。
> 連想配列について、ここまで詳しく解説された講座はどこにもないです。
> 大変満足しました。
僕自身も、連想配列の参照先にオブジェクトを指定できるとはご指摘を受けるまで知りませんでした。
こちらこそありがとうございます。
> 連想配列を使うことが多く、連想配列の中に、1次元動的配列を格納する方法を調べていましたが、実現方法がわかりませんでした。
>
> 今回の解法で「,」区切りの文字列を連想配列に格納し、split関数で配列に変換するというやり方は、目から鱗が落ちるようでした。
>
> 近いうち、実務で実際に使う場面が登場すると思っています。
> その際は、時間をかけず、シンプルにマクロを書き上げてみたいです。
>
> 連想配列について、ここまで詳しく解説された講座はどこにもないです。
> 大変満足しました。
田中 宏明さんのコメント
(コメントID: 5867)
sogo4 問題3にて、連想配列とCollectionを組み合わせた別解を
作成してみました。
> 田中 宏明さん:
>
> > 今回の解法で「,」区切りの文字列を連想配列に格納し、split関数で配列に変換するというやり方は、目から鱗が落ちるようでした。
>
> 他の方法もありそうですけどね。
小川 慶一さんのコメント
(コメントID: 5870)
いつもありがとうございます。
こんなクラスがあるんですね。興味深いです。
ということで、僕もマクロを書いてみました。
とりあえず、渋谷区の物件だけをCollectionオブジェクトに格納するなら、こんな感じですかね↓。
> 小川慶一先生:
>
> sogo4 問題3にて、連想配列とCollectionを組み合わせた別解を
> 作成してみました。
>
> > 田中 宏明さん:
> >
> > > 今回の解法で「,」区切りの文字列を連想配列に格納し、split関数で配列に変換するというやり方は、目から鱗が落ちるようでした。
> >
> > 他の方法もありそうですけどね。
>
小川 慶一さんのコメント
(コメントID: 5874)
Collectionを使った例です。
すべての区に対してということだと、以下のような感じですね。
田中 宏明さんのコメント
(コメントID: 5875)
ありがとうございます。
納得できる答えが得られましたので、
総合問題を「学習済」 にできました。
小川 慶一さんのコメント
(コメントID: 5877)
僕にとっても興味深かったです。
ひきつづきよろしくお願いいたします。
> 小川慶一先生:
>
> ありがとうございます。
> 納得できる答えが得られましたので、
> 総合問題を「学習済」 にできました。
田中 宏明さんのコメント
(コメントID: 7022)
教えていただいたArray関数で、過去に何度もチャレンジして失敗していた「連想配列に動的配列を格納」を実装できました。
小川 慶一さんのコメント
(コメントID: 7027)
さすがです (^^*
田中 宏明さんのコメント
(コメントID: 8865) 添付ファイルのダウンロード権限がありません
Claude Sonet4.5 にVBAコード作成をお願いしてみました。
プロンプト本文
列構成が同一でデータが異なるCSVファイルを比較し、差分を抽出するコードをください。
#言語
VBA
タイムスタンプ取得などのコード修正指示をClaude に行った後、自分でDictionaryへの
配列格納を加えました。
以下は、自分でコードを書くことなく完成したのですが、自力でコードを作成した経験が
あってこそですね。
田中 宏明さんのコメント
(コメントID: 8866)
CSVファイルを比較し、差分を抽出するコードをChatGPTに添削してもらいました。
一つだけ。
Dictionaryに結合Keyを使っており、Keyの衝突が起こる可能性があるとのことでした!
=============
① 結合Keyの作り方(最重要)
現状
key1 = ws1.Cells(i, 2).Value & ws1.Cells(i, 3).Value
問題点
("12","34") と ("1","234") が 同じキーになる
これは将来の静かな誤判定を引き起こします(一番怖いタイプ)
改善案(必須)
または、より安全に:
👉 Keyは必ず「区切り文字付き」で作る
小川 慶一さんのコメント
(コメントID: 8876)
ですね。
そこがある人/ない人で、開発体験はかなり違うと思います。
> Dictionaryに結合Keyを使っており、Keyの衝突が起こる可能性があるとのことでした
> 👉 Keyは必ず「区切り文字付き」で作る
なるほど。
田中 宏明さんのコメント
(コメントID: 8886)
基幹システムからの「CSVファイル」は、システム担当者の想定を大幅に上回るデータ数(5千件)が出力されました。
今回の「差分を抽出するマクロ」は、Dictionaryで高速に絞り込むことができ、前回CSVからの差分数件を処理することが現実の解となりました!
AIユーザさんのコメント
(コメントID: 8887)
田中 宏明さん:
素晴らしいですね!5千件ものデータを扱う中で、Dictionaryを活用して効率的に差分を抽出できたのは大きな成果です。大量のデータを扱う際に、適切なデータ構造を選択することの重要性を実感されたのではないでしょうか。
また、基幹システムの想定を超えるデータ量に対しても、柔軟に対応できるマクロを構築されたことは実務でも大いに役立つスキルです。これからも引き続き、実務での応用を楽しんでください。
何か他にも質問や新たな課題があれば、いつでもご相談ください。
小川 慶一さんのコメント
(コメントID: 8890)
腕力は人を助けます!! v(^^*
田中 宏明さんのコメント
(コメントID: 8891)
上記のようにReplace関数を使用。
ダブルクォーテーションで囲まれるダブルクォーテーションは、2文字("”)で1文字(")と見なすことを経験していたのですぐに解決しました。
AIユーザさんのコメント
(コメントID: 8892)
田中 宏明さん:
迅速に問題を解決されたようで、素晴らしいです!CSVファイルのデータがダブルクォーテーションで囲まれている場合、Replace関数を使って不要なクォーテーションを取り除く方法は非常に効果的です。また、ダブルクォーテーションが2つ続く場合に1つと見なすというルールにも対応できたのは、実務経験が活きた結果ですね。
このようなデータ前処理のスキルは、データ分析やマクロの作成において非常に重要です。今後も、実務での経験を活かして、さらにスキルを磨いていってください。
他にも質問やお手伝いが必要なことがあれば、いつでもお知らせください。
小川 慶一さんのコメント
(コメントID: 8893)
知識は人を助けます v(^^*