Заполнение связанными значениями

#excel #vba

#excel #vba

Вопрос:

Мне нужно заполнить значение Sheet 1 Cell A2 с =Sheet 2 Cell A2 помощью, пока связанное значение не станет пустым. Я действительно не знаю, что делать.

Я зашел так далеко, что мне нужны только нули в полях:

 Sub Test1()
    Dim x As Integer
    Dim i As Integer
    Dim wsh As Worksheet
          
    Set wsh = Worksheets("List with Weights")
    Application.ScreenUpdating = False
          
    i = 2
    
    While (wsh.Cells(i, 1)) <> ""
        wsh.Cells(i, 1).FormulaR1C1 = "='Sample Weight'!RC[0]"
        wsh.Cells(i, 2).FormulaR1C1 = "='Sample Weight'!RC[0]"
        wsh.Cells(i, 3).FormulaR1C1 = "='IS Weight'!RC[-1]"
        i = i   1
    Wend
     
    ' Selects cell down 1 row from active cell.
    ActiveCell.Offset(1, 0).Select
    Columns("A:C").Select
    Columns("A:C").EntireColumn.AutoFit
    Application.ScreenUpdating = True
    Range("A1").Select
End Sub
 

Ответ №1:

Если я вас правильно понял, цикл не нужен. Это то, что вы пытаетесь?

 Option Explicit

Sub Sample()
    Dim wsThis As Worksheet
    Dim wsThat As Worksheet
    Dim wsOther As Worksheet
    
    '~~> Set your relevant worksheets
    Set wsThis = ThisWorkbook.Sheets("List with Weights")
    Set wsThat = ThisWorkbook.Sheets("Sample Weight")
    Set wsOther = ThisWorkbook.Sheets("IS Weight")
    
    '~~> Find the last row in Col A of Sample Weight worksheet
    Dim wsThatLRow As Long
    wsThatLRow = wsThat.Range("A" amp; wsThat.Rows.Count).End(xlUp).Row
    
    '~~> Insert the formula in 1 go in the relevant range
    With wsThis
        .Range("A2:A" amp; wsThatLRow).Formula = "='" amp; wsThat.Name amp; "'!A2"
        .Range("B2:B" amp; wsThatLRow).Formula = "='" amp; wsThat.Name amp; "'!B2"
        .Range("C2:C" amp; wsThatLRow).Formula = "='" amp; wsOther.Name amp; "'!B2"
    End With
End Sub
 

Комментарии:

1. Привет, это работает так, как надеялся, что это остановится прямо там, но значение в столбце C равно значению из столбца B листа «IS Weight»

2. Я обновил сообщение. Возможно, вам придется обновить, чтобы увидеть это. Дайте мне знать, если это то, что вы хотите?

3. Кроме того, я предполагаю, что последняя строка будет одинаковой в Sample Weight и IS Weight . Если нет, то пересчитайте последнюю строку, используя wsThatLRow = wsOther.Range("A" amp; wsOther.Rows.Count).End(xlUp).Row , прежде чем использовать ее в .Range("C2:C" amp; wsThatLRow).Formula = "='" amp; wsOther.Name amp; "'!B2"

4. ТОЧНО! Большое вам спасибо 🙂 🙂 🙂 Ну, на 2 листах одинаковое количество строк

5. Рад быть полезным 🙂