• ベストアンサー

Excel VBA頭文字検索方法について知恵を貸してください

小生VBAの初心者です。 Excelのワークシート上のある一列に半角カタカナの人名のリストがあり、 そのリストを検索にかけます。 例えば、ユーザーフォームを使い、検索指定項目として、 ア行 カ行 サ行 タ行 ナ行 ・ ・ ・ の内、ア行を選択した場合、ワークシート上の人名リストの内、 ア行に該当する人名がピックアップされるようなマクロを組みたいのですが、上手くいきません;;; 知恵をお貸し下さい。お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

こんな感じでしょうか?(フォームを扱えるとのことなので、必要な部分のみです。) 注)人名のリストの列番号がcolとします。また、nは、あらかじめmoji()に五十音の各行が入っているとして、その引数。   例:moji(1)="カキクケコ" (←半角カタカナとします:文字数は5でなくても可) Set r = Cells(65536, col).End(xlUp).Offset(1, 0) While r.Row > 1  Set r = r.Offset(-1, 0)  If (Not (IsNumeric(r.Value))) And (InStr(moji(n), Left(r.Value, 1)) > 0) Then    '****該当する場合の処理  End If Wend セルの下から順にサーチしていますが、上から順がよければループの順を逆にしてください。 ****のところに該当する人名が見つかった時の処理をいれてください。

syu-1
質問者

補足

fujillin さん御回答ありがとうございます。 fujillin さんのマクロを使わせていただき、ためしにアイウエオ行のみで人名リストを検索し、検索ヒットした人名の横の列に"HIT"の文字を表記する処理(下記のマクロ)を行ってみましたところ、成功いたしました。ありがとうございます。  ☆fujillin さんのマクロをまだ完全に解読できていませんが^^;   → If (Not (IsNumeric(r.Value))) And (InStr(moji, Left(r.Value, 1)) > 0) Then   の部分^^; 勉強いたします^^ ↓走らせた処理です↓ ****************************** Sub 人名検索() Dim r As Range Dim moji As Variant Dim x As Integer moji = "アイウエオ" Set r = Cells(65536, 2).End(xlUp).Offset(1, 0) While r.Row > 1 Set r = r.Offset(-1, 0) x = r.Row If (Not (IsNumeric(r.Value))) And (InStr(moji, Left(r.Value, 1)) > 0) Then Cells(x, 3).Value = "HIT" End If Wend End Sub ****************************** あとは、ユーザーフォームを使い、リストボックスの(ア行、カ行、サ行・・・)選択にて 選択した行にて人名検索を行えるようにするだけです。ユーザフォームは作成済みですので あとすこしかな^^; moji(1) = "アイウエオ" moji(2) = "カキクケコ"   ・   ・   ・ ですが、配列を使って代入していく方法がベターですか? ☆すみません配列未勉強ですので、いまから勉強いたします。 わかりにくい部分あればどうぞ御指摘ください。アドバイス頂ければ幸いです。

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

#2です。補足です。 If (Not (IsNumeric(r.Value))) And (InStr(moji, Left(r.Value, 1)) > 0) Then Not (IsNumeric(r.Value))は「セルの値が数字でない場合(=文字)」で、 InStr(moj(n)i, Left(r.Value, 1))は「moji(n)の中にセルの1文字目があるか」を判定しています。 実質的には2番目の判定条件だけで良いのですが、セルの値が数字の場合、2番目の判定(文字関数)をする際にエラーが出てしまうので、1番目の条件もいれてエラーを避けています。 お役に立ててなによりです。頑張ってください。 配列の入力は文字コードを使ってループで定義するのもあるかもしれませんが、数がしれているので直接定義してしまったほうが簡単かも。 moji=Array("アイウエオ","カキクケコ","サシスセソ"・・・・・・)という手もありますよ。

syu-1
質問者

お礼

fujillinさんありがとうございます^^ おかげ様でうまくいきました。 感謝しております^^丁寧な回答とアドバイス貴重なものでした。 初心者の私でも飲み込みやすく解りやすい解説でした。 本当にありがとうございました^^

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>カタカナで表記された人名の頭文字が、ア行に該当する人名を別のワークシートに書き出すマクロを組みたいです。 ⇒「ア行」を選択>ア・イ・ウ・エ・オから始まる人名を抽出。 ⇒AdvancedFilter http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_advancedfilter.html ⇒どこかのセルに「ア行」を選択した時に、ア*・イ*・ウ*・エ*・オ* と代入するようにしておくとか。

syu-1
質問者

お礼

An-junさん回答ありがとうございます。 dvancedFilterを使っても絞込みできそうですね^^ 大変参考になります。 小生、この辺りも使い方も勉強しておく必要がありそうです^^ 頭文字検索成功致しました。あとは細かい部分を固めていくのみです。 皆さんの御回答ありがたい^^ 親切な対応ありがとう御座います^^

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

ア行とは何であるかExcelに教える必要があります。 「ア行」を選択>ア・イ・ウ・エ・オから始まる人名を抽出。 「カ行」・・・・・ 「サ行」・・・・・ ではないでしょうか? >ピックアップされるような とは具体的にどうしたいのか不明。 Msgboxで表示する?シートに書き出す?その他?

syu-1
質問者

補足

n-junさん回答ありがとうございます^^ 本題です。 >ピックアップされるような >とは具体的にどうしたいのか不明。 >Msgboxで表示する?シートに書き出す?その他?  質問に不備が有りました。すみません^^; ※ピックアップとはシートに書き出す処理を行いたいです。 また私の質問で、 >ア行を選択した場合、ワークシート上の人名リストの内、 >ア行に該当する人名がピックアップされるようなマクロを組みたいのですが、上手くいきません;;; ※この文章にも不備がありました。  カタカナで表記された人名の頭文字が、ア行に該当する人名を別のワークシートに書き出すマクロを組みたいです。 内容に不備がありすみません。 回答ありがとうございます^^

関連するQ&A