新しく質問する

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

役に立った:1件
  • 質問者:yunako0517
  • 投稿日時:2009/03/23 11:33
  • 困り度:困ってます

エクセル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

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:1件)
  • 参考になった:0件

No.5ベストアンサー10pt

  • 回答者:merlionXX
  • 回答日時:2009/03/25 11:49

> この場合はカタカナや英数字は半角で書いておかなければならないのでしょうか?

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

通報する

この回答へのお礼

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

  • 参考になった:0件
  • 回答者:merlionXX
  • 回答日時:2009/03/24 12:36

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列のカタカナが全角で書かれていたのではないでしょか?

通報する

この回答への補足

>住所録B列のカタカナが全角で書かれていたのではないでしょか?

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

  • 参考になった:0件
  • 回答者:merlionXX
  • 回答日時:2009/03/23 14:15

merlionXXです。

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

通報する

この回答への補足

回答ありがとうございます。
みんなが使えるようにするため、どんな入力の仕方でも検索できるようにしたかったので、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)』を入れると、カタカナ検索した場合、対象項目がないことになってしまいます。

教えてください。

  • 参考になった:0件
  • 回答者:merlionXX
  • 回答日時:2009/03/23 14:07

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
以下略

で出来ると思います。

通報する

  • 参考になった:0件

No.1ベストアンサー20pt

  • 回答者:n-jun
  • 回答日時:2009/03/23 11:40

StrConv関数
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/f …

ans = InputBox("住所を入力してください")
ans = StrConv(ans,vbNarrow) '←追加
With ActiveSheet

変数ansに含まれる”半角に出来る全角文字”を半角文字に変換しておくとか?

通報する

この回答へのお礼

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

  
このQ&Aは役に立ちましたか?(役に立った:1件)

このページのトップへ