Excel VBA для транспонирования диапазона в 1 книгу, затем перенос значения во 2 книгу добавление в конец - PullRequest
0 голосов
/ 28 февраля 2019

Я все еще новичок в 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

Требования Requirements

Снимок экрана текущего - книга A Screenshot of Current - Workbook A

Снимок экрана ожидаемого транспонирования для варианта 1 выше Screenshot of Expected Transposed for option 1 above

Требования:

  1. Копирование значенийв диапазоне A из книги A и скопируйте / транспонируйте (предпочитайте значения переноса, а не вставляйте специально для скорости) в книгу B, диапазон B
  2. В этом примере файла не изображены 2 рабочие книги;визуальная справка о том, что находится в рабочей книге A (текущая вкладка) и ожидаемом значении в рабочей книге B (ожидаемая транспонированная вкладка)
  3. Могут быть пробелы с диапазоном A под значениями заголовка. Эти пробелы следует игнорировать / пропускать как ненужные
  4. Диапазон B в рабочей книге B немного реструктурирован, поскольку столбец Dt_TmStamp перемещен в первый столбец
  5. В идеале разумная логика для нахождения точного соответствия для передачи по сравнению со слепым копированием / транспонированием.Может сохранить структуру в диапазоне от A и рабочей книге A до рабочей среды B, если включены следующие маркеры:
  6. VBA потребуется найти соответствующее значение заголовка в рабочей книге B - это может произойти из-за того, что значения заголовка могут измениться (порядок сортировки,старые значения удалены, новые значения добавлены)
  7. Потребуется немного изменить структуру и сохранить столбец Dt_TmStamp, который будет первым столбцом в рабочей книге B
  8. Значения заголовка останутся в первой строке в рабочей книге B /RangeB - однако, новые значения должны быть добавлены в конце, старые значения могут быть сохранены
  9. Таблица увеличивается в рабочей книге B по мере добавления значений;нужно будет добавить в последний ряд.Значения заголовка остаются в первом ряду

Спасибо!

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