重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

excel2000を利用しています。

シートが10枚以上あるexcelブックがあるのですが、これらのシートのフォーマットは全て同じで、値がそ
れぞれ独自に入っています。

一番左側のsheet1は無地です。

そして、左から2sheet目以降の全てのシートで、それぞれ 指定セル を sheet1のA列に縦にデータを保管したいです。

そして、同様にまた違う指定セルをB列、また違うセルをC列・・・・

といった具合で全シートの複数の項目をsheet1にリスト形式でまとめたいです。

どうかご教授をお願いいたします。

A 回答 (5件)

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の標準モジュールに書いてくださいね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

とても複雑なコードを予想していましたが、意外にシンプルで驚きました。

おかげさまでやりたいことが出来そうです。ありがとうございました。

お礼日時:2011/08/28 21:42

>しかし、やはりシート名が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以下に貼り付けて下さい。
「excel 串刺しセルの値を列に並べる」の回答画像5
    • good
    • 1
この回答へのお礼

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

お礼日時:2011/09/02 00:21

>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
    • good
    • 0
この回答へのお礼

ありがとうございました。

すごいですね。そんな機能があったなんて知りませんでした。

絶句してしまいます。excelの世界がいかに深くて、自分がとても未熟だと思い知らされます。

ありがとうございました。

お礼日時:2011/09/02 00:23

こんばんは!


各Sheet名はSheet2・Sheet3・・・のようになっているとします。

仮に各SheetのA1セルをA列に表示する場合は
Sheet1のA1セルに
=INDIRECT("Sheet"&ROW(A2)&"!A1")
としてオートフィルで下へコピーではどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

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

勉強になりました。ありがとうございました。

お礼日時:2011/08/28 21:40

例えば、Sheet2以下のシートのD2セルを一覧表示するなら以下のような数式を入力して下方向にオートフィルしてください。



=INDIRECT("Sheet"&ROW(2:2)&"!D2")
    • good
    • 1
この回答へのお礼

ありがとうございます。

関数でできるなんて思いもよらなかったので驚きです。

しかし、やはりシート名がsheet()で限定されるというのが、関数の限界でしょうか。

勉強になりました。ありがとうございました。

お礼日時:2011/08/28 21:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!