エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニックを紹介します。
Rnd関数を使用することで、自分が指定した範囲からランダムに数字を抽出することができます。
AとBを整数とした場合、A〜Bの間の整数値をランダムに取得する場合、以下のような構文になります。
構文
Int((B−A+1)*Rnd+A)
次のサンプルを試してみてくださいね。
50から100までの間の数字を、1行目から20行目までにランダムに取得します。
'***************************************
'乱数を取得する
'***************************************
Sub Test16()
Dim i As Integer
Randomize
For i = 1 To 20
Cells(i, 1).Value = Int((100 - 50 + 1) * Rnd + 50)
Next i
End Sub
ちなみに、サンプル中のRandomizeステートメントは、乱数発生ルーチンの初期値を設定するステートメントです。
☆エクセルVBAのおすすめ書籍⇒Excel VBA逆引き大全600の極意
Rnd関数を使用することで、自分が指定した範囲からランダムに数字を抽出することができます。
AとBを整数とした場合、A〜Bの間の整数値をランダムに取得する場合、以下のような構文になります。
構文
Int((B−A+1)*Rnd+A)
次のサンプルを試してみてくださいね。
50から100までの間の数字を、1行目から20行目までにランダムに取得します。
'***************************************
'乱数を取得する
'***************************************
Sub Test16()
Dim i As Integer
Randomize
For i = 1 To 20
Cells(i, 1).Value = Int((100 - 50 + 1) * Rnd + 50)
Next i
End Sub
ちなみに、サンプル中のRandomizeステートメントは、乱数発生ルーチンの初期値を設定するステートメントです。
☆エクセルVBAのおすすめ書籍⇒Excel VBA逆引き大全600の極意
エクセル:セル関連の操作
エクセルのちょっとしたテクニックを紹介します。
複数のセルに同じ文字を入力する場合、セルのコピーをすることが考えられますが、もっと効率の良く、複数のセルに一括入力する方法があります。
(1)文字を入力したいセルを選択します。
(2)セルを選択した状態のまま、文字を入力します。
※このとき文字は変換の確定をし、文字の後ろにカーソルが残っている状態にしておきます。
(3)入力を確定するときに、[Ctrl]+[Enter]を押します。
(4)これで選択したセルにすべて文字が入力されます。
※複数のセルに数式を入力する場合も使えるので、この方法は慣れると、結構便利ですよ。
複数のセルに同じ文字を入力する場合、セルのコピーをすることが考えられますが、もっと効率の良く、複数のセルに一括入力する方法があります。
(1)文字を入力したいセルを選択します。
(2)セルを選択した状態のまま、文字を入力します。
※このとき文字は変換の確定をし、文字の後ろにカーソルが残っている状態にしておきます。
(3)入力を確定するときに、[Ctrl]+[Enter]を押します。
(4)これで選択したセルにすべて文字が入力されます。
※複数のセルに数式を入力する場合も使えるので、この方法は慣れると、結構便利ですよ。
エクセルマクロVBA:アプリケーション
エクセルのちょっとしたテクニックを紹介します。
処理が実行中なら「実行中・・・」と表示するようにするには、どうしますか?画面のちらつきを抑えるコードを書いている場合、ちょっと長い処理をさせると、処理中なのか、そうでないのかわからなくなるときがありませんか?マクロの処理中に文字列を表示させることが出来ます。
表示する場合のコードは、
Application.StatusBar = "実行中・・・"
表示を解除する場合のコードは、
Application.StatusBar = False
これで実行中ならステータスバーに文字が表示されるのでわかりますね。あと、ステータスバーに文字を表示させるコードを書いたら、必ず解除するコードも書いてくださいね。書かないと処理が終わっても、ステータスバーの文字がそのままになってしまいます。
これを応用して処理の進み具合を把握することが出来ます。そうです。ループ構文に組み込んで使用します。
以下のサンプルコードを試してみてくださいね。
'***************************************
'ステータスバーに進捗状況を表示する
'***************************************
Sub Test13()
Dim Rw As Long
Dim Lastrow As Long
For Rw = 1 To 5000
Cells(Rw, 1).Value = Rw
Application.StatusBar = Rw & "件書込み中・・・"
Next Rw
Application.StatusBar = False
MsgBox "書き込み終了、今度は消去します。"
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For Rw = 1 To Lastrow
Cells(Rw, 1).Value = ""
Application.StatusBar = Rw & "件消去中・・・"
Next Rw
Application.StatusBar = False
MsgBox "終了しました"
End Sub
処理が実行中なら「実行中・・・」と表示するようにするには、どうしますか?画面のちらつきを抑えるコードを書いている場合、ちょっと長い処理をさせると、処理中なのか、そうでないのかわからなくなるときがありませんか?マクロの処理中に文字列を表示させることが出来ます。
表示する場合のコードは、
Application.StatusBar = "実行中・・・"
表示を解除する場合のコードは、
Application.StatusBar = False
これで実行中ならステータスバーに文字が表示されるのでわかりますね。あと、ステータスバーに文字を表示させるコードを書いたら、必ず解除するコードも書いてくださいね。書かないと処理が終わっても、ステータスバーの文字がそのままになってしまいます。
これを応用して処理の進み具合を把握することが出来ます。そうです。ループ構文に組み込んで使用します。
以下のサンプルコードを試してみてくださいね。
'***************************************
'ステータスバーに進捗状況を表示する
'***************************************
Sub Test13()
Dim Rw As Long
Dim Lastrow As Long
For Rw = 1 To 5000
Cells(Rw, 1).Value = Rw
Application.StatusBar = Rw & "件書込み中・・・"
Next Rw
Application.StatusBar = False
MsgBox "書き込み終了、今度は消去します。"
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For Rw = 1 To Lastrow
Cells(Rw, 1).Value = ""
Application.StatusBar = Rw & "件消去中・・・"
Next Rw
Application.StatusBar = False
MsgBox "終了しました"
End Sub
エクセルマクロVBA:アプリケーション
エクセルのちょっとしたテクニックを紹介します。
エクセルマクロを記録して実行すると、同じシート内での処理でも画面がちらついたりしますよね。短い処理なら気にならないかもしれませんが、長い処理になると、気になってしまうのは私だけでしょうか?
画面のちらつきを抑えるコードを紹介します。
Application.ScreenUpdating = False
コードのはじめに書いておいてください。画面の更新をコード終了まで止めるので、画面がちらつかないようになります。また、処理速度を上げる効果もあるので、長い処理のときには、特に効果的です。
エクセルマクロを記録して実行すると、同じシート内での処理でも画面がちらついたりしますよね。短い処理なら気にならないかもしれませんが、長い処理になると、気になってしまうのは私だけでしょうか?
画面のちらつきを抑えるコードを紹介します。
Application.ScreenUpdating = False
コードのはじめに書いておいてください。画面の更新をコード終了まで止めるので、画面がちらつかないようになります。また、処理速度を上げる効果もあるので、長い処理のときには、特に効果的です。
エクセルマクロVBA:セルの操作
エクセルのちょっとしたテクニックを紹介します。
表などでデータが入力されていないセルが点在していて、その行全体を削除したいという場合、手作業では大変ですよね。VBAであらかじめコードを書いておけば、楽に処理できますよ。
'**********************************************
'アクティブセル列で空欄の場合、行全体を削除
'**********************************************
Sub Test12()
Dim Clmn As Long
Clmn = ActiveCell.Column
Application.ScreenUpdating = False
Columns(Clmn).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
上記のコードを使用した場合でも、空白のセルが残ることがあります。その場合は、残ったセルを調べてみてください。半角スペースや全角スペースが入っていることがあります。入っていたスペースを削除して再度上記のコードを実行すれば削除されます。



