• ベストアンサー

エクセル関数【月別シートの内容を表示させる】

エクセルで各月で分かれたシートに、情報が入っていて、そちらをひとつにまとめることは可能でしょうか? 情報が入っている部分は固定とします。 例:入力場所、各シートA1~A10まで。 1シート A1 天気がいい A2 天気がわるい A3 雨だ A4 晴れだ 2シート A1 体調がわるい A2 体調がいい 3シート なし 4シート A1 元気がいい ・・・12シート 合計シート A1 天気がいい A2 天気がわるい A3 雨だ A4 晴れだ A5 体調がわるい A6 体調がいい A7 元気がいい ・・・ といった感じなのですが、やはりVBAでないと実装は難しいでしょうか?  

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

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

 シート名に法則性が無い場合でも有効な方法です。  今仮に、データを一つに纏めるためのシートが「統合」というシート名であるものとします。  まず、適当な使用していないシート(ここでは仮に「補助」というシート名のシートとします)のA列に、 A1セルに  Sheet1 A2セルに  Sheet2 A3セルに  Sheet3 A4セルに  Sheet4 A5セルに  Sheet5 A6セルに  Sheet6 A7セルに  Sheet7 A8セルに  Sheet8 A9セルに  Sheet9 A10セルに  Sheet10 A11セルに  Sheet11 A12セルに  Sheet12 という具合に、1行目のセルから下に向かって順番に、纏めたいデータがあるシートのシート名を入力して下さい。  次に、補助シートのB1セルに次の数式を入力して下さい。 =MAX(IF(ISNUMBER(MATCH(MAX(INDIRECT("'"&$A1&"'!A:A"))+1,INDIRECT("'"&$A1&"'!A:A"))),MATCH(MAX(INDIRECT("'"&$A1&"'!A:A"))+1,INDIRECT("'"&$A1&"'!A:A")),0),IF(ISNUMBER(MATCH("゛",INDIRECT("'"&$A1&"'!A:A"),-1)),MATCH("゛",INDIRECT("'"&$A1&"'!A:A"),-1),0))  次に、補助シートのC1セルに 1 と入力して下さい。  次に、補助シートのC2セルに次の数式を入力して下さい。 =IF($B2=0,"",SUM($B$1:$B1)+1)  次に、補助シートのB1セルをコピーして、補助シートのB2セルに貼り付けて下さい。  次に、補助シートのB2~C2の範囲をコピーして、補助シートのB3~C12の範囲に貼り付けて下さい。  次に、統合シートのA1セルに次の数式を入力して下さい。 =IF(ROWS(補助!$F$1:$F1)>SUM(補助!$B:$B),"",IF(INDIRECT("'"&INDEX(補助!$A:$A,MATCH(ROWS(補助!$F$1:$F1),補助!$C:$C))&"'!R"&ROWS(補助!$F$1:$F1)-VLOOKUP(ROWS(補助!$F$1:$F1),補助!$C:$C,1)+1&"C"&COLUMN(Sheet1!$A$1),FALSE)="","",INDIRECT("'"&INDEX(補助!$A:$A,MATCH(ROWS(補助!$F$1:$F1),補助!$C:$C))&"'!R"&ROWS(補助!$F$1:$F1)-VLOOKUP(ROWS(補助!$F$1:$F1),補助!$C:$C,1)+1&"C"&COLUMN(Sheet1!$A$1),FALSE)))  次に、統合シートのA1セルをコピーして、統合シートのA2以下に貼り付けて下さい。  以上です。  尚、この方法であれば、各元データのシートの中で、A列の最下段の行までにしか、他の列においてもデータが存在しない場合には、統合シートのA列をコピーして、統合シートの他の列に貼り付けるだけで、A列以外の列のデータも纏める事が出来ます。

ewan0723
質問者

お礼

ご回答ありがとう御座います!! ばっちりできました!ひとつひとつの関数の意味はわかるのですが、多くなってくると理解が。。。 やっていけばなれるものでしょうか。。 取り急ぎ解決できましたので、ありがとう御座いました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

関数で行うには結構面倒ですね。 それぞれのシートには作業列を作って対応します。 仮にシートがSheet1からSheet12まであるとしまします。 Sheet1のB1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",COUNTA(A$1:A1)) 次にシート見出しでSheet2を選択してから、Shiftキーを押しながらSheet12をクリックしてSheet2からSheet12までを同じ作業グループにします。その上で、Sheet2のB1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(A1="",ROW(A1)>1),"",MAX(INDIRECT("Sheet"&SUBSTITUTE(TRIM(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,10)),"Sheet","")-1&"!B:B"))+COUNTA(A$1:A1)) これでSheet2からSheet12までのB列には同じ式が入力されることになります。 そこでお望みのまとめのシートを別に用意してA1セルからK1セルにはSheet1からSheet12までの文字を入力します。 A2セルには次の式を入力してK2セルまで横にオートフィルドラッグします。 =IF(ISERROR(INDIRECT(A1&"!A1")),"",COUNTA(INDIRECT(A1&"!A:A"))) A3セルには次の式を入力してK3セルまでオートフィルドラッグします。 =IF(A2="","",SUM($A2:A2)) その上でお求めの表をA5セルから下方に表示させるとしたらA5セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX($3:$3),"",INDEX(INDIRECT(INDEX($1:$1,IF(ROW(A1)<=SMALL($3:$3,1),MATCH(SMALL($3:$3,1),$3:$3,0),IF(COUNTIF($3:$3,ROW(A1)),MATCH(ROW(A1),$3:$3,0),MATCH(ROW(A1),$3:$3,1)+1)))&"!A:A"),MATCH(ROW(A1),INDIRECT(INDEX($1:$1,IF(ROW(A1)<=SMALL($3:$3,1),MATCH(SMALL($3:$3,1),$3:$3,0),IF(COUNTIF($3:$3,ROW(A1)),MATCH(ROW(A1),$3:$3,0),MATCH(ROW(A1),$3:$3,1)+1)))&"!B:B"),0)))

ewan0723
質問者

お礼

ご回答ありがとうございます!! 内容的にはデータがバラバラのときは合計の数と差分で入力するのでしょうか。。抽象的な質問ですみません。最後の関数のところで、入力した数式は正しくありませんとでました。 解決できそうですので、がんばってみます。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

No2です。 >私も同感です!ただ、すでに何年も続けられているファイルでフォーマットの変更が中々難しそうでして。。 実は、私の会社の中でも同じような事例は沢山あります。 エクセルに限らず、過去のやり方で改良を進めても限界にぶつかった時は、根本からやり直せです。 大きな壁にぶつかりますが、大きな結果と将来性が見えてきます。 頑張ってみてください。 ちなみに、これも私の感想ですが、過去に ロータスとかエクセルの出始めなどスプレッドシートの時代に作成されたファイルを今まで引きづって 来ているケースも多いですね。 その時代に、花子とかアクセスなどデータベースからエクセルに発展してきた場合のケースがレアなのですが 拡張性があって良い結果を出しています。 例えば、月ごととかでシートやファイルが分かれると 月単位のグラフを作ってくれと頼まれたときは手作業だらけで大変ですよね。 せっかく入力したデータですので、長年の歴史をグラフにしたり、傾向や分散など解析まで使えるという所まで 利用するという認識まで深めて活用するとエクセルの利点が発揮できるのです。 今回の質問への直接の回答ではありませんが、エクセルも既に単なる表計算ソフトではない所まで進化している ということを職場の皆さんで考えてほしいと思います。

ewan0723
質問者

お礼

いろいろとアドバイスありがとうございます。 こういった意見を聞くと自分もがんばってやらなくてはと思わされます!! 私にできる範囲でがんばってみます!で、やれる内容をもっと多くしていければと思っております。 貴重なご意見ありがとう御座いました!

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

それで? >ただ、入力されている内容はA1~A10までの中に記載されてあり、各シートによって、A1~A3までのシートもあれば、未入力のシートもあったりとバラバラです。 >そのバラバラの情報をコピペではなく、自動的に別シートにだせればと思っておりました。 それはご質問に,最初からちゃんと書いてあることです。 それに対して,回答では「統合」を使う方法と,そのまま使えるマクロと2種類のやり方をお話ししました。 実際にご自分の手を動かして,回答で寄せられた色々な方法をやってみたのですか? やってみて結果はどうだったのでしょうか? 今の様子じゃ「統合」の方はまず上手く行かなかったと思いますが,調べもせずましてや手を動かしてもいないでお返事だけ書かれても,フォローできませんよ?

ewan0723
質問者

お礼

いつもご回答ありがとうございます! 気分を害されたようで失礼いたしました。ご指摘ありました内容ですが、統合では難しかったですが、マクロについては、何も動きはなかってです。 私ごとですが、質問する際は一度調べてから、投稿しております。調べ方が足りないのかもしれません。。また、ご回答いただいて見ただけで理解できないものに関しては実践しております。 今後ともご回答頂けますと幸いです! もっと自分で解決する力を身につけないとだめですね。。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

関数で対応するなら以下のような方法が簡単です。 まとめシートに「=Sheet1!A1」と入力して10個オートフィルコピーし、その下のセルに同様に「=Sheet2!A1」と入力し10個分のデータをコピーし、12枚のシート全部をリンク貼り付けします。 ちなみに、シート名が「1月」「2月」・・・のように規則性があれば、INDIRECT関数を使った1つの数式で表示することができます。 このように表示しておいたデータシートで、「データ」「フィルタ」「オートフィルタ」で▼をクリックして「オプション」から「0」「と等しくない」にすれば該当データだけが表示されています。 必要に応じてこのセル範囲を新規シートにコピーすればご希望のデータのシートが作成できます。

ewan0723
質問者

お礼

ご回答ありがとう御座います! データを関数でひっぱてきてフィルタをかけるって事ですね。 INDIRECT参考になります!

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>情報が入っている部分は固定とします。 であるのであれば、根気強く 合計シート A1 シート1!A1 A2 シート1!A2 A3 シート1!A3 A4 シート1!A4 A5 シート2!A1 A6 シート2!A2 A7 シート4!A1 と式を入れていきましょう。 基本は、最初からデータが日付と一緒に、一枚のシートにひたすら縦方向に入力していきます。 データのシート  A  B 日付 天気 ・・・・ といった具合です。 別のシートに 年と月を入力したら、その月のデータの一覧表が出来る(月単位でデータ抽出) の方がエクセルは得意です。 シートは データと 抽出のシートの2枚でほとんどの場合、何年も続けられます。 月ごとにシートが増える。年ごとにファイルが増える。といった方法はやめた方が良いです。

ewan0723
質問者

補足

ご回答ありがとうございます! 私も同感です!ただ、すでに何年も続けられているファイルでフォーマットの変更が中々難しそうでして。。 非常に効率が悪いので、少しでもと思い質問させて頂きました。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>合計シート  : >といったカンジ 一体どういうカンジで「合計シート」になるのかさっぱり不明ですし,またご利用のエクセルのバージョンも不明ですが,もしかするとデータメニュー(データタブ)の統合などを使ってみると楽に出来ることかもしれません? でもま,ご質問に書かれてるだけのことなら,マクロとか使っちゃった方が勿論簡単は簡単です。 やりかた: シート1から12まで用意する ALT+F11を押す 現れた画面の挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1()  dim w as worksheet  dim i as long  worksheets.add before:=worksheets(1)  set w = activesheet  for i = 2 to worksheets.count   worksheets(i).range("A1:A10").copy destination:=w.range("A65536").end(xlup).offset(1)  next i  w.range("A1") = "合計" ’または ’w.range("1:1").delete shift:=xlshiftup end sub ファイルメニューから終了してエクセルに戻る ALT+F8を押してマクロを実行する。 #ご質問に明記されていない前提条件: 各シートのA1から生データを記入してあるか,または何も記入していない。

ewan0723
質問者

補足

ご回答ありがとうございます!説明不足で失礼しました。 エクセルは2003です。 シート1~シート12までは生データになります。 ただ、各シートによって入力されている数が変わってくるので、どうしようかと思ってました。 ただ、入力されている内容はA1~A10までの中に記載されてあり、各シートによって、A1~A3までのシートもあれば、未入力のシートもあったりとバラバラです。 そのバラバラの情報をコピペではなく、自動的に別シートにだせればと思っておりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの置換のことで・・・

    エクセルの置換機能で質問です。 仮にSheet1のA1のセルに --------------------------------------------------- 今日は良い天気です。 あすはどうでしょうか? --------------------------------------------------- そして、Sheet2のA1に --------------------------------------------------- 昨日は雨でした。 [★★★] たぶん良い天気になるでしょう。 --------------------------------------------------- このようなデータがあるとします。 VBAを使って置換してSheet2のA1を以下のようにしたいです。 --------------------------------------------------- 昨日は雨でした。 今日は良い天気です。 あすはどうでしょうか? たぶん良い天気になるでしょう。 --------------------------------------------------- マクロの記録で試してみたのですが、セル内に改行がはいっていると --------------------------------------------------- 昨日は雨でした。 今日は良い天気です。 たぶん良い天気になるでしょう。 --------------------------------------------------- このように上手くいきません。 VBAを使って上手くできないでしょうか?

  • エクセルで絵を簡単に表示したい

    エクセルで一ヶ月の天気一覧を作っています。 1日、2日、3日・・・31日のそれぞれのセルに、 晴れマーク、雨マーク、晴れのち雨のマークなどを、いちいち貼り付けているのですが、 もっと簡単にできる方法はないでしょうか? 例えば、A1のセルに「晴れ」と入力されていれば、A2に「晴れマーク」 B1のセルに「晴れのち雨」と入力されていれば、B2に「晴れのち雨マーク」が入る…というような。 または、A1に「1」と入力すればA2に「晴れマーク」が入る、B1に「3」と入力すればB2に「晴れのち雨マーク」が入る…。 (A1、B1のセルは最終的に表示させたくないのですが) VLOOKUP関数でセルを絵として貼り付ける方法というのを見ましたが、 ちょっとよく分からなかったのです。 説明が分かりにくくてすみませんが、どなたかアドバイスいただけますよう、宜しくお願いいたします。

  • エクセルで複数のシートからのグラフを作りたい

    自力で調べてみたのですが分からなかったので教えて下さい。 エクセルでSheet2に1月の合計を Sheet3に2月の合計を Sheet4に3月の合計を…というように シートごとに各月の合計があります。 これをSheet1に合計の上がり下がりが分かる折れ線グラフを作りたいのです。 でもグラフのデータ範囲が、違うシートなので指定できず困っています。 どなたか教えて下さい。 ※もし説明が分かりにくい、足りないなどありましたら追記させていただきますので教えて下さい よろしくお願いします。

  • エクセルの集計関数を教えてください

    エクセルでそれぞれのシートの同じセル番号の数値を合計する関数がありましたら教えてください     例:=+sheet1!A1+sheet2!A1+sheet3!A1+・・・・     の連続式を簡単に入力したい

  • Excelの関数のことです。

    Excelの関数のことです。 Excelのシートに給与金額を入力しています。 その入力用シートには 施設名(A・B・C) 職種名(AA,BB,CC,DD) 勤務形態(a.b) 合計金額 アルファベットは種類数です。 を入力しており 別シートに施設ごとに給与合計をするシートがあります。 そこに 例)A施設の常勤で事務が○人いてその給与合計が○円 という関数が組みたいのです。 教えてください。 よろしくお願いします。

  • エクセルで別シートから一つのシートに低い数字を表示

    エクセルで同一形式の8枚の別シートから1枚のシートへ一番価格が低いものを表示させたいんです。さらに表示させたシートの色に表示させる様にしたいです。 例  シート1 シート色赤 A 100 B 200 C 300 シート2 シート色青 A 200 B 100 C 300 シート3 シート色黄 A 300 B 200 C 100 合計シート A 100 赤 B 100 青 C 100 黄 数字だけでも表示できると助かるのですが やはり色もつけるとなるとマクロを組まないといけないのでしょうか?

  • Excel VBAの SUM関数について質問です。

    Excel VBAの SUM関数について質問です。 SUM関数で合計の値を出す場合、 SUM(A1:A5)という関数で合計を出しますが SUM(sheet2.cells(1,1),sheet2.cells(5,1)) と言ったようにCellsで指定はできないのでしょうか? 複数の列にVBAのプログラムで合計の値を出したいのです。 WorksheetFunction.SumではSUM(A1:A5)のように 自動計算にならないと思うので・・・

  • エクセルについてです。エクセルの関数でが、シート1にデータが入っていま

    エクセルについてです。エクセルの関数でが、シート1にデータが入っています。シート1の1行目には見出しがあり、2行目からは、データが入っています。A列には、店舗名12店舗あります、12店舗ありますが、日付がD行にあり、A列にはランダムに入っています。100行目まで入っています。B列には、データ(1)、c列には、データ2が入っています。  シート2には、1行目には見出し。A列には、店舗名、A2は、あ店。A3は、い店。A4は、う店。A5は、え店。A6は、お店。A7は、か店。A8は、き店。A9は、く店。A10は、け店。A11は、こ店。A12は、さ店。A13は、し店。と入っています。シート2には、シート1のA店の合計を。シート2には、シート1のB店の合計を・・・・・あとは、A13まで同じ要領で合計を入れたいのです。どうやったらいいですか?

  • 月別のシートを年間で閲覧表示したい。

    エクセルで帳簿をつけております。 科目名別にシートを作り、月別に1ブック(1ファイル)として運用しています。 例)12年1月.xls 12年2月.xls... 各科目は0行~50行程です。 質問ですが、 上記、月別のブックを閲覧用に年単位で表示させたいと思っています。 同じフォームのブックを利用して、上から順に1月分・2月分と参照したいのですが、 各月毎に行数が変化するため、無駄な空白が発生するためうまくいきません。 標準的な関数で実現したいと思っています。よろしくお願いします。

  • 【エクセル】複数シートの同一セルの内容を別のシートに自動反映させたい

    エクセルについて教えてください。エクセル初心者なので、説明がうまくできないのですが、やりたいことを汲み取っていただけると助かります。 現在複数シートのシートの同一セル上に数字が記入されています。 新たに別シートを作成し、その表に数字が自動入力されるように したいのですが、何か方法はありますでしょうか。 例)(1)シート1~12のA10セルに4月-3月までの支出合計が    記入されている。   (2)別シートに縦罫4月-3月、横罫支出合計とした表を作成。   この表に月ごとの支出合計が自動的に反映されるように   したいのですが、今はセル一つずつに"=シート1のセルA10"を   入力しています。   この方法以外に便利な方法があったら教えてください。   説明下手で申し訳ございませんが、宜しくお願い致します。

専門家に質問してみよう