Транспонировать данные в стиле Шаг 2? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть этот код, который создает всеобъемлющий массив на основе диапазона набора данных Data.

Я хочу, чтобы он транспонировал блоки строк (всегда каждые две строки Step -2) и помещал следующий блок точно так же, как offset(1) из того, что был в последний раз транспонирован.

Например: Rows 2-3 будет в E1:D134, rows 4-5 будет в E135:D169 и т. Д.

Этот код использовал для печати отдельных массивов на листах и ​​сохранения их, но я немного обрезал его, чтобы он напечатал первые две транспонированные строки (до двух столбцов), начиная с E1, и затем следующие две строки снизу будут смещены к следующей доступной точке внизу в столбцах E: D.

Option Explicit
Sub Main()
  Dim wb As Workbook
  Dim Data, Last, Mgr
  Dim i As Long, j As Long, k As Long, a As Long
  Dim Dest As Range
  Set wb = ThisWorkbook
  Set Dest = wb.Sheets("Sheet2").Range("E1")
  With ThisWorkbook.Sheets("Sheet3")
    Data = .Range("ed2", .Range("A" & Rows.Count).End(xlUp))
  End With
  wb.Activate
  Application.ScreenUpdating = False
  For i = 1 To UBound(Data)
    If Data(i, 1) <> Last Then
      If i > 1 Then
        Dest.Select
    End If
      Last = Data(i, 1)
      j = 0
    End If
    a = 0
    For k = 1 To UBound(Data, 2)
      Dest.Offset(a, j) = Data(i, k)
      a = a + 1
    Next
    j = j + 1
  Next
End Sub

Как бы я обозначил это на основе приведенного выше кода?

1 Ответ

0 голосов
/ 06 марта 2019

Есть несколько способов добиться этого.Это может быть мне ближе всего к вашему подходу (, если я правильно понял, чего вы хотите достичь ), может попробовать

Sub Main()
  Dim wb As Workbook
  Dim Data, Last, Mgr
  Dim Rw As Long, Col As Long
  Dim i As Long, k As Long, j As Long
  Dim Dest As Range, TmpArr As Variant
  Set wb = ThisWorkbook
  Set Dest = wb.Sheets("Sheet2").Range("E1")
  With ThisWorkbook.Sheets("Sheet3")
    Data = .Range("ed2", .Range("A" & Rows.Count).End(xlUp))
  End With


Rw = -1
For i = LBound(Data, 1) To UBound(Data, 1) Step 2
k = 1
If i = UBound(Data) Then k = 0
    For Col = LBound(Data, 2) To UBound(Data, 2)
    Rw = Rw + 1
        For j = 0 To k
        Dest.Offset(Rw, j).Value = Data(i + j, Col)
        Next j
    Next Col
Next i

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