初心者のためのExcel エクセルマクロVBA入門-実践基礎:リハビリ(便利Tips)
お久しぶりです。年明けからずっとデスマーチ状態で、ブログどころではなかったのですが何とか落ち着いてきたのでちょっとだけ更新します。リハビリです。CSVの取込はコンテンツとして若干重めなので、今回は軽く行きます。
私がよくVBAで使っている機能を紹介したいと思います。ランダムで申し訳ない。
マウスポインタを砂時計にする
よく、マクロの実行に時間がかかる時につかっています。というか、時間がかかろうがかからなかろうが、実行中に余計な操作をしてほしくないのでもはや必須でやっていることです。超簡単。1行一発!
' マウスポインタを砂時計に Application.Cursor = xlWait
これだけ。
画面更新をしないように設定(視覚的に動かないように)
これをしないと、マクロを実行中にまるで幽霊がエクセルを動かしているかのように動きます。しかし、これは実行と更新処理を一緒に行っているのでマクロの実行が遅くなってしまうのです。そこで、実行中は画面の更新をしないように設定して、終わったらまた元に戻してあげる。というわけです。これも1行一発!
' 画面更新をしないように設定 Application.ScreenUpdating = False
これだけ、元に戻す時はTrueにしてね。
ボタンとかのフォームを非活性にする
これも意外と使うんです。なぜなら、連打されたくないから。ボタンを押して、マクロを実行する場合に、マクロが終了するまでボタンを押されたらちょっとおかしな挙動になったりしませんか?これを防止するためにボタンが押されたらまず最初にこれを実行してボタンを非活性にするのです。
' ボタンを非活性にする シートオブジェクト名.ボタンオブジェクト名.Enabled = False
これはボタンオブジェクトのEnabledプロパティを使います。要するにボタンロボの状態を操作するわけですね。このコードのようにちゃんとシートオブジェクトから指定してあげることが大切です。Enabledプロパティはそのオブジェクトが活性、非活性の状態を管理しています。Falseにすることで非活性にできるのです。活性と非活性があんまりしっくりこないなら、ボタンオブジェクト(ロボ)がいつでも動けるかとりあえず電源オフっとけ。なのか?くらいに思ってくださいw
コピペする
これもExcelの動作としては良く使いますが、実際にはあんまりCopyメソッドは私はセルの書式などもまるごと一緒にコピーする以外では使いません。値のコピーだけなら、オブジェクトに値を入れるのとなんら変わりはないので。
値だけなら・・・
' セルA1の値をB1にコピーする Sheet1.Cells(1, "B").Value = Sheet1.Cells(1, "A").Value
で十分です。セルの背景色とかも全部コピーしたいなら。。。
' セルA1の値をB1にコピーする Sheet1.Cells(1, "A").Copy Sheet1.Cells(1, "B")
でOKです。え?ペーストしないのか?って?もうその辺はOfficeTanaka大先生のお話を聞けばよくわかるからそっちを見ればいいと思うよ。Copyメソッドは引数にペースト先を指定できるので、これでOKです。
今何件処理中?とかExcelに出したい。
よくあるんですが、これはステータスバーを使います。Excelの右下にあるやつです。
Dim i As Long For i = 1 To 10000000 Application.StatusBar = i & "件目処理中です..." Next i Application.StatusBar = False
早すぎてわからんと思うので数は多めで。を処理の合間に入れておくと随時更新されて、いい感じになります。
処理が終わったら、最後に元に戻すためにFlaseを入れるのを忘れないようにしましょう。
以上。こんな感じです。
他にも色々ありますが、あんまり時間もないので、今回はこの辺で!
今日はこれまで!
かしこ