絶対参照と相対参照を纏めて変更する【ExcelVBA】
■Application.ConvertFormulaメソッド 数式内のセル参照をA1→R1C1・相対参照絶対参照変換
■引数 Formula → 変換する数式
FromReferenceStyle →変換前の参照形式 xlA1 A1形式 xlR1C1 R1C1形式
ToReferenceStyle →変換後の参照形式 ※省略すると予期せぬ変換がされるケースがある これは原因が不明
ですので今回はここはxlA1を両方とも指定し、絶対参照・相対参照の変換のみ行う
引数ToAbsoluteにセルの参照スタイルを設定します
1 行・列(絶対参照) xlAbsolute
2 行(絶対参照)列(相対参照) xlAbsRowRelColumn
3 行・列(相対参照) xlRelative
4 行(相対参照)列(絶対参照) xlRelRowAbsColumn
そしてSpecialCellsメソッドでxlCellTypeFormulasで数式セルを指定しForEachステートメントで繰り返す
ただ、配列数式があると実行できないので、HasArrayプロパティで配列数式の一部か確認する
Trueであれば配列数式なのでFormulaArrayで対処、Falseであれば数式なのでFormulaで対処する
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際に使用したサンプルコード
Option Explicit
Public Sub sample()
'Range型でセルという変数を用意
Dim セル As Range
'数式が含まれるセルを順番にセットしながら繰り返す
For Each セル In Cells.SpecialCells(xlCellTypeFormulas)
'配列数式が含まれるセルであれば
If セル.HasArray Then
'配列数式用01
セル.FormulaArray = Application.ConvertFormula(Formula:=セル.FormulaArray, fromreferencestyle:=xlA1, toreferencestyle:=xlA1, toabsolute:=xlRelative)
Else
'通常の数式用
セル.Formula = Application.ConvertFormula(Formula:=セル.Formula, fromreferencestyle:=xlA1, toreferencestyle:=xlA1, toabsolute:=xlRelative)
End If
Next
End Sub