1

タイトルが言うように、それは可能であり、どのようにですか?

列で必要な値を検索する関数を見つけましたが、.Findすべてのアドレスを配列に保存することはできますか?

コードは次のようになります。

Set wsRaw = Worksheets("raw_list")
Set oRange = wsRaw.Columns(PhaseCol)

SearchString = "control"

Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)

If Not aCell Is Nothing Then
    Set bCell = aCell
    FoundAt = aCell.Address
    Do While ExitLoop = False
        Set aCell = oRange.FindNext(After:=aCell)

        If Not aCell Is Nothing Then
            If aCell.Address = bCell.Address Then Exit Do
            FoundAt = FoundAt & ", " & aCell.Address
        Else
            ExitLoop = True
        End If
    Loop
Else
    MsgBox SearchString & " not Found"
End If

MsgBox "The Search String has been found these locations: " & FoundAt
Exit Sub

今のMsgBoxところ、結果を表示するだけです。アイデアは、可能であれば結果を配列に格納することでした。

4

2 に答える 2

0

はい、できます。この例を参照してください

Dim MyResults() As String
Dim n As Long

n = 1

'
'~~> rest of the code
'

If Not aCell Is Nothing Then
    Set bCell = aCell

    ReDim Preserve MyResults(n)
    MyResults(n) = aCell.Address
    n = n + 1

    Do While ExitLoop = False
        Set aCell = oRange.FindNext(After:=aCell)

        If Not aCell Is Nothing Then
            If aCell.Address = bCell.Address Then Exit Do
            ReDim Preserve MyResults(n)
            MyResults(n) = aCell.Address
            n = n + 1
        Else
            ExitLoop = True
        End If
    Loop
Else
    MsgBox SearchString & " not Found"
End If

その後、配列をループして結果を表示できます

For i = LBound(MyResults) To UBound(MyResults)
    Debug.Print MyResults(i)
Next i
于 2012-07-03T13:46:47.663 に答える
0

このコードは、他のシートを間接的に参照するためにセルを更新するために使用され、特定の文字列を持つセルを検索し、これらのセルの値を更新します。(fsstringは、停止条件に使用される最初の検索アドレスのアドレスを格納します)。

Sub Update_Sheet_Reference()
Dim sCell As Variant, fsCell As Variant
sString = "_SearchText"
sCell = Range("A1").Address

While True
sCell = Cells.Find(What:=sString, After:=Range(sCell), LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Address
        
Range(sCell).Value = Replace(Left(Range(sCell).Value, Len(Range(sCell).Value) - 1), sString, "") + sString + "!"
If fsCell = "" Then
    fsCell = sCell
ElseIf sCell = fsCell Then Exit Sub
End If
Wend
End Sub
于 2021-10-13T13:51:45.560 に答える