Excelで商品一覧などのデータを別シートへ表示するとき、元データの1行分を複数行に分けて表示したい場面があります。例えば商品名・税込価格・税抜価格を値札形式で並べる場合、単純なコピーでは参照先が1行ずつずれてしまい、思った位置にデータを配置できないことがあります。
この記事では、1枚目のシートの商品一覧を利用して、2枚目のシートへ3行単位でデータを表示する方法を解説します。関数を使えば、コピーするだけで自動的に正しい商品情報を取得できます。
Excelで普通にコピーすると参照がずれる理由
Excelでは、セルをコピーすると参照先も規則的に変化します。例えば「=Sheet1!A2」と入力したセルを下へコピーすると、「=Sheet1!A3」「=Sheet1!A4」のように1行ずつ移動します。
しかし今回のように、1つの商品につき3行を使って表示する値札形式では、1行コピーするごとに商品データを移動させたいわけではありません。
例えば、商品一覧が以下のような状態の場合を考えます。
| A列 | B列 | C列 |
|---|---|---|
| 商品名 | 税抜価格 | 税込価格 |
| りんご | 100円 | 110円 |
| みかん | 200円 | 220円 |
値札側では「商品名」「税込価格」「税抜価格」の3行を使うため、次の商品へ移動するタイミングをExcelに指定する必要があります。
INDEX関数を使って3行ごとにデータを取得する方法
このような場合はINDEX関数を利用すると、一定間隔で元データを取得できます。
例えば2枚目のシートのA1に商品名を表示する場合、以下のような数式を入力します。
=INDEX(Sheet1!A:A,INT((ROW(A1)-1)/3)+2)
この数式では、ROW関数で現在の行番号を取得し、INT関数で3行ごとに同じ商品番号になるよう調整しています。
A1から下へコピーすると、以下のように表示できます。
| 値札シート | 参照先 |
|---|---|
| A1 | Sheet1のA2 |
| A4 | Sheet1のA3 |
| A7 | Sheet1のA4 |
これにより、3行を1セットとして商品情報を繰り返し表示できます。
商品名・税込価格・税抜価格を順番に表示する方法
値札では同じ商品について、商品名・税込価格・税抜価格を縦に並べたい場合があります。その場合は行番号によって取得する列を変える必要があります。
例えば2枚目のシートで以下のように表示します。
| セル | 表示内容 |
|---|---|
| A1 | 商品名 |
| A2 | 税込価格 |
| A3 | 税抜価格 |
この場合、CHOOSE関数やINDEX関数を組み合わせることで、3行ごとに異なる項目を取得できます。
例としてA1セルに以下の数式を入力します。
=INDEX(Sheet1!A:C,INT((ROW(A1)-1)/3)+2,CHOOSE(MOD(ROW(A1)-1,3)+1,1,3,2))
この数式では、1行目はA列(商品名)、2行目はC列(税込価格)、3行目はB列(税抜価格)を取得します。
下方向へコピーすると、商品ごとの値札データを自動作成できます。
別の方法としてINDIRECT関数を使う場合
INDIRECT関数を使って参照先を文字列で作成する方法もあります。
例えば商品番号を計算して参照する方法では、セル位置を細かく指定できるため、複雑な帳票作成で利用されることがあります。
ただし、INDIRECT関数は大量のデータではExcelの動作が重くなる場合があるため、商品数が多い場合はINDEX関数を利用する方が安定しています。
値札や帳票作成では元データを整えることも重要
Excelで自動作成する帳票は、元となる商品一覧の形式を整えておくことで管理が簡単になります。
商品一覧では1行に1商品を配置し、商品名・価格・在庫などの情報を列ごとに分けて保存すると、後から別形式の表を作成しやすくなります。
例えば商品一覧を変更すると、値札シート側も自動的に更新されるように設定しておけば、商品の追加や価格変更の作業時間を大きく減らせます。
まとめ|Excelで3行ごとにデータをコピーするなら関数で参照する
Excelで1枚目のシートの商品一覧を2枚目の値札シートへ3行単位で表示したい場合、通常のコピーでは参照が1行ずつずれるため対応できません。
INDEX関数とROW関数などを組み合わせることで、3行ごとに元データを取得し、商品名や価格を自動的に配置できます。
値札作成や帳票作成では、手作業でコピーするよりも数式による自動参照にしておくことで、データ修正時のミス防止や作業効率化につながります。


コメント