プロが教えるわが家の防犯対策術!

同じフォーマットのシートが複数枚あります(行事名、場所、日時・・などすべてシートのコピーにより作成)。それを新しいシートに一覧表として、A列には行事名、B列には場所、C列には日時・・という風に1シートに表示させたいのです。シートが増えていっても一覧表の行は下へ増えていく・・といったような表作成の方法を知りたいのです。
当サイトで調べてみたところ、似たような質問があり解決できる!と思いきや、その回答の中でもまた質問をしたくてモヤモヤしています・・・
その方の回答では
【【もし、私がやるとすると、シート名をSheet1,Sheet2,.と最後に数字をつけていく名前にします。
こうやると、串刺しを入力するシートで、どこかのセルにSheet1と入れて、そのセルをマウスでドラッグすれば以下sheet2,.という一列ができあがります。 これさえすれば、後はIndirect関数で該当のセルを参照すればOKです。
たとえば、A1~A10にシート名が入っていて、各シートの C1セルを参照する場合は、
INDIRECT("'" & A1 & "'" & "!$C$1")
をB1に入れて、後はB2~B10にコピーすればいいわけです】】
だそうなのです(勝手に拝借してスミマセン)。すっごくわかりやすいのですが私にはこのINDIRECT関数の入れ方がわからないのです。
関数は探せましたがあとは1文字ずつ手入力(スペースも入れる?)すればよいのでしょうか? ("'" & A1 ???
またこの方の回答以外でも方法がありましたら教えてください(失礼ですが・・)。ほぼ初心者なのでVBAとかいう難しそうな方法は避けたいですし、アクセスではなくエクセルで作りたいのです。

A 回答 (3件)

別シートのセルの値をとってくるのはSheet1!c1などとします。


Sheet1のところが沢山あると入力が大変です。その対処法として、Sheet1の部分を変化させるために、A1:A4に人手で変化させ(列挙し)た値をつくり、オートフィル(式複写)の式の相対的変化を使います。この際はシート名をSheetx(x=1,2,3・・)にする必要はありません。
Sheet1のシート名を京都sにし、値(データ内容)は
A1:C1に
コンサート京都2003/11/2
Sheet2のシート名を大阪sにし、値は
A1:C1に
音楽会大阪2003/11/23
Sheet3のシート名を神戸sにし、値は
A1:C1に
講演会神戸2003/11/29
Sheet4のシート名を姫路sにし、値は
A1:C1に
討論会姫路2003/12/3
---------
Sheet5のA1:A4にシート名
京都s
大阪s
神戸s
姫路s
と入れます。
----
Sheet6の
A1に=INDIRECT(Sheet5!$A1&"!"&"A1")といれ下へシート数だけ複写
B1に=INDIRECT(Sheet5!$A1&"!"&"B1")といれ下へシート数だけ複写
C1に=INDIRECT(Sheet5!$A1&"!"&"C1")といれ下へシート数だけ複写
あと項目数だけ繰り返す。
------
(結果)A1:C4に
コンサート 京都2003/11/2
音楽会 大阪2003/11/23
講演会 神戸2003/11/29
討論会 姫路2003/12/3
となります。C列は書式を日付にしておくこと。
シートが増えると複写を増えたシート数だけ下へ引っ張る
必要があります。
----
Sheet6のB列、C列を複写で自動的にやる場合は
Sheet5のA1:D4を
京都sA1B1C1
大阪sA1B1C1
神戸sA1B1C1
姫路sA1B1C1
と入れ、(A1等は+を下へ引っ張ると良い)
Sheet6のA1に
=INDIRECT(Sheet5!$A1&"!"&Sheet5!B1)といれ、
A4まで複写する。
その後A1:A4を範囲指定して(したままで)C1:C3まで、右下+を横に引っ張ると良い。
---
数百もあってシート名をSheet5にリストするのが大変な場合(コピーが効かないので)
VBAですが
Sub test01()
Dim sh As Worksheet
i = 1
For Each sh In Worksheets
Worksheets("sheet5").Cells(i, "A") = sh.Name
i = i + 1
Next
End Sub
を実行して不要なSheet5やSheet6を消してください。
    • good
    • 0
この回答へのお礼

お礼が遅くなりすみません。すごく丁寧に回答していただきありがとうございます。まさに私が作りたいようなものの例を挙げていただき嬉しく思います。
みなさんが教えてくれた回答のおかげで表が完成しました。大変勉強になりました。感謝しております。

お礼日時:2003/12/08 20:59

こんにちは。

maruru01です。

No.1の方があらかた説明していますが、少し訂正。
>同じシート内のE1のセルを表示したい場合は、
>それを表示したいセルに=INDIRECT(E1)と入力する
は、正しい数式は、

=INDIRECT("E1")

です。

ちょっと補足説明です。
通常他のセルを参照する場合は、

=A1
=$B$1
=Sheet2!C1

のように入力しますね。
この場合の「=」を除いた部分を文字列として、INDIRECT関数の第1引数に指定すると、同じようにそれぞれのセルを参照出来るのです。
つまり、

=INDIRECT("A1")
=INDIRECT("$B$1")
=INDIRECT("Sheet2!C1")

というわけです。
第1引数に指定するのは、あくまでセル番地を示す"文字列"です。
そして、その文字列が別のセルに入力されているなら、そのセルを指定すればいいわけです。
A1に「Sheet2」と入力されているとすると、

=INDIRECT(A1 & "!$C$1")

とすると、関数の第1引数には、「Sheet2!$C$1」が指定されることになります。
複数に分かれている文字列を繋ぐ時は、「&」を使用します。
この場合はA1自体を参照するのではなくて、A1に入っている「Sheet2」という文字列を使用しているだけです。

さて、最後に、A1の両側に「'」が付いています。
これは、シート名に特定の文字が入っている場合に、これを両側に付けておかないと、シート名と認識してくれないための処置です。
例えば、あるシートの名前を、「1-1」にして、別のシートのどこかのセルに、

=1-1!A1

と入力すると、「ファイルが見つかりません」というタイトルのファイル選択ダイアログが表示され、キャンセルすると、
「#REF!」
というエラーになります。
ところが、これを、

='1-1'!A1

とシート名を「'」で括ると、エラーにならずにちゃんとシート[1-1]のA1の値を表示します。
(ただし、未入力だと「0」になりますが)
これは、「-」がシート名にあるために生じる現象です。
質問の例では、シート名は「Sheet」+数字なので、「'」で括らなくても問題はないです。
しかし、どんなシート名を入れてもエラーにならないように安全を見て、「'」を付けているのでしょう。

ところで、この質問のNo.は何番でしょう?
なんか自分の回答のような気がするのですが。
(似たような別の人の回答かも知れませんが。)

この回答への補足

わかりやすく親身に教えていただき感謝しています。
しかしもう少し教えてください(汗)。
自分の具体例でいうと、Sheet1~9があります。まず、すべてのシートのセルB9をSheet10のB列に上から下へ表示させたいです。
この場合、まずSheet10のA列A1にSheet1と入れドラッグコピーで,A2にSheet2・・・としますよね。
そして教えていただいたとおり、B1に INDIRECT(A1&"!$B$9")と入力すると きちんと表示されました(ヤッタ☆)。下にドラッグコピーでこれで出来ます♪。が、INDIRECT(Sheet1!$B$9)と入れると(Sheet1へ行ってB9を選択) #REF!と出ます。あれ?
とりあえずは先の入力で出来たので解決なんですが・・同じことなんじゃないですか?。なぜでしょう。
あともう一つ、入力方法なのですが、ツールバーの関数貼り付けボタン[fxマーク]から入ると 参照文字列 と 参照形式 を入力する欄があるんですが、私のこの場合それぞれに何と入力したらよいのでしょう?。
質問がすごく込み入って申し訳ございません。実は[’][”][!]といった記号が出てくると困惑してるのが正直なレベルです。
拝借させてもらった回答の質問Noは55739です。maruru01さんは登場されてないようですね。

補足日時:2003/11/26 22:58
    • good
    • 0

=INDIRECT("'" & A1 & "'" & "!$C$1")は、



=INDIRECT(A1&"!$C$1")としてオッケーかと思います。

INDIRECT関数は、カッコの中のセルを引っ張ってくる関数です。

たとえば、簡単な例を書くと、同じシート内のE1のセルを表示したい場合は、それを表示したいセルに=INDIRECT(E1)と入力する、ということです。

質問内にある【回答】の場合、
=INDIRECT("'" & A1 & "'" & "!$C$1")は、
A1は、sheet1が入ってますので、つまりは、
=INDIRECT(sheet1!$C$1)になるので、この関数を入力したB1セルには、sheet1のC1セルに入ってる値が表示されるよ、という意味になるのです。

どうですか?

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=55739
    • good
    • 0
この回答へのお礼

早速の回答に関数の説明などわかりやすくしていただきありがとうございます。【回答】にもある["][']とかって、法則があるんでしょうけど難しいですよね。またよかったら意見くださいね。

お礼日時:2003/11/26 23:06

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