Я все еще новичок в VBA и изучаю - мне нужно скопировать значения (скажем, диапазон A в рабочей тетради A) и перенести значения в диапазон B в рабочей тетради B. Значения необходимо транспонировать и слегка реструктурировать (1 столбец для перемещения в первый столбец).
Для меня я вижу два способа сделать это, которые удовлетворяют потребности.1.) Перестройте диапазон А по вертикали на новый лист, затем перенесите значения из полного диапазона и добавьте в конец рабочей книги B. Это создает больше данных, но устраняет необходимость в поиске заголовка.
2.) Сохранить диапазон A / рабочую книгу в формате и использовать циклы / массивы?чтобы найти значения, если в заголовке в книге A существует новое значение, добавьте значение в строку заголовка в книге B, в противном случае найдите соответствующий заголовок значения в книге A для книги B и передайте значение.Это позволяет консолидировать данные, что мне нравится, но гораздо сложнее, чем то, что я знаю, как делать.
Мой текущий код немного беспорядок.Первоначально я пытался сделать вариант 1 выше, но начиная со слепого копирования / передачи значений в качестве начала, затем изменил, чтобы оптимизировать поток .... и это использует специальную транспонирование копирования / вставки, которое очень медленно.Мне тяжело, так как я все еще не знаком с Loops, а точнее - с функцией транспонирования.Я слышал, что он должен быть установлен в виде массива.
Я не ищу кого-то, кто мог бы решить код для меня, просто нужна помощь в понимании Loop / Transpose Array.
Sub test()
Dim Cell As Range
Dim lastRow As Long
Dim lastRow2 As Long
Dim LastColumn As Long
Dim LastColumn2 As Long
Dim TargtRng As Range
Dim TargtRng2 As Range
Dim TargtRng3 As Range
Dim TargtRng4 As Range
'Chronology
With Sheets("Consolidated Change List")
For Each Cell In .Range("A4:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
If Cell.Value <= Range("F2").Value Then
' Copy initial data set
lastRow = Worksheets("Sheet1").Cells(Rows.Count, "F").End(xlUp).Row + 1
Set TargtRng = .Range(Cell, Cell.Offset(, 8))
Worksheets("Sheet1").Cells(lastRow, "A").Resize(TargtRng.Rows.Count, TargtRng.Columns.Count).Value = TargtRng.Cells.Value
' Copy and Transpose other Rms/Rates
'Target Range 2 is the Room types to be transposed
LastColumn = Worksheets("Consolidated Change List").Cells(3, Worksheets("Consolidated Change List").Columns.Count).End(xlToLeft).Column
Set TargtRng2 = Worksheets("Consolidated Change List").Range(Range("J3"), Range("J3").End(xlToRight))
TargtRng2.Copy
Worksheets("Sheet1").Cells(lastRow, "H").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
' Target Range 3 is the cell row within loop, new rates to transpose
'LastColumn2 = .Cells(Cell, Worksheets("Consolidated Change List").Columns.Count).End(xlToRight).Column
Set TargtRng3 = .Range(Cell.Offset(, 10), Cells(Cell, LastColumn))
TargtRng3.Copy
Worksheets("Sheet1").Cells(lastRow, "I").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
' Target Range 4 is the Change order through Segment to be copied over
Set TargtRng4 = .Range(Cell, Cell.Offset(, 7))
lastRow2 = Worksheets("Sheet1").Cells(Rows.Count, "H").End(xlUp).Row
Worksheets("Sheet1").Range(Cells(lastRow, "A"), Cells(lastRow2, "G")).Value = TargtRng4.Cells.Value
End If
Next Cell
End With
End Sub
Требования 
Снимок экрана текущего - книга A 
Снимок экрана ожидаемого транспонирования для варианта 1 выше 
Требования:
- Копирование значенийв диапазоне A из книги A и скопируйте / транспонируйте (предпочитайте значения переноса, а не вставляйте специально для скорости) в книгу B, диапазон B
- В этом примере файла не изображены 2 рабочие книги;визуальная справка о том, что находится в рабочей книге A (текущая вкладка) и ожидаемом значении в рабочей книге B (ожидаемая транспонированная вкладка)
- Могут быть пробелы с диапазоном A под значениями заголовка. Эти пробелы следует игнорировать / пропускать как ненужные
- Диапазон B в рабочей книге B немного реструктурирован, поскольку столбец Dt_TmStamp перемещен в первый столбец
- В идеале разумная логика для нахождения точного соответствия для передачи по сравнению со слепым копированием / транспонированием.Может сохранить структуру в диапазоне от A и рабочей книге A до рабочей среды B, если включены следующие маркеры:
- VBA потребуется найти соответствующее значение заголовка в рабочей книге B - это может произойти из-за того, что значения заголовка могут измениться (порядок сортировки,старые значения удалены, новые значения добавлены)
- Потребуется немного изменить структуру и сохранить столбец Dt_TmStamp, который будет первым столбцом в рабочей книге B
- Значения заголовка останутся в первой строке в рабочей книге B /RangeB - однако, новые значения должны быть добавлены в конце, старые значения могут быть сохранены
- Таблица увеличивается в рабочей книге B по мере добавления значений;нужно будет добавить в последний ряд.Значения заголовка остаются в первом ряду
Спасибо!