- ベストアンサー
複数のマクロの起動
エクセルVBAで、複数の命令を記録しています。 それらを一度に実行させたいのですが、VBAの編集画面で、4つのマクロを合体させて実行させると画面がチカチカし、少し処理の時間がかかっているような気がします。 こういう方法はあまりよくないのでしょうか? 複数のマクロの実行の仕方が分からずに、合体させてしまったのですが…。 良い方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
良いか悪いか、そんなこと書かれたVBAコードを見ないと誰にも答えられませんよ~。 ( ̄□ ̄;)!! とりあえず画面がチカチカをとめるだけなら、 コードの最初に Application.ScreenUpdating = False コードの最後に Application.ScreenUpdating = True とすれば、マクロが終了するまで画面は動きません。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
>複数の命令を記録しています。 当たり前では。VBAでは命令といわないかも。ステートメントなどなどのこと? ーー >4つのマクロを合体させて実行させると画 質問者の言っていることは、合体させて、とは言わないのでは。 やっていることはSUBプロシージュアーに分けて、Callしているだけ。分けたら質問者のような記述で、4つを実行することになる。分けることは初心者には難しくなる要因を持ち込む場合もある。分ける必要性もあるのかなというレベル。 >複数のマクロの実行の仕方が分からずに、合体させてしまったのですが なんかわざわざ、合体という難しい言葉を使うケースなのかな。 ーー 質問者の言う、合体させたから、画面がチカチカし、少し処理の時間がかかっているような気がします。では無いと思う。一因は既に回答があり、お分かりになるでしょう。 ーー 今後解説書や、WEBなどで注意して読んで、そういう言い方になっているか勉強されんことを。 Googleで「VBA 合体」で照会すると、1例を除き、シート・表の合体のようでした。
お礼
回答ありがとうございます。 勉強不足で、言葉の使い方が間違っている場合もあり、回答してくださる方にはご迷惑をかけています。 いろいろな人の書いてあるものを見て、早く正しい言葉の使い方ができるように頑張ります。
- merlionXX
- ベストアンサー率48% (1930/4007)
シートの構成がコードから推測するしかないのでいまいち自信がありませんが、少しでも早くするならこういうのはどうでしょう。 Sub 顧客番号顧客名() Worksheets("入力").Range("D1:D2").Copy '入力シートD1:D2コピー With Worksheets("売上帳") '売上帳シートにおいて 行 = .Cells(Rows.Count, "G").End(xlUp).Row + 1 'G列最終行の1行下の行番号を取得し「行」に代入 .Range("E" & 行).PasteSpecial Paste:=xlPasteValues, Transpose:=True '行列を入れ替えして値の貼り付け Application.CutCopyMode = False 'コピーモード解除 End With End Sub Sub 売上() With Worksheets("入力") '入力シートにおいて 行番号 = .Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行の行番号を取得し「行番号」に代入 セル売 = "F" & 行番号 .Range("B8:" & セル売).Copy End With With Worksheets("売上帳") '売上帳シートにおいて 行 = .Cells(Rows.Count, "G").End(xlUp).Row + 1 'G列最終行の1行下の行番号を取得し「行」に代入 .Range("G" & 行).PasteSpecial Paste:=xlPasteValues '値の貼り付け Application.CutCopyMode = False 'コピーモード解除 End With End Sub Sub 消費税() Worksheets("入力").Range("消費税セル").Copy '入力シート消費税セルコピー With Worksheets("売上帳") '売上帳シート 行 = .Cells(Rows.Count, "G").End(xlUp).Row + 1 'G列最終行の1行下の行番号を取得し「行」に代入 .Range("G" & 行) = "消費税" .Range("K" & 行).PasteSpecial Paste:=xlPasteValues '値の貼り付け Application.CutCopyMode = False 'コピーモード解除 End With End Sub 'そしてこれをまとめるのに、 Private Sub 売上登録_Click() With Application .ScreenUpdating = False '画面更新を一時停止 .Calculation = xlCalculationManual '自動計算を一時停止 Call 顧客番号顧客名 Call 売上 Call 消費税 .Calculation = xlCalculationAutomatic '解除 .ScreenUpdating = True '解除 End With End Sub
お礼
はあ~、こういう書き方もあるんですね。 私の知識では今は理解不能ですが、一つ一つ調べて、使ってみます。 VBAはこれが正解っていうものがなくて、素人には苦労します。 みんなこうやって勉強してきてるんですよね。 頑張ります。 いつも丁寧に書いてくださってありがとうございます。
- zap35
- ベストアンサー率44% (1383/3079)
まず「チカチカ」するのはSelectやActivateを使うからです。 たとえば「顧客番号」を例に取ると、以下のようにSelectやActiveteを用いずに書き換えれば「チカチカ」しなくなります。またSelectやActiveteは処理を遅くする大きな原因ともなります。 Sub 顧客番号() With Worksheets("売上帳") .Cells(.Range("G65536").End(xlUp).Row + 1, "E").Value _ = Worksheets("入力").Range("D1").Value End With End Sub また#01さんの回答にあるScreenUpdatingプロパティをFalseにすれば画面描画を止めることができます。
お礼
回答ありがとうございます。 SelectやActiveteが原因だったんですね。 まだ勉強不足で同じ書き方ばかりで書いていました。 教えていただいたのを参考に、いろいろな書き方を勉強します!
お礼
教えていただいたコードでチカチカはとりあえず無くなりました。 ありがとうございました。
補足
そうですよね。 すみませんm(_ _)m 以下が作ったコードです。 Sub 売上() Worksheets("入力").Activate '入力シートをアクティブにする 行番号 = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行の行番号を取得し「行番号」に代入 セル売 = "F" & 行番号 Range("B8:" & セル売).Select Selection.Copy Worksheets("売上帳").Activate '売上帳シートをアクティブにする 行 = Cells(Rows.Count, "G").End(xlUp).Row + 1 'G列最終行の1行下の行番号を取得し「行」に代入 Range("G" & 行).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False '値の貼り付け End Sub Sub 顧客番号() Worksheets("入力").Activate '入力シートをアクティブにする Range("D1").Select Selection.Copy Worksheets("売上帳").Activate '売上帳シートをアクティブにする 行 = Cells(Rows.Count, "G").End(xlUp).Row + 1 'G列最終行の1行下の行番号を取得し「行」に代入 Range("E" & 行).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub Sub 顧客名() Worksheets("入力").Activate '入力シートをアクティブにする Range("D2").Select Selection.Copy Worksheets("売上帳").Activate '売上帳シートをアクティブにする 行 = Cells(Rows.Count, "G").End(xlUp).Row + 1 'G列最終行の1行下の行番号を取得し「行」に代入 Range("F" & 行).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub Sub 消費税() Worksheets("入力").Activate '入力シートをアクティブにする Range("消費税セル").Select Selection.Copy Worksheets("売上帳").Activate '売上帳シートをアクティブにする 行 = Cells(Rows.Count, "G").End(xlUp).Row + 1 'G列最終行の1行下の行番号を取得し「行」に代入 Range("G" & 行) = "消費税" Range("K" & 行).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub そしてこれをまとめるのに、 Private Sub 売上登録_Click() 顧客番号 顧客名 売上 消費税 End Sub というコードを書いています。