简体   繁体   中英

Excel VBA: Insert cell in a table from searching another table

It's been years since I last had to code anything, but now I seem to need it again.

To simplify, I have number 7 in column A, and I need to input another number in column B depending on what number 7 relates to in another table in another sheet.

So in Sheet2 another table has numbers ranging from 1 to 10 in column A, and according numbers in column B. I then need it to search for number 7 in column A of sheet2 and give me the number in column B, and place it in column B in the first sheet.

I have tried a For loop inside a For loop, based on another code I found somewhere, but it's been so long ago I would need to spend hours rereading and trying to get near a solution. Maybe this is an easy thing for advanced coders? Anyways, thanks in advance for the help!

couldn't you ever help without VBA then you can use this

Option Explicit

Sub main()
    Dim cell As Range, f As Range
    Dim rng1 As Range, rng2 As Range

    Set rng1 = Worksheets("Sht1").Columns(1).SpecialCells(xlCellTypeConstants) '<--Change "Sht1" to your actual sheet1 name
    Set rng2 = Worksheets("Sht2").Columns(1).SpecialCells(xlCellTypeConstants) '<--Change "Sht2" to your actual sheet2 name
    For Each cell In rng1
        Set f = rng2.Find(what:=cell.Value2, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=xlNo)
        If Not f Is Nothing Then cell.Offset(, 1) = f.Offset(, 1)
    Next cell
End Sub

Here are two ways of doing searching over two tables.

Sub LoopValues()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim wsSource As Worksheet, wsSearch As Worksheet
    Dim sourceLastRow As Long, searchLastRow As Long
    Dim i As Long, j As Long

    Set wsSource = Worksheets("Sheet3")
    Set wsSearch = Worksheets("Sheet4")

    With wsSource
        sourceLastRow = .Range("A" & Rows.Count).End(xlUp).Row
        searchLastRow = wsSearch.Range("A" & Rows.Count).End(xlUp).Row

        For i = 2 To sourceLastRow

            For j = 2 To sourceLastRow

                If .Cells(i, 1).Value = wsSearch.Cells(j, 1).Value Then .Cells(i, 2).Value = wsSearch.Cells(j, 2).Value

            Next

        Next

    End With

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

Sub FindValuesLoop()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim wsSource As Worksheet, wsSearch As Worksheet
    Dim sourceLastRow As Long
    Dim i As Long
    Dim SearchRange As Range, rFound As Range


    Set wsSource = Worksheets("Sheet3")
    Set wsSearch = Worksheets("Sheet4")

    With wsSource
        sourceLastRow = .Range("A" & Rows.Count).End(xlUp).Row
        Set SearchRange = wsSearch.Range(wsSearch.Range("A1"), wsSearch.Range("A" & Rows.Count).End(xlUp))
        For i = 2 To sourceLastRow

            Set rFound = SearchRange.Find(What:=.Cells(i, 1).Value, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

            If Not rFound Is Nothing Then .Cells(i, 2).Value = rFound.Offset(0, 1).Value

        Next

    End With

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM