エクセルマクロVBA:セルの操作
エクセルVBAで処理をしているときに、セルに数式を設定・取得する方法です。
数式を設定する場合
Cells(1, 1).Formula = "=SUM(C1,C2)"
数式を取得する場合
Cells(1, 2) = Cells(1, 1).Formula
以下のサンプルコードで試してみてくださいね。
'****************************************
'セルに数式を設定する
'****************************************
Sub Test14()
'C列に数字を設定
Cells(1, 3).Value = 10
Cells(2, 3).Value = 20
'A列に数式を設定
Cells(1, 1).Formula = "=SUM(C1,C2)"
Cells(2, 1).Formula = "=C1*C2"
'B列に数式を取得
Cells(1, 2) = Cells(1, 1).Formula
Cells(2, 2) = Cells(2, 1).Formula
End Sub
※上記の計算式がA1形式ですが、R1C1形式の場合は、FormulaをFormulaR1C1に変更します。
数式を設定する場合
Cells(1, 1).Formula = "=SUM(C1,C2)"
数式を取得する場合
Cells(1, 2) = Cells(1, 1).Formula
以下のサンプルコードで試してみてくださいね。
'****************************************
'セルに数式を設定する
'****************************************
Sub Test14()
'C列に数字を設定
Cells(1, 3).Value = 10
Cells(2, 3).Value = 20
'A列に数式を設定
Cells(1, 1).Formula = "=SUM(C1,C2)"
Cells(2, 1).Formula = "=C1*C2"
'B列に数式を取得
Cells(1, 2) = Cells(1, 1).Formula
Cells(2, 2) = Cells(2, 1).Formula
End Sub
※上記の計算式がA1形式ですが、R1C1形式の場合は、FormulaをFormulaR1C1に変更します。
エクセルマクロ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
コードのはじめに書いておいてください。画面の更新をコード終了まで止めるので、画面がちらつかないようになります。また、処理速度を上げる効果もあるので、長い処理のときには、特に効果的です。