Excel で 1 行を複数行に変換する

Excel で 1 行を複数行に変換する

複数の配送センターで利用可能な複数のアイテムがあります(つまり、多対多の関係)。現在、アイテムごとに1行、各配送センターごとに1列あります。アイテムの行のセル バツ配送センターの列 はい配送センターのコードが記載されているはいアイテムの場合 バツそこに配送センターが存在せず、存在しなければ空白になります。複数の配送センターがある商品には、複数の配送センター コード (それぞれの列に) があります。現在のシートは次のようになります。

    |   A    |         B         |*|                      S-AJ                      |
1   |  ID #  |   Description     |…|              Distribution Centers              |
2   |   17   |   Ginkgo Biloba   |…|      |      |      |      |      |      |  SE  |
3   |   42   |   Ginseng         |…|      |  MP  |  MS  |      |  NW  |      |      |

列から にCは、RUPC コード、コスト、価格など、この質問とは関係のないアイテムのその他の属性が含まれています。実際のシートには、列 から にわたる 18 の配送センターがあります。SこのAJ例を Stack Exchange のウィンドウに収めるために、この列を減らしました。

1 行につき 1 つの配送コードを持つ単一の配送センター列を用意し、現在複数のコードが含まれているアイテムの必要に応じて行を複製する必要があります。結果は次のようになります。

    |   A    |         B         |*|   S  |
1   |  ID #  |   Description     |…|  DC  |
2   |   17   |   Ginkgo Biloba   |…|  SE  |
3   |   42   |   Ginseng         |…|  MP  |
4   |   42   |   Ginseng         |…|  MS  |
5   |   42   |   Ginseng         |…|  NW  |

ここで、セルA3:R3A4:R4、にはA5:R5同じ情報が含まれます。

これを実行する方法として思いつくのは、時間がかかりますが、品目番号を複数の行にコピーし、配送コードのある列で各配送センターで利用できる品目のコードを変更することだけです。これを 900 品目に対して実行します。もっと簡単な方法はありますか?

答え1

  1. 新しいシートを作成します。ヘッダー行、列の幅、および書式をコピーしますが、列T-はコピーしないでください。シート全体をコピーしてから、1 以外のすべての行を削除し、列-AJの結合を解除するのが最も簡単な場合があります。SAJ
  2. Sheet1まず、 の各アイテム行をに 18 回複製しますSheet2 (各配送センターにつき 1 回)。 と入力します。  =INDEX(Sheet1!A:A, INT((ROW()-2)/18)+2, 1) & ""は、 の行 2 ~ 19を の行 2 に、 の行 20 ~ 37 を の行 3 にマッピングします。 は、の空白セルを参照するときに Excel に空白を表示します。 に空白がない場合は、これを省略できます。 この特定のソリューションが気に入らない場合は、 の他のソリューションのいずれかを使用できます。 Sheet2!A2INT((ROW()-2)/18)+2Sheet2Sheet1Sheet2Sheet1& ""Sheet1Sheet1Excel で空白セルを参照すると空白が表示される

    これを右のセルまでドラッグ/入力しますR2

  3. =INDEX(Sheet1!$S:$AJ, INT((ROW()-2)/18)+2, MOD(ROW()-2, 18)+1) に と入力します。これは、上記の数式とSheet2!S2同じ の行を参照しますが、から値を取得し、 から値を取得し、 から値を取得します、というように行われます。空白には が表示されます。Sheet1Sheet2!S2Sheet1!S2Sheet2!S3Sheet1!T2Sheet2!S4Sheet1!U20
  4. 行全体を選択しA2:S2、下にドラッグ/フィルしてすべてのデータを取得します。これは、 にある行数の 18 倍Sheet1、つまり 18×900=16200 になります。
  5. 値をすべてコピーしSheet2て貼り付けます。
  6. 列をフィルターしますS。ゼロのみを表示します。すべての行を削除します (行 1 以外)。フィルターを削除します。

終わり。

答え2

解決は簡単だが、手作業が増える: 一意の ID を x 回コピーし (x は行に変換する列の数)、各反復で行に変換する列に vlookup を適用します。

関連情報