VBAの勉強を始めてみた

色々試しています。

数式を絶対参照にする

数式内のセル参照を絶対参照に変更するには・・・・・・絶対参照にしたい部分にカーソルを合わせてF4キーを押せば、下記のように順番に切り替わっていきます。

 

f:id:kouten0430:20170820124350j:plain

行列とも絶対参照

 

f:id:kouten0430:20170820124416j:plain

行のみ絶対参照

 

f:id:kouten0430:20170820124434j:plain

列のみ絶対参照

 

f:id:kouten0430:20170820124452j:plain

行列とも相対参照(に戻る)

 

でも、変更したい数式が何十個、何百個とあったらこんなことを手動でいちいちやってられません。

VBAなら一瞬でできる方法があるだろうと、調べてみたら・・・・・・ありました。

 

Application.ConvertFormula メソッド

 

という、数式を相対参照⇔絶対参照に切り替えてくれる気の利いたメソッドがあるそうです。ここまで用意するなら、いっそのことEXCELの標準機能にしたらいいんじゃないかと思うのは自分だけでしょうか・・・・・・?_(:3 」∠ )_

 

構文
Application.ConvertFormula(Formula, FromReferenceStyle, ToReferenceStyle, ToAbsolute, RelativeTo)

 

引数
Formula(必須)     ・・・・・・変換対象となる数式。または数式の入ったセル等
FromReferenceStyle(必須)・・・・・・変換前の数式の参照形式。A1形式かR1C1形式かを

                定数で指定する(大半はA1形式かと思います)
ToReferenceStyle(省略可)・・・・・・変換後の数式の参照形式。A1形式かR1C1形式かを

                定数で指定する(A1形式で問題ないかと。省略で無

                変換)                
ToAbsolute(省略可)   ・・・・・・変換後の数式を絶対参照か相対参照かを定数で指定

                する。(省略で無変換)
RelativeTo(省略可)   ・・・・・・相対参照の基点となるセルを指定する。(たぶんほ

                とんど使わないでしょう)

 

引数に使用する定数
xlA1:A1形式
xlR1C1:R1C1形式
xlAbsolute:行列とも絶対参照
xlAbsRowRelColumn:行のみ絶対参照
xlRelRowAbsColumn:列のみ絶対参照
xlRelative:行列とも相対参照

 

以下はApplication.ConvertFormulaメソッドを使った簡単なプログラムです(選択範囲内の数式を行列とも絶対参照にします)

 

***************************************

Sub 数式を行列とも絶対参照にする()
    Dim myRange As Range

    For Each myRange In Selection.SpecialCells(xlCellTypeVisible)
        If myRange.Value <> "" Then   'セルの値が空白の場合は処理をしない
            myRange.Formula = Application.ConvertFormula(Formula:=myRange.Formula, _
            FromReferenceStyle:=xlA1, ToReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
        End If
    Next myRange
   
End Sub

***************************************
※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら