これは、配列数式を使用して実現できます。データが列A
とワークシートにあるB
とします。ワークシートのセルに次の数式を入力します。C
WS1
A1
WS2
=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
値が調整されると、ワークシートの列の内容が自動的に更新されます。A
WS1
より効率的なソリューションでは、ヘルパー列を使用します。たとえば、 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))
選択して下にドラッグします。
アップロードされたワークブックの例をここで見つけることができます