[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『あいまい検索の仕方がわかりません』(初心者)
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.