Это немного похоже на предыдущие вопросы, которые я задавал, но я не понял, как решить эту проблему.В настоящее время у меня есть две таблицы, на первой у меня есть наборы из двух столбцов, которые имеют несколько сотен строк под ними.Я настроил его так, что пользователь может добавлять дополнительные наборы этих столбцов по мере необходимости, а формулы / форматы переносятся по мере необходимости.Может быть любое количество этих наборов столбцов, хотя они всегда будут начинаться в столбце «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
Я полагаю, что, возможно, я обдумываю решение этой проблемы, я был бы признателен за любую помощь в переводе этого в рабочее состояние.Я думаю, что я мог бы использовать функцию смещения, чтобы сделать часть стоп-кода моего кода немного более эффективной, но в этом я не уверен.