• ベストアンサー

エクセルの質問(結合と集計に関して)

エクセルのマクロに関する質問です。 A列には時刻、B列とC列には数値または空白が入っているエクセルファイル(ファイル名は固定です)が20個あります。 これらを1ファイルに集計表として作成したいのです。但し、A列の時刻を昇順にして行を並べ替えて、B列とC列の最下行にはそれぞれの合計を表示したいのです。 作ってみたら、3つの問題に直面しました。 (1)マクロを実行すると、読み込みファイル20個それぞれ「変更を保存しないで閉じますか」「クリップボードの内容を破棄して良いですか」のポップアップダイヤログが出る。出ないようにできないか。 (2)各ファイルの行数が不定であるため、コピー&ペーストの選択範囲をどう指定したらよいか。 (3)各ファイルの行数が不定であるため、B列とC列の合計をどのセルにセットしたらよいか。 良い方法があれば、教えて頂きたいです。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

Excelでは、ファイルのことを、ブックと読んでいます。ですから、ご質問が、少しぼやけてしまいます。そういう時は、できるだけ自分で書いたコードを掲示してください。その方が、話がわかりやすいです。 (1)は、たぶん、 Application.DisplayAlerts = False   や、ActiveWorkbook.Saved =True   で、切り抜けられると思います。 (2) End プロパティで、Range("A1", Range("A65536").End(xlUp).Offset(,6)).Copy などとすれば、範囲は取れるのではないでしょうか?(A列~F列まで) (3) ご質問の意味が、各ブックのデータの最下部の下のB列C列の合計ということでしょうか?それとも、コピーされた側のまとめ用のブックでしょうか?いずれにしても、(2) の応用でいいのではないでしょうか? ans = Application.Sum(Range("B1", Range("B65536").End(xlUp))) If Not IsError(ans) Then   Range("B65536").End(xlUp).Offset(1).Value = ans End If なお、実際のデータに当たってみたわけではないので、必ずしも、これが正しいとはいえません。とりあえず、参考にしてみてください。

pentanpe
質問者

お礼

回答ありがとうございます。 おかげ様で、うまく出来ました。

その他の回答 (1)

  • tosi0000
  • ベストアンサー率28% (8/28)
回答No.2

私の想像ですが、「マクロの記録」を使って作成されているのではないでしょうか。 shift + ctrl + 矢印キーで範囲選択できますので、なるべくVBAで記述しない方法を書きます。 (1)は前の方の回答の通りです。 もしもVisual Basic Editorで開いた時に、 ActiveWindow.Closeの記述となっているようでしたら、 ActiveWindow.Close (True)へ変更してく下さい。 (2)の手順は (1)ファイル1を立ち上げて、1行を選択。 (一番左の1をクリックです。) (2)shift + ctrl + ↓で範囲選択でコピー。 (データがある範囲のみ選択されます。) (3)書き出し先シートの1行を選択して、「コピーしたセルの挿入」 これを20回繰り返します。 (表が下にどんどん伸びて行きます。) (4)書き出しシートのA1を選択。 (5)shift + ctrl + ↓ を行い、そのまま→を押すと並び替えしたい範囲が選択されます。 (6)並び替え処理実行。 これでデータが揃います。 (3)に付いてはVBAを書く方法しか思い付きませんでしたので、(2)で作られた最後の行へこの記述を追加してください。 For Each MyObj In Range("A:A") If Trim(MyObj.Text) = "" Then Cells(MyObj.Row, MyObj.Column + 1).FormulaLocal = "=SUM(B1:B" & MyObj.Row - 1 & ")" Cells(MyObj.Row, MyObj.Column + 2).FormulaLocal = "=SUM(C1:C" & MyObj.Row - 1 & ")" Exit For End If Next 条件としてA列の途中に空白のセルがあっては正常に動作しません。

pentanpe
質問者

お礼

(3)の記述、分かりました。 A列の空白セルがあれば、その右にB列合計、C列合計を入れる処理ですね。 回答ありがとうございました。

pentanpe
質問者

補足

その通り、「マクロの記録」で作っていました。 shift + ctrl + 矢印キーで、データの存在する範囲を指定できるとは知りませんでした。 No.1さんの回答を参考にして、マクロは作成できたのですが、No.2さんの(3)に書いてあるVBAの記述がどういう処理をしているのか是非理解したいので、もう少し勉強してみます。 理解したとき「お礼」を書きますね。

関連するQ&A

専門家に質問してみよう