• ベストアンサー

excel 串刺しセルの値を列に並べる

excel2000を利用しています。 シートが10枚以上あるexcelブックがあるのですが、これらのシートのフォーマットは全て同じで、値がそ れぞれ独自に入っています。 一番左側のsheet1は無地です。 そして、左から2sheet目以降の全てのシートで、それぞれ 指定セル を sheet1のA列に縦にデータを保管したいです。 そして、同様にまた違う指定セルをB列、また違うセルをC列・・・・ といった具合で全シートの複数の項目をsheet1にリスト形式でまとめたいです。 どうかご教授をお願いいたします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

VBAの質問でしょうか? 各シートの指定セルが仮にA1、B1、C1だとしたら Sub test01()     Dim i As Long     For i = 2 To Sheets.Count         With Sheets(1)             .Cells(i - 1, "A").Value = Sheets(i).Range("A1")             .Cells(i - 1, "B").Value = Sheets(i).Range("B1")             .Cells(i - 1, "C").Value = Sheets(i).Range("C1")         End With     Next i End Sub で大丈夫だと思います。 該当のBOOKの標準モジュールに書いてくださいね。

puyopa
質問者

お礼

回答ありがとうございました。 とても複雑なコードを予想していましたが、意外にシンプルで驚きました。 おかげさまでやりたいことが出来そうです。ありがとうございました。

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

>しかし、やはりシート名がsheet()で限定されるというのが、関数の限界でしょうか。  例えば、SheetA、SheetB、SheetC、SheetD、SheetE、SheetF、SheetG、SheetH、SheetIという名称のシートがあり、Sheet1のA2セルにはA列に表示するデータの項目名が入力さていて、Sheet1のA3以下に、SheetA~SheetIのA1セルの値を自動的に表示させるものとします。  まず、適当な空きシートにSheetA~SheetIの各シートのシート名の一覧表を作成します。  空きシートが無ければ、新たにシートを作成して下さい。  ここでは仮に、「補助シート」という名称のシートを作成するものとします。  そして、補助シートのA2以下にSheetA~SheetIの各シートのシート名を、空欄を空けずに並べて下さい。  次に、Sheet1のA3セルに、次の関数を入力して下さい。 =IF(ISERROR(INDIRECT(INDEX(補助シート!$A:$A,ROWS($2:3))&"!A1")),"",INDIRECT(INDEX(補助シート!$A:$A,ROWS($2:3))&"!A1"))  次に、Sheet1のA3セルをコピーして、Sheet1のA4以下に貼り付けて下さい。

puyopa
質問者

お礼

回答ありがとうございました。 恐れ入りました。 勉強になりました、ありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

>excel2000を利用しています。 では,ちょっとタイプの違うマクロで。 手順: 挿入メニューの名前の定義で  名前 シート一覧  参照範囲 =GET.WORKBOOK(1) と登録する >2sheet目以降の全てのシート シート1に =INDIRECT(INDEX(シート一覧,ROW(A2))&"!C5") のように記入し,下向けにシートの枚数だけコピーする #面倒でなければ =IF(ROW(A2)>COUNTA(シート一覧),"",INDIRECT(INDEX(シート一覧,ROW(A2))&"!C5")) などのように一手間入れても勿論構いません。 #シート名の配列を取得するので,シート名が「1,2,3」の順になってなくてもシートのある順で結果を得ます。 もっともふつーのマクロでシート名一覧だけを例えばA列セルに書き出させて,INDIRECT関数を使った方が簡単は簡単です。 A2以下に Sheet2 のように書き出してあれば ついでにB1以右に欲しいセル番地を「B2」とか「C5」のように列記しておけば B2: =INDIRECT($A2&"!"&B$1) を下に右にコピー といった具合に。 オマケ: sub macro1()  dim i  for i = 2 to worksheets.count   worksheets(1).cells(i, "A") = worksheets(i).name  next i end sub

puyopa
質問者

お礼

ありがとうございました。 すごいですね。そんな機能があったなんて知りませんでした。 絶句してしまいます。excelの世界がいかに深くて、自分がとても未熟だと思い知らされます。 ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 各Sheet名はSheet2・Sheet3・・・のようになっているとします。 仮に各SheetのA1セルをA列に表示する場合は Sheet1のA1セルに =INDIRECT("Sheet"&ROW(A2)&"!A1") としてオートフィルで下へコピーではどうでしょうか?m(_ _)m

puyopa
質問者

お礼

ありがとうございました。 偶然にもNO1の方と似ている式ですがROWの部分で若干異なりますが、 セルを単一で指定しているので分かりやすいです。 勉強になりました。ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

例えば、Sheet2以下のシートのD2セルを一覧表示するなら以下のような数式を入力して下方向にオートフィルしてください。 =INDIRECT("Sheet"&ROW(2:2)&"!D2")

puyopa
質問者

お礼

ありがとうございます。 関数でできるなんて思いもよらなかったので驚きです。 しかし、やはりシート名がsheet()で限定されるというのが、関数の限界でしょうか。 勉強になりました。ありがとうございました。