絶対参照と相対参照を纏めて変更する【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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です