|
一箇所訂正です。
>新規ブックの標準モジュールに
>
>'===================================
>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を実行してみて、セルの選択順序や選択されるセルの違いを
>コードと照らし合わせて、比べてみてください。
|
|