L oop, чтобы соответствовать и вставить на другой лист - PullRequest
2 голосов
/ 19 февраля 2020

У меня два листа в одной книге. Один лист («Данные») содержит данные. Данные - это Имя (столбец C) и 4 столбца (D: I) вопросов с ответами, которые соответствуют имени в строке.

Я пытаюсь скопировать ответы на листе данных для столбца D, если имя в столбце данных C соответствует имени, указанному в листе презентации.

Для столбца D:

-Если имя в столбце листа «Данные» C ячейка соответствует листу «Презентация», ячейка А1

-Вставить данные из столбца листа «Данные» D, ячейка j в лист столбца «Презентация» A ячейка k, где j и k - целочисленные счетчики, которые подсчитывают строки

enter image description here

Когда я выполняю этот код, ничего не происходит, и я действительно не понимаю, почему ,

Sub TestLogic()

Dim colD As Range
Set colD = Worksheets("Data").Range("D3:D23344")

Dim j As Integer
'j is row counter on Data
j = 3
Dim k As Integer
'k is the row counter on Presentation
k = 4

'Iterate through all cells in Column D
For Each Cell In colD

    'If Drop down on Presentation is equal to Center name on Data
    If Worksheets("Presentation").Cells(1, "A").Value = Worksheets("Data").Cells(j, "C").Value Then

        'Copy all matching cells to Presentation
            Worksheets("Data").Cells(j, "D") = Worksheets("Presentation").Cells(k, "A")

        End If
        j = j + 1
        k = k + 1
    Next Cell

End Sub

1 Ответ

0 голосов
/ 20 февраля 2020

Я согласен с ответом, который дал @BigBen. Кроме того, у вас есть k = k + 1 вне для l oop, что будет создавать пропуски каждый раз, когда оператор if then не встречается. Я переделал немного кода, чтобы помочь:

Dim rc As Long, ws_Data As Worksheet, ws_Pres As Worksheet, k As Long

Set ws_Data = ActiveWorkbook.Worksheets("Data")
Set ws_Pres = ActiveWorkbook.Worksheets("Presentation")

rc = ws_Data.Range("D" & Rows.count).End(xlUp).Row
k = 4

'Iterate through all used cells
For i = 3 To rc

    'If Drop down on Presentation is equal to Center name on Data
    If ws_Pres.Range("A1") = ws_Data.Range("C" & i) Then
        'Copy all matching cells to Presentation
        ws_Pres.Range("A" & k) = ws_Data.Range("D" & i)
        k = k + 1
    End If

Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...