- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAにハッシュ関数はないのですか?)
VBAにハッシュ関数はないの?
このQ&Aのポイント
- VBAにはハッシュ関数は用意されていません。ハッシュ検索を行う場合は、Dictionaryを使用することが一般的です。
- 他の言語にはハッシュ関数が用意されている場合がありますが、VBAには標準でハッシュ関数はありません。
- ハッシュ関数がない場合でも、VBAの中でハッシュ関数と同等の機能を実現する式を作成することは可能です。具体的な式は用意されていませんが、Dictionaryを使用することでハッシュ検索を簡単に行うことができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
少々誤解があります。 何かのデータを使い、そのデータ固有の値を求めるような関数は、全て「ハッシュ関数」と言えます。 ハッシュを効率よく使うために、いくつかの性質が求められる、というだけです。 検索用に使うハッシュ関数は、決まったものはありません。 扱うデータによって「最適」な計算が違うからです。 既存のものを使うのでなければ、自作すればいいのです。 また、検索だけがハッシュの使い方ではありません。 例えば、データが正しいかどうかの検証にも使われます。 100MBのデータをダウンロードして、失敗してないか確認する場合 ダウンロードした100MBとサーバーにある100MBを1バイトずつ比較する、なんてことは非現実的です。比較のために100MB通信しなおすことになるのですから。 そこで、ハッシュを計算して、比較すれば、少ないデータ量で確認できます(ハッシュが同じ場合は、確実に同じ、とは言えないが、ハッシュが違えば失敗していることが100%判明する) このような使い方をするとき、その計算方法がバラバラでは意味がありません。 そこで、同じ計算をするために、MD5とかSHAとか言った決まった方法を使います。 これらも「ハッシュ関数」です。プログラミング言語によっては、用意されているので、自作の必要はありません。 では、後者のハッシュ関数を、検索用に使えばいいか、というと、そう単純ではありません。 例えば、MD5は128ビットの値を返します。単純計算で、2の128乗 通りです。 それだけのハッシュテーブル作るのは無駄だし、普通のPCでは無理です。
お礼
回答ありがとうございます。 これでまた少し理解が深まりました。 ということで、VBAでお遊びでハッシュ関数を作成し、ハッシュ検索をするコード書くとどうなるのでしょうか?