Forum Discussion

mlondonop's avatar
mlondonop
Copper Contributor
Jul 21, 2022
Solved

Find in excel VBA

I am trying to use the find function in excel VBA inside of a loop. Frist pass would make the "what" in this find function as the value in file A cell B4, and then look for this value in file B and the do an overwrite of values on that row using offset. The next look the "what" in the find would need to look for the value in file A cell B12, the next loop the "what would be the value in B20, the next loop in B28, etc. until it reaches the last row of data in File A. I know how to do loops but I do not know how to use Find within a loop nor do I know how to do Find across various workbooks because the syntax for Find is very specific. Any help on this would be appreciated.

  • mlondonop 

    Your description is not very specific, so my reply is vague too.

    By "file", do you mean a worksheet in the active workbook?

    Sub ReplaceLoop()
        ' Column to search on sheet B
        Const col = "D"
        ' Offset to use
        Const offs = 5
        ' Replacement text
        Const repl = "Replacement Text"
        Dim wsA As Worksheet
        Dim wsB As Worksheet
        Dim r As Long
        Dim m As Long
        Dim s As String
        Dim rng As Range
        Dim adr As String
        Application.ScreenUpdating = False
        ' Use the real names of the worksheets
        Set wsA = Worksheets("A")
        Set wsB = Worksheets("B")
        m = wsA.Range("B" & wsA.Rows.Count).End(xlUp).Row
        For r = 4 To m Step 8
            s = wsA.Range("B" & r).Value
            Set rng = wsB.Columns(col).Find(What:=s, LookAt:=xlWhole)
            If Not rng Is Nothing Then
                adr = rng.Address
                Do
                    rng.Offset(0, offs).Value = repl
                    Set rng = wsB.Columns(col).Find(What:=s, After:=rng, LookAt:=xlWhole)
                    If rng Is Nothing Then Exit Do
                Loop Until rng.Address = adr
            End If
        Next r
        Application.ScreenUpdating = True
    End Sub
  • mlondonop 

    Your description is not very specific, so my reply is vague too.

    By "file", do you mean a worksheet in the active workbook?

    Sub ReplaceLoop()
        ' Column to search on sheet B
        Const col = "D"
        ' Offset to use
        Const offs = 5
        ' Replacement text
        Const repl = "Replacement Text"
        Dim wsA As Worksheet
        Dim wsB As Worksheet
        Dim r As Long
        Dim m As Long
        Dim s As String
        Dim rng As Range
        Dim adr As String
        Application.ScreenUpdating = False
        ' Use the real names of the worksheets
        Set wsA = Worksheets("A")
        Set wsB = Worksheets("B")
        m = wsA.Range("B" & wsA.Rows.Count).End(xlUp).Row
        For r = 4 To m Step 8
            s = wsA.Range("B" & r).Value
            Set rng = wsB.Columns(col).Find(What:=s, LookAt:=xlWhole)
            If Not rng Is Nothing Then
                adr = rng.Address
                Do
                    rng.Offset(0, offs).Value = repl
                    Set rng = wsB.Columns(col).Find(What:=s, After:=rng, LookAt:=xlWhole)
                    If rng Is Nothing Then Exit Do
                Loop Until rng.Address = adr
            End If
        Next r
        Application.ScreenUpdating = True
    End Sub
    • mlondonop's avatar
      mlondonop
      Copper Contributor
      Hello Hans, thank you for your quick reply. I am a bit slow to review to be able to let you know if this worked or not because I am about to leave office for a few weeks for the birth of a new baby. But I can at least answer your question. By new "file" I mean entire different workbook, not just different worksheet in the active workbook. That's part of the reason I was having difficulty in the syntax of the find function.
      • HansVogelaar's avatar
        HansVogelaar
        MVP

        mlondonop 

        I hope everything will go well!

         

        Do those workbooks contain multiple sheets?

        If so, do you want to search all sheets, or only a specific one?

Resources