Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12256 / 76734 ←次へ | 前へ→

【70004】Re:2つの言葉で検索したい
発言  ichinose  - 11/10/7(金) 19:14 -

引用なし
パスワード
   こんばんは。

>FindメソッドとFindnextメソッドを使い、先に検索だけを行い、
>見つかったセルをUnionメソッドを使って、
>セル範囲の集合体にしておきます。


と言ってしまったので、Unionでの順序の違い程度は、いいじゃない と、
思っていたので良いと思ってましたが、駄目ですか・・・。
だったら、どっかで並べ替えるしかないですねえ


新規ブックにて

標準モジュール(Module1)に
既作のFindメソッドの汎用プロシジャー

'=================================================================
Option Explicit
Function get_findcell(Optional ByVal f_v As Variant = "", _
           Optional ByVal rng As Range = Nothing, _
           Optional ByVal strng As Range = Nothing, _
           Optional ByVal alookin As XlFindLookIn = -4163, _
           Optional ByVal alookat As XlLookAt = 1, _
           Optional ByVal aso As XlSearchOrder = 1, _
           Optional ByVal asd As XlSearchDirection = 1, _
           Optional ByVal mc As Boolean = False, _
           Optional ByVal mb As Boolean = True) As Range
'指定された値でセル範囲を検索し、該当するセルを取得する
'input : f_v 検索する値
'    rng 検索する範囲
'    strng 検索開始するセル(実際には、このセルの次から検索する)
'    alookin 検索対象 xlvalues,xlformulas,xlcomments
'    alookat: :検索方法 1-完全一致 2-部分一致
'    aso : 検索順序 1 行 2 列
'    asd : 検索方向 1 Xlnext 2 XlPrevious
'    mc  : 大文字・小文字の区別 False しない True する
'    mb  : 半角と全角を区別   True する  False しない
'output:get_findcell 見つかったセル(見つからなかったときはNothingが返る)
  Static 検索範囲 As Range
  Static 最初に見つかったセル As Range
  Static 直前に見つかったセル As Range
  Static 検索方向 As XlSearchDirection
  Dim app As Object
  If Not rng Is Nothing Then
    If Val(Application.Version) > 9 Then
     Set app = Application
     app.FindFormat.Clear
     Set app = Nothing
    End If
    Set 検索範囲 = rng
    If strng Is Nothing Then
     If asd = 1 Then
       Set strng = 検索範囲.Cells(検索範囲.Rows.Count, 検索範囲.Columns.Count)
     Else
       Set strng = 検索範囲.Cells(1, 1)
     End If
   
    End If
    検索範囲.Parent.Columns(1).Find ""
  End If
  If f_v <> "" Then
   
    Set get_findcell = 検索範囲.Find(f_v, strng, alookin, alookat, aso, asd, mc, mb)
    If Not get_findcell Is Nothing Then
     Set 最初に見つかったセル = get_findcell
     Set 直前に見つかったセル = get_findcell
     検索方向 = asd
    End If
  Else
    If 検索方向 = xlNext Then
     Set get_findcell = 検索範囲.FindNext(直前に見つかったセル)
    Else
     Set get_findcell = 検索範囲.FindPrevious(直前に見つかったセル)
    End If
    If Not get_findcell Is Nothing Then
     If get_findcell.Address = 最初に見つかったセル.Address Then
       Set get_findcell = Nothing
     Else
       Set 直前に見つかったセル = get_findcell
     End If
    End If
  End If
End Function


別の標準モジュール(Module2)に

'=================================================================
Sub samp1()
  Dim g0 As Long
  Dim ans As Variant
  Dim ret As Long
  Dim mes As Variant
  Dim g1 As Long
  mes = Array("", "データの終わりです", "データの始めです")
  
  ans = 検索EX(ActiveSheet.UsedRange, Array("竹内結子", "坂井真紀", "星奈々")) 'この配列に複数の検索データを記述
  If TypeName(ans) <> "Boolean" Then
    g1 = 0
    g0 = LBound(ans, 1)
    ret = vbYes
    Do Until ret = vbCancel
     Cells(ans(g0, 1), ans(g0, 2)).Select
     ret = MsgBox(mes(g1) & vbCrLf & _
          "はい    次のデータ" & vbCrLf & _
          "いいえ   前のデータ" & vbCrLf & _
          "キャンセル 検索の終わり", vbYesNoCancel)
     If ret = vbYes Then
       If g0 + 1 > UBound(ans, 1) Then
        g1 = 1
       Else
        g1 = 0
        g0 = g0 + 1
       End If
     ElseIf ret = vbNo Then
       If g0 - 1 < LBound(ans, 1) Then
        g1 = 2
       Else
        g0 = g0 - 1
        g1 = 0
       End If
     End If
          
    Loop
  End If
End Sub
'==============================================================
Function 検索EX(rng As Range, f_str As Variant) As Variant
  Dim dic As Object
  Dim fr As Range
  Dim g0 As Long
  Dim wk As Variant
  検索EX = False
  Set dic = CreateObject("scripting.dictionary")
  For g0 = LBound(f_str) To UBound(f_str)
    Set fr = get_findcell(f_str(g0), rng, , xlValues, xlPart, xlByRows, xlNext)
    Do Until fr Is Nothing
     dic(Join(Array(fr.Row, fr.Column), " ")) = Array(fr.Row, fr.Column)
     Set fr = get_findcell()
    Loop
  Next
  If dic.Count > 0 Then
    Application.ScreenUpdating = False
    With Workbooks.Add
     With .Worksheets(1)
       With .Range(.Cells(1, "a"), .Cells(dic.Count, "a")).Resize(, 2)
        .Value = Application.Transpose(Application.Transpose(dic.items))
        With .Resize(, 2)
          .Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") _
            , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _
            xlSortNormal, DataOption2:=xlSortNormal
          検索EX = .Value
        End With
       End With
     End With
     .Close False
    End With
    Application.ScreenUpdating = True
  End If
End Function


別の標準モジュール(Module3)に
サンプルデータ作成プロシジャー

Sub mk_datasmp()
  Range("a1").Value = "竹内結子"
  Range("c1").Value = "星奈々"
  Range("i21").Value = "竹内結子 星奈々"
  Range("ik65512").Value = "坂井真紀"
  Range("iv65536").Value = "竹内結子"
  Range("a1").Select
End Sub


操作手順

mk_datasmpを実行してください。サンプルデータを表示します。

samp1を実行してください。
はいで 順検索 いいえで 逆検索  キャンセルで 検索終了です。
15 hits

【69938】2つの言葉で検索したい ごん 11/9/26(月) 9:35 質問
【69939】Re:2つの言葉で検索したい UO3 11/9/26(月) 10:07 回答
【69948】Re:2つの言葉で検索したい ごん 11/9/27(火) 19:34 お礼
【69953】Re:2つの言葉で検索したい ごん 11/9/28(水) 9:41 質問
【69943】Re:2つの言葉で検索したい kanabun 11/9/26(月) 18:44 発言
【69951】Re:2つの言葉で検索したい ごん 11/9/27(火) 20:39 発言
【69952】Re:2つの言葉で検索したい UO3 11/9/28(水) 9:18 発言
【69954】Re:2つの言葉で検索したい ごん 11/9/28(水) 9:48 発言
【69955】Re:2つの言葉で検索したい UO3 11/9/28(水) 11:48 回答
【69956】Re:2つの言葉で検索したい UO3 11/9/28(水) 11:55 回答
【69957】Re:2つの言葉で検索したい ichinose 11/9/28(水) 13:42 発言
【69958】Re:2つの言葉で検索したい UO3 11/9/28(水) 14:51 発言
【69959】Re:2つの言葉で検索したい UO3 11/9/28(水) 14:52 発言
【69989】Re:2つの言葉で検索したい ごん 11/10/5(水) 14:56 質問
【69990】Re:2つの言葉で検索したい UO3 11/10/5(水) 16:36 回答
【70027】Re:2つの言葉で検索したい ごん 11/10/11(火) 17:09 お礼
【69997】Re:2つの言葉で検索したい kanabun 11/10/6(木) 12:05 発言
【69998】Re:2つの言葉で検索したい kanabun 11/10/6(木) 13:09 発言
【70026】Re:2つの言葉で検索したい ごん 11/10/11(火) 17:06 発言
【69999】Re:2つの言葉で検索したい UO3 11/10/6(木) 13:53 発言
【70000】Re:2つの言葉で検索したい kanabun 11/10/6(木) 14:55 発言
【70001】Re:2つの言葉で検索したい UO3 11/10/6(木) 17:05 発言
【70002】Re:2つの言葉で検索したい momo 11/10/7(金) 15:22 発言
【70003】Re:2つの言葉で検索したい UO3 11/10/7(金) 18:37 発言
【70004】Re:2つの言葉で検索したい ichinose 11/10/7(金) 19:14 発言
【70005】Re:2つの言葉で検索したい momo 11/10/7(金) 19:23 発言
【70009】Re:2つの言葉で検索したい kanabun 11/10/8(土) 0:13 発言
【70030】Re:2つの言葉で検索したい ごん 11/10/11(火) 18:00 お礼

12256 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free