エクセルのマクロに関する質問です。
A列には時刻、B列とC列には数値または空白が入っているエクセルファイル(ファイル名は固定です)が20個あります。
これらを1ファイルに集計表として作成したいのです。但し、A列の時刻を昇順にして行を並べ替えて、B列とC列の最下行にはそれぞれの合計を表示したいのです。
作ってみたら、3つの問題に直面しました。
(1)マクロを実行すると、読み込みファイル20個それぞれ「変更を保存しないで閉じますか」「クリップボードの内容を破棄して良いですか」のポップアップダイヤログが出る。出ないようにできないか。
(2)各ファイルの行数が不定であるため、コピー&ペーストの選択範囲をどう指定したらよいか。
(3)各ファイルの行数が不定であるため、B列とC列の合計をどのセルにセットしたらよいか。
良い方法があれば、教えて頂きたいです。
よろしくお願いします。
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
なお、実際のデータに当たってみたわけではないので、必ずしも、これが正しいとはいえません。とりあえず、参考にしてみてください。
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列の途中に空白のセルがあっては正常に動作しません。
この回答への補足
その通り、「マクロの記録」で作っていました。
shift + ctrl + 矢印キーで、データの存在する範囲を指定できるとは知りませんでした。
No.1さんの回答を参考にして、マクロは作成できたのですが、No.2さんの(3)に書いてあるVBAの記述がどういう処理をしているのか是非理解したいので、もう少し勉強してみます。
理解したとき「お礼」を書きますね。
(3)の記述、分かりました。
A列の空白セルがあれば、その右にB列合計、C列合計を入れる処理ですね。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルで同じ名前ごとの合計...
-
桁数が混在する並び替えの方法
-
エクセル VLOOKUPが反映されない
-
EXCELである列を上から順にチェ...
-
エクセルで列内の同じIDの商品...
-
エクセルで一部除外した数字を...
-
Excelで自動的に並べ替えなんて...
-
Excelで1列の数字の内、ある行...
-
EXCEL 指定した曜日に番号を振...
-
エクセルvba 一つ上の行を指定...
-
パソコンで簡易検索を作るには
-
オートフィルについて(急ぎ!)
-
Excelで数値→文字列変換で指数...
-
テキストボックス内の文字のふ...
-
Excelで行ごとコピー、同じ行を...
-
PDFの一部を切り取って別のシー...
-
エクセル
-
エクセルにおける、グラフの指...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
エクセルで同じ名前ごとの合計...
-
エクセルの関数SUBSTITUTEを、...
-
エクセルVBA Unionはなぜ遅い?
-
桁数が混在する並び替えの方法
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルで一部除外した数字を...
-
エクセルで列内の同じIDの商品...
-
Excelで自動的に並べ替えなんて...
-
エクセル マクロで列を連続し...
-
エクセルvba 一つ上の行を指定...
-
EXCELである列を上から順にチェ...
-
EXCEL 指定した曜日に番号を振...
-
エクセルで2列を検索し2列とも...
-
エクセル 並び替え
-
ExcelVBA:列方向の並び替え O...
-
アクティブセルのある行の任意...
-
エクセル VLOOKUPが反映されない
-
オートフィルについて(急ぎ!)
-
VBA マクロの組み方
おすすめ情報