Копирование значений ячеек из изменяющегося источника в другой лист - PullRequest
0 голосов
/ 12 февраля 2019

Это немного похоже на предыдущие вопросы, которые я задавал, но я не понял, как решить эту проблему.В настоящее время у меня есть две таблицы, на первой у меня есть наборы из двух столбцов, которые имеют несколько сотен строк под ними.Я настроил его так, что пользователь может добавлять дополнительные наборы этих столбцов по мере необходимости, а формулы / форматы переносятся по мере необходимости.Может быть любое количество этих наборов столбцов, хотя они всегда будут начинаться в столбце «D», а окончательный набор всегда будет на 10 столбцов перед последним столбцом таблицы.

Теперь я собираюсь перенести заголовки для этих новых столбцов (которые всегда находятся в строке 2) на другой лист.Кроме того, я привожу значения, найденные в 4 строках каждого из этих наборов столбцов (все из которых объединены), так что это еще четыре значения на набор из двух столбцов.Идея, лежащая в основе кода ниже, заключается в том, что я беру значение заголовка вверху, ищу строку, в которой оно есть в одном столбце другого листа, и добавляю его, если оно не найдено.Затем он должен использовать номер строки, в которой он был найден / добавлен, и установить ячейки справа (4 столбца), равные четырем другим значениям, упомянутым ранее.

Я создал цикл while, чтобы сделать это, и мойМысленный процесс заключался в том, что он делал бы это для одного набора столбцов (начиная с D2), а затем переходил к F2 и так далее.

With ws1
    lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With 

StopColumn = lastColumn - 10

' I'm trying to find the last set of columns here, no matter how many the user adds the final one will be 10 before the sheet's final column


i = 4
While i <= StopColumn
    ColumnName = ws1.Cells(2, i).Value
' I'm trying to grab the header here, it's a merged cell for both of the columns
    With ws2
        With .Range("C7", .Cells(.Rows.Count, 3).End(xlUp))
            Set foundRng = .Find(what:=ColumnName, LookIn:=xlValues, lookat:=xlPart, MatchCase:=False)
            If foundRng Is Nothing And WorksheetFunction.CountBlank(.Cells) > 0 Then Set foundRng = .SpecialCells(XlCellType.xlCellTypeBlanks)
            If foundRng Is Nothing Then Set foundRng = .Cells(.Count + 1)
        End With
    End With
    ' Trying to see if they already have that header name in the new worksheet, and if not I'm adding it to column C of the first blank row
    With foundRng
        .Value = ColumnName
        .Cells(7, 3).Resize(, 7).Value = Array(ws1.Cells(3, i).Value, _
        ws1.Cells(22, i).Value, _
        ws1.Cells(108, i).Value, _
        ws1.Cells(122, i).Value)
    End With
    ' Bringing over the cell values to the columns of the new row on the other worksheet
    ColumnName = ""
    i = i + 2
    ' I'm counting +2 to move to the next set of merged cells
Wend

Я полагаю, что, возможно, я обдумываю решение этой проблемы, я был бы признателен за любую помощь в переводе этого в рабочее состояние.Я думаю, что я мог бы использовать функцию смещения, чтобы сделать часть стоп-кода моего кода немного более эффективной, но в этом я не уверен.

1 Ответ

0 голосов
/ 12 февраля 2019

Понял, что я делаю неправильно -

.Cells(7, 3).Resize(, 7).Value 

Вместо этого должен был прочитать

.Cells(7, 2).Resize(, 4).Value 

Я забыл, что из-за того, как я структурировал 'foundRng', изменение размера будет работатьИсходя из этого, это означает, что исходный код перемещал вещи вниз на 7 ступеней / на 1 дополнительный столбец больше, чем нужно.

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