アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのマクロに関する質問です。

A列には時刻、B列とC列には数値または空白が入っているエクセルファイル(ファイル名は固定です)が20個あります。
これらを1ファイルに集計表として作成したいのです。但し、A列の時刻を昇順にして行を並べ替えて、B列とC列の最下行にはそれぞれの合計を表示したいのです。

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

A 回答 (2件)

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

なお、実際のデータに当たってみたわけではないので、必ずしも、これが正しいとはいえません。とりあえず、参考にしてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/28 23:48

私の想像ですが、「マクロの記録」を使って作成されているのではないでしょうか。


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列の途中に空白のセルがあっては正常に動作しません。

この回答への補足

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

補足日時:2005/04/29 00:01
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/05/11 23:12

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