エクセル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
回答(5件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.5ベストアンサー10pt
> この場合はカタカナや英数字は半角で書いておかなければならないのでしょうか?
え?
ans = StrConv(ans, vbNarrow)
って入れたことはInputboxに入力された値で半角に出来るものはすべて半角としてansに代入して、そのansで検索してるんだから当然でしょ?
だからNo2で住所のカナは全角があるんじゃないですか、だったら数字だけを半角化する方法がありますよと書いたのです。
この回答へのお礼
ありがとうございます。
ans = StrConv(ans, vbNarrow)
の意味をよく理解せずに使おうとしていました。
問題のB列だけ
ans = StrConv(ans, vbWide)
で書いたらできました。
お手数掛けてすみません。
ありがとうございました。
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列のみは全角で入力しています。
この場合はカタカナや英数字は半角で書いておかなければならないのでしょうか?
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)』を入れると、カタカナ検索した場合、対象項目がないことになってしまいます。
教えてください。
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
以下略
で出来ると思います。
No.1ベストアンサー20pt
StrConv関数
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/f …
ans = InputBox("住所を入力してください")
ans = StrConv(ans,vbNarrow) '←追加
With ActiveSheet
変数ansに含まれる”半角に出来る全角文字”を半角文字に変換しておくとか?
この回答へのお礼
ありがとうございました。
出来ました!
これでみんなに使わせてあげられます。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示