2017-08-04 6 views
0

Excelの垂直リストにデータテーブルを変換する方法を誰かが助けてくれますか?テーブルデータをExcelの垂直リストに変換

私はマクロを使用しようとしましたが、引き続きトリップし続けて、どこが間違っているのか分かりません。

データの大きなテーブルをダウンロードしていますが、そのデータを別のマクロのリストに入れて作業する必要があります。どのくらいのデータがあるのか​​は手動で行うのは実用的ではないので、すばやい方法があるのだろうかと思っています。

ありがとうございます!

+0

ない状況を修正しようとする試みの基に多くのエラーの説明がありますが、(https://stackoverflow.com/questions/20541905/convert-matrix-to-3-column- [試みた]していますtable-reverse-pivot-unpivot-flatten-normal/20543651#20543651)? – pnuts

+0

マクロを知っている場合は、データ範囲を数えて転置に使用してください。 – Shrikant

+0

シートにはいくつのデータ列がありますか?シートの外観を見せていただけますか? –

答えて

1

これは1つの数式で実行できます。別のセル(または別のシート)で

Spreadsheet with 8 columns and 15 rows

:あなたはこの(それが終わる場所を見ることができるように、私は、セルの位置を示すダミーデータに入れている)ように見えるスプレッドシートを持っていると仮定次の式を置く:

=OFFSET($A$1,INT((ROW(1:1)-1)/8),(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8)) 

シートが8列を持っているので、それは多かれ少なかれ、スプレッドシートを持っている列の数にこれらの8代を変更します持っていた場合は式中に2つの8のは、あります。

は、その後、あなたがダウンして数式をコピーして、あなたはこれを取得する:それは、行と列の参照を使用してセルの内容を取得するオフセット式を、使用しているため

Sheet with formula in

それは動作します。

INT((ROW(1:1)-1)/8) 

この部分はコピーされる8列のための部屋を作り、新しい式の8行が作成されるまでの行数が1から2などに移動しませんを確認します。

(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8) 

この部分は、列を取り、ダウンMOD関数が0に戻ったときに私たちは列8に到達するまで、私たちは、行くと私たちは、元のシート上のデータの新しい行を開始する行ごとに1に追加されます。

0

何かこれは、yaのためのトリックを行う必要があります。後

enter image description here

::前

Sub TransposeThis() 

Set Rng = Sheets("sheet1").Range("B2:B6") 'Input range of all fruits 
Set Rng_output = Sheets("sheet2").Range("B2") 'Output range 

For i = 1 To Rng.Cells.Count 
    Set rng_values = Range(Rng.Cells(i).Offset(0, 1), Rng.Cells(i).End(xlToRight)) 'For each fruit taking the values to the right which need to be transposed 

    If rng_values.Cells.Count < 16000 Then 'To ensure that it doesnt select till the right end of the sheet 
     For j = 1 To rng_values.Cells.Count 
       Rng_output.Value = Rng.Cells(i).Value 
       Rng_output.Offset(0, 1).Value = rng_values.Cells(j).Value 
       Set Rng_output = Rng_output.Offset(1, 0) 'Shifting the output row so that next value can be printed 
     Next j 
    End If 
Next i 

End Sub 

enter image description here

それとも、あなただけ少し奇妙に聞こえる1つのベクトルにすべてを移調したい場合は、しかし、そのようなことが必要な場合は、以下のスクリプトを試すことができます。

Sub TryThis() 
    Dim rRow   As Range 
    Dim nCol   As Long 
    Dim iOfs   As Long 

    Application.ScreenUpdating = False 
    With Sheet1.Range("A1:E20") 
    nCol = .Columns.Count 
    For Each rRow In .Rows 
     rRow.Copy 
     Sheet2.Range("A2").Offset(iOfs).PasteSpecial Transpose:=True 
     iOfs = iOfs + nCol 
    Next rRow 
    End With 
    Application.ScreenUpdating = True 
End Sub 
関連する問題