• ベストアンサー

EXCEL2003

sheet1にカード形式で注文書のようなものが入力されています(画像参照) 新しく注文書を印刷する場合、シートごとコピーし、中身を消して印刷しています。 これを元に別のシートに一覧表を作成したいのですが、 かなりのシート数があるので、 手入力したり、1つずつ参照したりするのは避けたいです。 何かよい方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>かなりのシート数があるので、 『かなり』なシートが1つのBookにあるのでしょうか? また、注文書1枚につき一覧表1行にデータを集約するのでしょうか? そうだと仮定した場合の一案ですが。 まず一覧表のA列にシート名を入力します。 A2,A3...とタテに入力。 1行目を項目行として、2行目から一覧表にするとします。 B2セルには =INDIRECT("'"&$A2&"'!A3") 以下 C2 =INDIRECT("'"&$A2&"'!C4") D2 =INDIRECT("'"&$A2&"'!K1") E2 =INDIRECT("'"&$A2&"'!C16") F2 =INDIRECT("'"&$A2&"'!G16") : INDIRECT関数を使って、シート名を参照しながら一覧表にしたいセルアドレスを記述します。 参照数式を1行だけ作成すれば、あとは必要なデータ数を下にコピーします。 その後[コピー]-[形式を選択して貼り付け]-[値]で。 シート名の入力が面倒なら、左端にシートを追加してシート名を書き出すマクロなど。 Sub test()   Dim i As Long      With Worksheets.Add(before:=Worksheets(1))     For i = 2 To Worksheets.Count       .Cells(i, 1).Value = Worksheets(i).Name     Next   End With End Sub 余談ですけど、今後は 「カード形式で入力」→「一覧表形式で保存。」 よりも 「一覧表形式で入力」→「カード形式で印刷。」(INDEX(MATCH関数などで必要なデータを引っ張ってくる) のほうがラクでしょうね。 ただ、「カード形式で入力」→「一覧表形式で保存」の部分をマクロ化するなら入力し易くなるのかな。 例えば、"入力用"シートの1行目を印刷範囲外にして、 A1 =A3 B1 =C4 : などと必要データを参照させておけば Sub test2()   With Sheets("一覧表")     .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 15).Value _       = Sheets("入力用").Range("A1:O1").Value   End With End Sub この程度のマクロで、実行ごとに"入力用"シートから"一覧表"シートの最下行にデータを蓄積していきます。

nyakuy
質問者

補足

質問文がわかりづらくてすみません・・・! end-uさんが書いているとおり、 1つのbookにSheetが60ぐらいあり、同じようなbookが5つあります。 >注文書1枚につき一覧表1行にデータを集約するのでしょうか? そうです。 細かく教えていただきありがとうございます。 上記を参考にして試してみます。

関連するQ&A

専門家に質問してみよう