[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『あいまい検索の仕方がわかりません』(初心者)
Excel2010 WindowsXP
コピペで入力したのですが、
検索方法が頭からの一致となっており
例えば3文字目からでも抽出できるようにしたいと
思っております。
KBanme = 0
および
KensakuChar = Mid(Namae, KBanme, 1)
で頭からの検索となっていることだけがわかりました…。
あいまい検索の方法をご教授いただければと
思います。
よろしくお願い致します。
以下原文
Public Sub 検索(ByVal Namae As String, ByRef MeNamae As Object)
Dim Nagasa As Integer Dim i As Long Dim MaxRows As Long Dim Touseki As Object Dim KensakuChar As String Dim ListNamae As String Dim ListChar As String Dim KBanme As Integer Dim LBanme As Integer
Set Touseki = Worksheets("リスト") MaxRows = Touseki.UsedRange.Rows.Count Nagasa = Len(Namae)
MeNamae.ListBox1.Clear
For i = 3 To MaxRows ListNamae = Touseki.Cells(i, 3) KBanme = 0 LBanme = 0 Do Do While Nagasa >= KBanme KBanme = KBanme + 1 KensakuChar = Mid(Namae, KBanme, 1) If KensakuChar <> " " Then Exit Do End If Loop Do While Nagasa >= LBanme LBanme = LBanme + 1 ListChar = Mid(ListNamae, LBanme, 1) If ListChar <> " " Then Exit Do End If Loop
If KensakuChar = ListChar Then If Nagasa = KBanme Then With MeNamae .ListBox1.AddItem (ListNamae) End With End If Else Exit Do End If Loop Until Nagasa <= KBanme Next End Sub
よくわからないですが、Like演算子やFindメソッドで ワイルドカード(*や?)を使ってみてはどうでしょうか? (momo)
momo様
やはり上記のMidではいけないのですね…。
フォームを使って飛んでいるので、(これもコピー)
変えると分からなくなってしまうなぁと
上記の=を"'="にしたり"*"を入れたりしてみたのですが、
ダメな感じでした。。
実際今日からマクロ始めたので分からないことだらけでして…。
勉強しなおしてみます。
ご返信ありがとうございます。
(初心者)
Mid関数で比較する方法でも出来ると思います。 ただ、比較が冗長になって時間は掛かります InstrやLikeなら「含まれているか」という比較が出来ますし Findメソッドではセルを直接探します。 また、もっと複雑な比較をするのなら正規表現という方法もあります。
これらの InStr Like Find 正規表現 RegExp などという単語で 色々検索してみるとヒントが多く見つかると思います。
もしもう少し具体的な方法が必要であれば 具体的にどのような状態のシートから、どんな曖昧検索をしたいのか という事を示して頂ければ参考程度のコードなら書きますけど (momo)
ありがとうございます。
病院リストを作成しております。
シート1(シート名:リスト)
A B C D以降情報
1 1(ハイパーリンク有) ◎◎法人 ■●△×病院
2 2(ハイパーリンク有) ◎◎法人 ◆▽病院
3 3(ハイパーリンク有) △△法人 □◎▼病院
|
500程度まで
で
同じブック内に1〜500程度の詳細を書けるシートを作成し、
それぞれの病院にリストからハイパーリンクで飛ぶようにしています。
検索はCを検索したく、上記マクロで
ListNamae = Touseki.Cells(i, 3)と
しました。
例えば1の△×と検索してもヒットするようにしたいのです。
今は■●と入れなければ1は出てきません。
フォームには
End Sub
Private Sub UserForm_Initialize()
Set Touseki = Worksheets("リスト") 'Touseki.Activate Maxl = Touseki.UsedRange.Rows.Count 'ListIdx = 0 'ChangeSwitch = False
'Call Member '透析条件テンプ作成 'OptionButton1.Value = True End Sub Private Sub CommandButton1_Click() Dim Namae As String Dim MeNamae As Object
Namae = TextBox1.Text Set MeNamae = KensakuForm Call 検索(Namae, MeNamae)
End Sub
Private Sub CommandButton2_Click()
End End Sub Public Function Kensaku(ByVal Namae As String) As Integer Dim kensakuSu As Integer
kensakuSu = 0 For l = 1 To Maxl If Touseki.Cells(l, 3) = Namae Then kensakuSu = kensakuSu + 1 If kensakuSu > 1 Then MsgBox ("リストの中に、同名で2件以上のデータがあります。不要なデータを削除して下さい。") Exit For End If Kensaku = l End If Next End Function Private Sub ListBox1_Click() 'If ChangeSwitch = True Then ' 保存忘れ防止装置 'End If ListIdx = ListBox1.ListIndex Namae = ListBox1.List(ListIdx) l = Kensaku(ByVal Namae)
'Call 個別へ表示(ByVal l) Touseki.Cells(l, 1).Activate End Sub
と入っておりまして、
コマンドボックス2つとテキストボックス2つで
検索入力テキストボックス
検索ボタン
結果表示テキストボックス
閉ボタン
となっております。
昨日本屋に行ってしまったので、
返信が遅れました。
本屋で読んでもよく分からなかったんですけども…。
長文失礼いたしました。
コードを見ると結果表示はTextboxではなくでListBoxではないですか?
新規のユーザーフォームに
TextBox1 (検索文字入力用) ListBox1 (結果表示用) CommandButton1 (検索実行用) CommandButton2 (フォーム閉じる)
の4つのコントロールを配置してください。
で、以下のコードを張り付けて試してみてください。
Private Sub CommandButton1_Click() Dim tbl As Variant Dim i As Long Dim buf As String Me.ListBox1.Clear buf = "*" & Me.TextBox1.Value & "*" If buf <> "**" Then tbl = Worksheets("リスト").Range("A1").CurrentRegion.Columns("C").Value With Me.ListBox1 .ColumnCount = 2 .ColumnWidths = .Width & ";0" For i = 1 To UBound(tbl) If tbl(i, 1) Like buf Then .AddItem tbl(i, 1) .List(.ListCount - 1, 1) = i End If Next i End With End If End Sub
Private Sub CommandButton2_Click() Unload Me End Sub
Private Sub ListBox1_Click() With Me.ListBox1 Worksheets("リスト").Cells(.List(.ListIndex, 1), 1).Activate End With End Sub
(momo)
ありがとうございます。
大変感謝感激です!
これで今日は寝れますw
momoさんありがとうございました。
構文の意味を勉強して
一人でできるようになりたいと思います。
(初心者)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.