VBA-3 セルに名前を付ける

Excelの画面左上に「A1」とか今選択しているセルの名前が表示される窓があります。
ここをクリックして文字を入力すると、そのセルに自分で名前を付けることができます。

今度はこれを自動化します。


セルA5に「せる」と名前を付ける
1.
2.
3.
4.
'マクロの記録そのまま
Sub setName()
    ActiveWorkbook.Names.Add name:="せる", RefersToR1C1:="=sheet1!R5C1"
End Sub

変数を使って書き換え
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub setName()
    Dim i, j As Integer
    Dim str As String    'ワークシートの名前
    Dim name As String   'セルにつける名前
    str = ActiveSheet.name
    i = 5
    j = 1
    name = "せる"
    ActiveWorkbook.Names.Add name:=name, _
        RefersToR1C1:="=" & str & "!R" & i & "C" & j
End Sub

文字列の扱いが力任せな気がしますが、ほかの方法を思いつかなかったんです。
でも、&で文字列がつなげるのは便利ですね。

自分で付けた名前(ここでは「せる」)を消す
1.
2.
3.
Sub delN()
    ActiveWorkbook.Names("せる").Delete
End Sub

全ての名前を消す
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub delN()
    Dim name As String
    Dim i As Integer
    i = 1
    For Each nm In ActiveWorkbook.Names
        name = nm.NameLocal
        ActiveWorkbook.Names(name).Delete
        i = i + 1
    Next
End Sub


ループなんかを使ってたくさんのセルを処理させるとき、
セルを選択→処理
を繰り返すため画面が下や横に高速で流れていきます。

別に、流れていく画面を見る必要がないなら、マクロ実行中画面を更新しないようにするといいです。
画面更新の一時停止
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub macro()    
    '画面を更新しない
    Application.ScreenUpdating = False

    'なんかの処理

    '画面を更新する
    Application.ScreenUpdating = True
End Sub

0 件のコメント:

コメントを投稿