Сопоставить / вставить VBA, используя 2 источника - PullRequest
0 голосов
/ 27 января 2020

Таким образом, мой текущий код ниже - он просто находит значение «E1» на моем исходном листе - находит это значение на листе dest, а затем вставляет данные из заданного диапазона ниже ячеек с этим значением.

Однако я хотел бы сопоставить столбец и строку, например:

Я хочу найти значение столбцов A: A на исходном листе - сопоставить это с правильной строкой на листе dest, но также сопоставить это к значению «E1» в исходном листе.

Имеет ли это смысл - пожалуйста, если вам нужно больше, дайте мне знать - я новичок здесь.

 WkNo = Source.Range("E1").Value

 With Source
 Set rFndCell = Dest.Range("1:1").Find(WkNo, LookIn:=xlValues)
 fcol = rFndCell.Column

 Source.Range("B2:C10000").Copy
 Dest.Cells(3, fcol).PasteSpecial (xlPasteValues)

Исходный лист

enter image description here

Лист назначения

enter image description here

1 Ответ

0 голосов
/ 27 января 2020

Вот краткий пример того, как построить решение VBA. Он не использует формулы или копировать-вставить. Чтобы скопировать значения, это быстрое назначение из одной ячейки в другую.

Option Explicit

Sub CopyWeeklyValues()
    Dim weekNumber As Long
    weekNumber = Source.Range("E1").Value

    Dim fndCell As Range
    Set fndCell = Dest.Range("1:1").Find(weekNumber, LookIn:=xlValues)
    If Not fndCell Is Nothing Then
        Dim weekColumn As Long
        weekColumn = fndCell.Column

        '--- now loop over all the rows to copy the data
        '    to the correct row
        With Source
            Dim lastRow As Long
            lastRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row

            Dim i As Long
            For i = 2 To lastRow
                Dim partNumber As String
                partNumber = .Cells(i, 1).Value

                Dim destPart As Range
                Set destPart = Dest.Range("A:A").Find(partNumber, LookIn:=xlValues)
                If Not destPart Is Nothing Then
                    destPart.Cells(1, weekColumn).Value = .Cells(i, 2)
                    destPart.Cells(1, weekColumn + 1).Value = .Cells(i, 3)
                Else
                    '--- what happens if you can't find the part number?
                End If
            Next i
        End With
    Else
        '--- couldn't find the week number on the destination sheet
        '    do something about it?
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...