- ベストアンサー
エクセルで、シートごとの計算結果を別の表にする方法
同じ形式のデータシートが100枚ぐらいあり、このシート上で計算をした結果が10個ほどあります。この結果の一覧表(100×10)を作り、グラフを作成する必要があります。 このとき、一覧表の先頭のセルにシート名とセルの番号を計算式としていれて、つまんで引っ張り100までカウントアップして計算式を入力させたいのですが、うまくいきません。いちいち入力するのは邪魔くさいので、いい方法があれば教えてください。 VBAはよく分かりませんが、解決するならやってみますのでよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>B1=INDIRECT("'Data" & $A1 & "'!A$1") >C1=INDIRECT("'Data" & $A1 & "'!B$1") >と入力して横に引っ張ってみましたがカウントアップしてくれません。 B1の中身を変えるだけでは、横に引っ張る事は出来ません(「"'!A$1"」の部分が文字列として扱われているため)。 ちょっと工夫が必要ですね。 以下のようにしてみてください。 1:B1にA、C1にB、D1にC…と入力 2:A2に1、A3に2、A4に3…と入力 3:B2に =INDIRECT("'Data" & $A2 & "'!" & B$1 & "1") と入力 4:B2のセルを適当な範囲に複写 A列で、取得するシートの番号を指定、1行目で、取得する列を指定です。 取得する行は、INDIRECT… の末尾の『"1")』の部分ですね。 少しInDirect()の括弧の中身を説明してみますね。 Indirect関数は、セルのアドレスを文字列として、括弧の中に書くと、そのアドレスのセルの内容を返します。 =Indirect("A1") と書けば、A1のセルの中身を返しますし、 =Indirect("SHEET2!A1") と書けば、「SHEET2」と言う名前のシートのA1のセルの値を返します。 シート名!セルアドレス は、他のいろんな場所でも使えるんですが、シートの名称にスペースが含まれる場合は、シート名をシングルコーテーションで囲んで、「'Data Sheet'!A1」のように記述する必要があります。 $マークについては、ヘルプの「セルとセル範囲の参照について」の中の「相対参照と絶対参照」に載っています。 イルカ君か冴子先生に「セルとセル範囲の参照について」と聞いてみてください。 (簡単にいうと、「引っ張るときにどのような動作をするか」です。 「A1」のAの前に$が付いてると($A1)、横に引っ張ってもAの部分は変化しません。 同様に1の前に$があると(A$1)、縦に引っ張っても1の部分が変化しません。 $A$1だと、縦に引っ張っても横に引っ張っても、変化なしです。) あと、式中の「&」は文字列を結合する演算子です。 1 + 1 = 2 と同様、 "A" & "1" = "A1" になります。 "SHEET" & A1 なら、SHEET という文字列と、A1のセルの中身を結合したものになります。(A1 に 1が入力されていれば、SHEET1 という文字列になる。) 一度、=INDIRECT("'Data" & $A2 & "'!" & B$1 & "1") のかわりに、 = "'Data" & $A2 & "'!" & B$1 & "1" として、試してみてください。 連続するシートの簡単な名づけ方は、聞いた事がありません。(多分無いと思います。) マクロを使えば、自動処理で名付けることが出来ると思うんですが、それだと「簡単」とは言えませんね(^^:。
その他の回答 (3)
- ARC
- ベストアンサー率46% (643/1383)
>あとA、B、C...は連続コピーできないんですね?これができたら言うことなしですが... あれ?、手元の機械では出来ますが… っと、これは一度「ユーザー設定リスト」で設定しないといけないみたいですね。 [ツール]-[オプション]-[ユーザー設定リスト]で、設定してやれば、次から連続コピーできるようになります。
お礼
ありがとうございました。 ちょっと戸惑いましたけどできました。前から[ユーザー設定リスト]はなんだろうと思ってました。 でも、ここで打ち間違えたら、やっぱりだめですよね。 さぁこれで仕事がはかどりそう!です。
- ARC
- ベストアンサー率46% (643/1383)
シートの名前が[Data1]~[Data100]で、各シートのZ1のセルに計算結果が入っているとします。 1:集計を行うシートのA1のセルに1を入力 2:同様に、A2に2,A3に3…A100に100と入力(連続データを作成) 3:B1に =INDIRECT("'Data" & $A1 & "'!Z1") と入力 4:B1のセルをコピーし、B1:B100の範囲に貼り付け としてみてください。 3:のInDirect関数の中身を、適当に替えてやれば、他のセルの中身も取り出すことが出来ます。 この説明で分かりにくければ、補足をお願いします。
お礼
ありがとうございました!!!何とかできそうです!!! あと少し欲を言わしてもらうと(^^;) 各シートの計算結果のセルZ1が、A1~Z1の場合の、B1への入力式を教えていただきたいと思います。 B1=INDIRECT("'Data" & $A1 & "'!A$1") C1=INDIRECT("'Data" & $A1 & "'!B$1") と入力して横に引っ張ってみましたがカウントアップしてくれません。 (たぶん基本的に分かってないと思うんですがとにかくやってみました) B1のセルの入力式だけで横に引っ張って、下に引っ張ると表が出来上がるようにしたいんですが....(^^; できるんでしょうか? さらに、連続シート名のつけ方の早い方法とかあるんでしょうか? さらにさらに、(!)とか(’)とか($)とかの使い方はHELPで参照できるんでしょうか? たくさん聞いてすみませんが、よろしくお願いします。
- shigatsu
- ベストアンサー率26% (511/1924)
エクセルにはいわゆる普通のコピー&ペーストの操作のほかに、リンク貼り付けというのができます。 シート1のA1~C4の内容をそのままシート2の任意の場所にコピーするんですが、このとき単純なコピーではなくシート1を参照するようにリンク状態でコピーされます。 当然シート1が変化したら、それに伴ってコピー先のシート2も変化します。 貼り付けの時に「形式を選択して貼り付け」を選ぶとダイアログが出てきて「リンク貼り付け」ボタンがあります。 「OK」ボタンだとそのまま貼り付けと鳴ってしまいますので「リンク貼り付け」を選んでください。 多少面倒ですが、一気には作れそうも無いので・・・
お礼
ARC先生ありがとうございました! ばっちりですぅ!! 大変詳しい説明でよく分かりました。(シート名!セルアドレス)のことも理解でき、これからもっと活用できそうです。 あとA、B、C...は連続コピーできないんですね?これができたら言うことなしですが... ちなみに冴子先生とはちょっと、ウマが合わないようです。 またよろしくお願いします。 邪魔くさがりのbantamでした。