2017-08-20 5 views
0

Excelマトリックス "A"をテーブル "B"に変換する必要がありますが、VBAは使用しません。好ましくは、「逆ピボット」、「ピボット解除」、「平坦化」、「正規化」... Picture of what I have and need to receive 興味がある正確なトピックは見つかりませんでした。 ここには私が探しているものが記載されています以下のための、しかし、VBAで行わ:VBAのない excel macro(VBA) to transpose multiple columns to multiple rows とここが、唯一の1列が保持され、繰り返される: Convert matrix to 3-column table ('reverse pivot', 'unpivot', 'flatten', 'normalize')VBA(データピボットテーブルとピボットグラフレポート)を使用せずに行列を4列テーブルに変換する方法

+0

[複数の列を1つの列に結合する](https://stackoverflow.com/questions/33441550/combining-multiple-columns-into-a-single-column)が参考になります。 – pnuts

答えて

0

は、数量の二組に焦点をあて、あなたが何をしたいのかの本質は、「テーブルの変換であります3行×3行のテーブル "B"に3行×N行と1列の "A"を割り当てる。

テーブル "B"の左側(または右側)にある2つのヘルパー列を使用して、テーブル "B"の各行に一致する "A"の行と列を識別できます。これらのヘルパーの列はペア(1,1)を含む最初の行から開始し

Row Col 
1 1 
2 1 
3 1 
    ...  
N 1 
1 2 
2 2 
3 2 
    ... 
N 2 
1 3 
2 3 
3 3 
    ... 
N 3 

のようになります。ダウンコピーした場合、次の行のペアの=IF()式のカップルを作成するための簡単な作業です残りを生成します。行と列の値のペア。

これらのペアは、実際にはテーブルBの行を生成するために必要なすべてを提供します。テーブル「B」で

Customer

Product Code列はtableAColテーブル内の対応する列Customer用「」例えば$B$3:$B$13を表す=INDEX(tableAcol,Row)を用いて導出されます。 Quantity列は、=INDEX(tableAquantities, Row, Col)を使用して生成されます。ここで、tableAquantitiesは、数量値を含むテーブル "A"のN行と3列の範囲です。 Month列は、 "January"、 "February"、 "March"の値を含む連続した行または列として配置された3つのセルの範囲を必要とし、=INDEX(months, Col)を使用してテーブル "B"で生成されます。

明示的にヘルパー列を追加せずに同じ結果を達成する別の方法があります。これは、=ROW()関数を使用して、テーブル "B"の各行のデータ行番号を計算し、これを対応する(Row,Col)ペアの2つの値を計算するためのさらなる式で使用します。このアプローチは、テーブル「B」を生成するためのいくつかの面倒でかなり反復された式を導く。ヘルパー列を避ける理由がない場合は、それらを使用してください - より簡単で理解しやすいアプローチを示します。

関連する問題