Excel VBA質問箱 IV

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

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


42530 / 76732 ←次へ | 前へ→

【39267】Re:FINDメソッドについて 訂正
発言  ichinose  - 06/6/20(火) 18:34 -

引用なし
パスワード
   一箇所訂正です。

>新規ブックの標準モジュールに
>
>'===================================
>Option Explicit
>'===============================================
>Sub main()
>  Const セル範囲 = "a1:f5"
>  Dim f_value As Variant
>  Dim find_cell As Range
>  Call mk_sample
>  MsgBox "Find サンプルデータ作成  検索値は 「2」"
>  f_value = "2" '検索する値を入れる
>  MsgBox "Xlvaluesは、RangeのValueプロパティの値が検索対象"
>  Set find_cell = get_findcell(f_value, ActiveSheet.Range(セル範囲), xlValues, xlPart)
>  Do While Not find_cell Is Nothing
>    find_cell.Select
>    MsgBox "セルアドレス " & find_cell.Address & " ---セルの値 " & find_cell.Value
>    Set find_cell = get_findcell() '次の検索
>    Loop
>  MsgBox "xlFormulasは、RangeのFormulaプロパティの値が検索対象"
>  
>  Set find_cell = get_findcell(f_value, ActiveSheet.Range(セル範囲), xlFormulas, xlPart)
>  Do While Not find_cell Is Nothing
>    find_cell.Select
>    MsgBox "セルアドレス " & find_cell.Address & " ---セルの値 " & find_cell.Value & " ----Formulaプロパティ= " & find_cell.Formula
>    Set find_cell = get_findcell() '次の検索
>    Loop
>  MsgBox "xlCommentsは、RangeのCommentのTextプロパティの値が検索対象"
> 
>  Set find_cell = get_findcell(f_value, ActiveSheet.Range(セル範囲), xlComments, xlPart)
>  Do While Not find_cell Is Nothing
>    find_cell.Select
>    MsgBox "セルアドレス " & find_cell.Address & " ---セルの値 " & find_cell.Value & " ----コメント= " & find_cell.Comment.Text
>    Set find_cell = get_findcell() '次の検索
>    Loop
>  MsgBox "=========== 以上、xlValues,Xlformulas,Xlcommentsの違い"
>'=============================================================================================
>  MsgBox "SearchOrder=xlByRowsの場合の検索順序  検索順序に注目"
>  Set find_cell = get_findcell(f_value, ActiveSheet.Range(セル範囲), xlValues, xlPart, xlByRows)
>  Do While Not find_cell Is Nothing
>    find_cell.Select
>    MsgBox "セルアドレス " & find_cell.Address & " ---セルの値 " & find_cell.Value
>    Set find_cell = get_findcell() '次の検索
>    Loop
>  MsgBox "SearchOrder=xlByColumnsの場合の検索順序 検索順序に注目"
>  
>  Set find_cell = get_findcell(f_value, ActiveSheet.Range(セル範囲), xlValues, xlPart, xlByColumns)
>  Do While Not find_cell Is Nothing
>    find_cell.Select
>    MsgBox "セルアドレス " & find_cell.Address & " ---セルの値 " & find_cell.Value
>    Set find_cell = get_findcell() '次の検索
>    Loop
>  MsgBox "=========== 以上、xlByRows  xlByColumnsの違い つまり、検索順序が行方向か列方向か"
>'=====================================================
>  Range("A1").Select
>  MsgBox "Searchdirection=xlNext の場合の検索方向 順回り検索"
>  Set find_cell = get_findcell(f_value, ActiveSheet.Range(セル範囲), xlValues, xlPart, , xlNext)
>  Do While Not find_cell Is Nothing
>    find_cell.Select
>    MsgBox "セルアドレス " & find_cell.Address & " ---セルの値 " & find_cell.Value
>    Set find_cell = get_findcell() '次の検索
>    Loop
>  Range("A1").Select
>  MsgBox "Searchdirection=xlPrevious の場合の検索方向 逆回り検索"
>  Set find_cell = get_findcell(f_value, ActiveSheet.Range(セル範囲), xlValues, xlPart, , xlPrevious)
>  Do While Not find_cell Is Nothing
>    find_cell.Select
>    MsgBox "セルアドレス " & find_cell.Address & " ---セルの値 " & find_cell.Value
>    Set find_cell = get_findcell() '次の検索
>    Loop
>  MsgBox "=========== 以上、xlNext  xlPreviousの違い つまり、指定セル範囲の検索方向を順方向か逆方向かの指定 "
>End Sub
>'===============================================
>Sub mk_sample()
>  Dim rng As Range
>  With ActiveSheet
>   With .Range("a1:c5")
>     .Formula = "=int(rand()*5)+1"
>     .Value = .Value
>     End With
>   With Range("d1:f5")
>     .Formula = "=a1+countif($a$1:$c$5,a1)"
>     End With
>   With Range("a1:d2")
>     For Each rng In .Cells
>      With rng
>       .ClearComments
>       .AddComment
>       .Comment.Visible = True
>       .Comment.Text Text:="コメント" & .Address
>       .Comment.Visible = False
>       End With
>      Next
>     End With
>   End With
>End Sub
>'===============================================
>Function get_findcell(Optional ByVal f_v As Variant = "", _
>           Optional ByVal rng 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 検索する範囲
>'    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
>  If Not rng Is Nothing Then
>    Set 検索範囲 = rng
>    End If
>  If f_v <> "" Then
    Set get_findcell = 検索範囲.Find(f_v, 検索範囲.Cells(検索範囲.Rows.Count, 検索範囲.Columns.Count), _
                    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 get_findcell.Address = 最初に見つかったセル.Address Then
>     Set get_findcell = Nothing
>    Else
>     Set 直前に見つかったセル = get_findcell
>     End If
>    End If
>End Function
>
>
>として、mainを実行してみて、セルの選択順序や選択されるセルの違いを
>コードと照らし合わせて、比べてみてください。
4 hits

【39210】FINDメソッドについて マキチャン 06/6/19(月) 21:03 質問
【39228】Re:FINDメソッドについて ichinose 06/6/20(火) 10:42 発言
【39267】Re:FINDメソッドについて 訂正 ichinose 06/6/20(火) 18:34 発言
【39271】Re:FINDメソッドについて 訂正 マキチャン 06/6/20(火) 21:27 お礼
【39443】Re:FINDメソッドについて 訂正 マキチャン 06/6/24(土) 8:44 お礼

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