• ベストアンサー

エクセルVBA住所録で半角全角問わず検索する方法

エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub

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

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

StrConv関数 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/function/vba_string2.html#strconv ans = InputBox("住所を入力してください") ans = StrConv(ans,vbNarrow) '←追加 With ActiveSheet 変数ansに含まれる”半角に出来る全角文字”を半角文字に変換しておくとか?

yunako0517
質問者

お礼

ありがとうございました。 出来ました! これでみんなに使わせてあげられます。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> この場合はカタカナや英数字は半角で書いておかなければならないのでしょうか? え? ans = StrConv(ans, vbNarrow) って入れたことはInputboxに入力された値で半角に出来るものはすべて半角としてansに代入して、そのansで検索してるんだから当然でしょ? だからNo2で住所のカナは全角があるんじゃないですか、だったら数字だけを半角化する方法がありますよと書いたのです。

yunako0517
質問者

お礼

ありがとうございます。 ans = StrConv(ans, vbNarrow) の意味をよく理解せずに使おうとしていました。 問題のB列だけ ans = StrConv(ans, vbWide) で書いたらできました。 お手数掛けてすみません。 ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

merlionXXです。 > B列のみ『ans = StrConv(ans, vbNarrow)』を入れるとカタカナ表記のものが全角半角共、検索されなくなります。 Sub 顧客名検索() ans = InputBox("顧客名を入力してください") ans = StrConv(ans, vbNarrow) With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub としたのですね?ならば、インプットボックスにカタカナを全角で入れようが半角で入れようが対象の半角カタカナを検索すると思いますが。 > カタカナ検索した場合、対象項目がないことになってしまいます 住所録B列のカタカナが全角で書かれていたのではないでしょか?

yunako0517
質問者

補足

>住所録B列のカタカナが全角で書かれていたのではないでしょか? そのとおりです。他の列はカタカナは全て半角で入力しているのですが、B列のみは全角で入力しています。 この場合はカタカナや英数字は半角で書いておかなければならないのでしょうか?

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

merlionXXです。 ans = Replace(ans, Right(StrConv(Str(i), vbWide), 1), Right(Str(i), 1)) は ans = Replace(ans, StrConv(i, vbWide), i) だけでもいけますね、失礼しました。

yunako0517
質問者

補足

回答ありがとうございます。 みんなが使えるようにするため、どんな入力の仕方でも検索できるようにしたかったので、n-junさんの回答を使わせていただいています。 数字のみの場合はこのような方法もあるのですね。 勉強になりました。 ここでひとつ問題が起こったのですが、 今、A列(番号)、B列(氏名)、C列(フリガナ)、D列(住所)、E列(郵便番号)、F列(電話番号)、G列(備考)、H列以降(補足事項)というふうに作っています。 全て全角半角問わず、検索できるように同じようにコードを入力したのですが、B列のみ『ans = StrConv(ans, vbNarrow)』を入れるとカタカナ表記のものが全角半角共、検索されなくなります。 どうしてでしょうか? ちなみにB列部分の元のコードは、 Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub で、3行目に『ans = StrConv(ans, vbNarrow)』を入れると、カタカナ検索した場合、対象項目がないことになってしまいます。 教えてください。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

yunako0517さんこんにちは、merlionXXです。 マンション名等、住所にもカタカナが使われることが多々あると思います。 全角のカタカナはそのままにして数字のみ半角にしたいのなら ans = InputBox("住所を入力してください") For i = 0 To 9 ans = Replace(ans, Right(StrConv(Str(i), vbWide), 1), Right(Str(i), 1)) '全角数字のみ半角に置換 Next i With ActiveSheet 以下略 で出来ると思います。