これは、配列数式を使用して実現できます。データが列AとワークシートにあるBとします。ワークシートのセルに次の数式を入力します。CWS1A1WS2
=INDEX('WS1'!$A:$A,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1)))
この数式をCtrl- Shift-で確認Enterして、これが配列数式であることを示します。{}その結果、その周りに中括弧が表示されます。
同様に、セルB1とC1ワークシートに次の配列数式を入力しWS2ます。
=INDEX('WS1'!$B:$B,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1)))
=INDEX('WS1'!$C:$C,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1)))
次に、セルA1を選択B1しC1、ワークシートWS2で、右下隅を必要なだけ下にドラッグして、すべての行を含めます。下にドラッグしすぎると、 が表示されることに注意してください#NUM。これを回避するには、次のように数式を数式でラップしIFERROR()ます (Excel 2007 以降の場合)。
=IFERROR(INDEX('WS1'!$A:$A,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1))),"")
列のWS2値が調整されると、ワークシートの列の内容が自動的に更新されます。AWS1
より効率的なソリューションでは、ヘルパー列を使用します。たとえば、 on worksheet としますWS3。最初に、関連する行のインデックスを次の式で計算します ( の配列式としてA1)。
=IFERROR(SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1)),"")
次に、次の式をB1、C1およびD1(通常、配列式ではありません)に入力します。
=IF(ISBLANK($A1),"",INDEX('WS1'!$A:$A,$A1))
=IF(ISBLANK($A1),"",INDEX('WS1'!$B:$B,$A1))
=IF(ISBLANK($A1),"",INDEX('WS1'!$C:$C,$A1))
選択して下にドラッグします。
アップロードされたワークブックの例をここで見つけることができます