S-JIS[2002-04-21] 変更履歴

ActiveCell

Selectionと似たものに、ActiveCellというものがあります。

Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2002 4 21  ユーザー名 : ひしだま
'

'
    Range("B2:D2").Select
    Range("C2").Activate
    ActiveCell.FormulaR1C1 = "a"
End Sub

複数範囲を選択し、タブキーを使って移動して値を入力するとこうなりました。

これもSelectionと同じように直すことができます。

Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2002 4 21  ユーザー名 : ひしだま
'

'
    Range("B2:D2").Select
    Range("C2").FormulaR1C1 = "a"
End Sub

法則: セルをActivateしてActiveCellで使うものは、一つにまとめられる。
例: ほげほげ.Activate
ActiveCell.動作
ほげほげ.動作

もうひとつ似たものがあります。

Sub Macro3()
'
' Macro3 Macro
' マクロ記録日 : 2002 4 21  ユーザー名 : ひしだま
'

'
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "a"
End Sub

SelectしてからActivateCellで使っています。
これは、Selectで複数セルを選択する(太枠で囲まれ背景色が変わる)と、 その内の1つのセルは必ずアクティブ(白い背景)になっていることを 利用しているのです。
1つのセルしか選択していない場合でも、たまたま1つしか選択されていないだけで、 考え方は同じです。

そこで、1つのセルしか選択されていない場合は、 次のように直すことができます。

Sub Macro3()
'
' Macro3 Macro
' マクロ記録日 : 2002 4 21  ユーザー名 : ひしだま
'

'
    Range("B2").FormulaR1C1 = "a"
End Sub

特定範囲全てに同じ値を入れたい場合でも、同じようにすることができます。
ふつうにマクロを記録すると

Sub Macro4()
'
' Macro4 Macro
' マクロ記録日 : 2002 4 21  ユーザー名 : ひしだま
'

'
    Range("B3:E3").Select
    ActiveCell.FormulaR1C1 = "a"
    Range("B3:E3").Select
    Range("C3").Activate
    ActiveCell.FormulaR1C1 = "a"
    Range("B3:E3").Select
    Range("D3").Activate
    ActiveCell.FormulaR1C1 = "a"
    Range("B3:E3").Select
    Range("E3").Activate
    ActiveCell.FormulaR1C1 = "a"
    Range("B3:E3").Select
End Sub

範囲選択(Select)が何度も入っていて、見るからに無駄です。

Sub Macro4()
'
' Macro4 Macro
' マクロ記録日 : 2002 4 21  ユーザー名 : ひしだま
'

'
    Range("B3").FormulaR1C1 = "a"
    Range("C3").FormulaR1C1 = "a"
    Range("D3").FormulaR1C1 = "a"
    Range("E3").FormulaR1C1 = "a"
End Sub

ActivateとActiveCellを1つにする法則も使って、すっきりしました。

しかし、選択された範囲全てに同じ値を入れる場合は、

Sub Macro4()
'
' Macro4 Macro
' マクロ記録日 : 2002 4 21  ユーザー名 : ひしだま
'

'
    Range("B3:E3").FormulaR1C1 = "a"
End Sub

だけで済みます。


マクロの記録の加工へ戻る / Excelへ戻る / 技術メモへ戻る
メールの送信先:ひしだま