2016-03-16 4 views
-2

В настоящее время я работаю над большим набором данных, загружаемых с Morningstar Direct. Мне нужна помощь с макросом, который может изменить экспортированный документ с горизонтального на вертикальный. Я безуспешно пробовал все функции в excel, поэтому мне кажется, что для этой операции нужен макрос.VBA transpose несколько раз

Например:

От:

Data1-2000 Data1-2001 Data1-2002 ... Data1-2016 Data2-2000 Data2-2001 and so on 

To:

Data1-2000 
Data1-2001 
    ... 
Data1-2016 
Data2-2000 
Data2-2001 
    ... 

Каждый datavariable идет от 2000 до 2016 года мы имеем более 500 линеечки, что нужно такое же преобразование. Есть ли какой-нибудь код VBA, который может сделать это для меня? Это спасет мою жизнь (по крайней мере, мою Пасху)!

** Addedum от ответа поста OP в:

Я сделал этот макрос:

Sub Flip() 
' 
' Flip Macro 
' 
    Sheets("S&P 500 Constituents").Select 
    Range("I2:X2").Select 
    Selection.Copy 
    Sheets("Sheet1").Select 
    Range("D2").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
    Sheets("S&P 500 Constituents").Select 
    Range("AB2:AQ2").Select 
    Selection.Copy 
    Sheets("Sheet1").Select 
    Range("E2").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
    Sheets("S&P 500 Constituents").Select 
    Range("AR2:BG2").Select 
    Selection.Copy 
    Sheets("Sheet1").Select 
    Range("F2").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
    Sheets("S&P 500 Constituents").Select 
    Range("BH2:BW2").Select 
    Selection.Copy 
    Sheets("Sheet1").Select 
    Range("G2").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
    Sheets("S&P 500 Constituents").Select 
    Range("BX2:CM2").Select 
    Selection.Copy 
    Sheets("Sheet1").Select 
    Range("H2").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 

End Sub 

Как вы можете видеть все, что берется из строки 2 в моем S & P500 листа, а затем перенесены в sheet1.

Как я могу сделать этот макрос повторять ту же операцию в строке 3, 4, 5 ... 518?

ответ

1

Попробуйте INDEX function.

=INDEX($1:$1, 1, ROW(1:1)) 

index_dumbass

Добавление: VBA strip & transpose

сбросы значения из S & P 500 трехсторонний рабочий лист в двух-размерном варианты массива и обработках переориентации в памяти на второй массив был бы наиболее целесообразным методом.

Sub Flip() 
' Flip Macro 
    Dim v As Long, val As Variant, vals As Variant 
    Dim a As Long, b As Long, stp As Long 

    stp = 16 
    ReDim val(1 To stp, 1 To 1) 

    With Worksheets("S&P 500 Constituents") 
     With .Range(.Cells(2, "I"), .Cells(Rows.Count, "CM").End(xlUp)) 
      vals = .Value2 
     End With 
    End With 

    With Worksheets("Sheet1") 
     For a = LBound(vals, 1) To UBound(vals, 1) 
      For b = LBound(vals, 2) To UBound(vals, 2) - stp Step stp 
       For v = 1 To stp 
        val(v, 1) = vals(a, b - ((b > 1) * 3) + (v - 1)) 
       Next v 
       .Cells(2, "D").Offset((a - 1) * stp, Int(b/stp)).Resize(stp, 1) = val 
      Next b 
     Next a 

    End With 

End Sub 

Я намеренно избегать использования родного TRANSPOSE function, как это имеет ограничения по размеру, которые больше подходят к .xls, чем в формате XLSX. Математика, которая обеспечивает циклическую переориентацию, была получена из первой строки вашего образца кода.

Смежные вопросы