• ベストアンサー

エクセルのシートを自動で

こんにちは。 エクセルの複数のシートのデータを自動的に一枚のシートに反映させたいのですが、教えていただけますか? シート1~31まで日々のデータが入っています。それを自動的に一枚のシートにまとめたいのです(集計ではなくて) 例えば、入力時に自動的に反映しても良いですし、もしくは、他の方法でもOKです。 1~31のシートのデータ数は日々違います。 よろしくお願いいたします。

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

  • ベストアンサー
  • miwaki
  • ベストアンサー率36% (14/38)
回答No.5

#4のお礼欄の質問にお答えします。 この場合、シート32のA列にはデータ元のシート番号を表示しています。セルA2の”=IF(ISBLANK(Sheet1!A2),"",1)”は、データ元のシートのセルA2が空白であれば、空白を記入し、空白でなければシート番号を記入するという意味です。そして、ここが空白なら、シート1の当該行は全て空白とみなしています。(この判定がまずければ、Aの代わりに適当な列を指定してください。)したがってシート2のデータを参照する52行目(1シート最大50行の場合)では、空白でなければ2と記入します。 ここにシート番号ではなく日付を記入したいなら、”=IF(ISBLANK(Sheet1!A2),"","1日")”とすればよいのです。 また、空白を記入するというのは、一見無駄なようですが、データ並び替えのとき空白を記入した行が下に詰めあわされるようになりますので必要なのです。

その他の回答 (6)

  • miwaki
  • ベストアンサー率36% (14/38)
回答No.7

#6のお礼覧へのお答え 喜んでいただけてうれしいです。またお尋ねください。

  • miwaki
  • ベストアンサー率36% (14/38)
回答No.6

#5の回答に何の応答もないところを見ると、見当違いで#4の補足の疑問にお答えしていないようですね。 #4のあなたの疑問は、シート1の当該セルが空白なのにどうして1になるかということでしょうか。 もしそうなら、恐らくシート1の該当セルは、一見空白に見えているだけかもしれません。他のシートなどからコピー貼り付けたりしたときはそういうことがあります。 もしそうなら、当該行が有効か無効か判定する手段はほかにもありますので、ISBLAK(Sheet1!A2) の他に次を試してください。 LEN(Sheet1!A2)=0 ISNUMBER(Sheet1!A2):当該セルに有効なら数字が入っている場合。 ISTEXT(Sheet1!A2):当該セルに有効なら数字が入っている場合。 また検査対象をA列でなくても、有効無効の判定をする適切な列があれば、変更してください。

msyk
質問者

お礼

御礼遅くなりました。ホント失礼な事をしてしまって…。新しい回答のメールが来てなかったので、回答ナシと思っていて、締め切ろうと思ったら…。ホントすみません。そして、有難うございました。出来ました!私もmiwakiさんのように自由自在にエクセル操ってみたいです。。お手数をお掛けいたしました。

  • miwaki
  • ベストアンサー率36% (14/38)
回答No.4

#3関連 もしも、各シートの最大行数を1000とか2000とかある数に限定し、まとめたシートは必要に応じて項目でソーティングして利用するということなら、マクロを使わず、エクセル関数のみで可能です。 仮に以下の通りとします。 ・各シートの最大行数:50 ・各シートの1行目はタイトル行 ・シートの項目数(列数):5(AからE) ・sheet32にまとめる sheet32の1行目をタイトルとし、1列目(A列)にシート番号、2列目以降が各シートの1列目以降の項目に対応するとして、sheet32の各セルに次の通りの関数を入れる セルA2:=IF(ISBLANK(Sheet1!A2),"",1) セルB2:=IF(A2="","",Sheet1!A2) セルB2をコピーしてセルC2からF2に貼り付け セルA2からF2をコピーして51行目まで貼り付け セルA52:=IF(ISBLANK(Sheet2!A2),"",2) セルB52:=IF(A52="","",Sheet2!A2) セルB52をコピーしてセルC52からF52に貼り付け セルA52からF52をコピーして101行目まで貼り付け 以下、31枚のシートであればこれを31回繰り返す。 そして、Sheet32で所望の項目を指定して昇順でソーティングする。空白行はすべて下に行き、入力されたデータ行が上に来る。 お試しください。

msyk
質問者

お礼

丁寧に有難うございます。 試してみました!しかし「セルA2:=IF(ISBLANK(Sheet1!A2),"",1)」が上手く表示されないんです・・この数式を入れても「1」と表示されてしまって・・もう一度チャレンジしてみます。 ホント、ありがとうございました。

msyk
質問者

補足

こんにちは。 すみません・・・もし教えていただけるなら、教えていただけるでしょうか? どうしても、セルA2の関数を入力しても「1」の表示が出てしまうのですが・・TRUEとしてもダメで。 教えていただけたら、お願いできますでしょうか? *お手数でしたら、無視してください。

  • miwaki
  • ベストアンサー率36% (14/38)
回答No.3

補足ありがとうございました。 31枚のシート(以下シートA群)のいずれかに入力された行が、自動的に別の1枚のシート(以下シートB)に追加コピーされていく。Bシートの項目(列)にはシートA群の項目(列)にA群のシート番号を示す列が付け加わっている。シートBには入力できない。シートBの行数はシートA群の各シートの行数の合計と同じになる。 そう考えてよろしいでしょうか。 もしそうなら、シートA群のいずれかのシートにデータが入力されたとき起動するマクロを組んでみたいと思います。 なお以下の追加補足をお願いします。 シートBの行の並びは、入力順それとも元シート順ですか。 またシートA群に変更が加えられたとき、自動的にシートBが更新されなければならないでしょうね。

  • TTak
  • ベストアンサー率52% (206/389)
回答No.2

Excelではシート間の参照も有効です。 一カ所に参照式を入れてドラッグすれば、特定の範囲がまるごとリンクされます。よって、各シートのデータを参照式で1シートにリンクすれば、自動的に全シートのデータを反映するシートができます。 ただ、31シートものリンクは作ったことがないので、安定した動作が保証できるかどうかは判りません。データの統合も使用できますが”集計でない”ということですので、単に反映させるだけと判断しました。 Sheet1のA1に =Sheet2!A1 と入力すればSheet2のA1とリンクする =Sheet3!A1 と入力すればSheet3のA1とリンクするということです。 こういうことでしょうか? 各データシートのデータ行数や列数が変化する場合はマクロが必要と思われます。

msyk
質問者

お礼

お礼が遅くなり申し訳ありません。 回答して頂き、有難うございました。

  • miwaki
  • ベストアンサー率36% (14/38)
回答No.1

もうちょっと具体的に質問してくれませんか。 参照を使えば何とかなると思うのですが

msyk
質問者

補足

補足要求有難うございます。 んっ~・・何を具体的に書けば良いのかわからないのですが、シート1は○月1日のデータ(日にち・商品名・コード・重さ・使用数・原料名等が入っています) そのシートが1~31日まであるので、総合と言うシートに1~31日までを表示させたいのです。 シートにはVLOOKUP等の関数が使われていますが、全てのシートは同じ数式がすでに入っています。 その日によって、データの行数は違います。 なんとかなりますでしょうか? よろしくお願いいたします。