だがセルを相対的に参照しているため、移動した時点で参照先が変わってしまい結果がおかしくなってしまう。
解決するには、「=$A$1」、「=$A$1+$A$2」のように全て絶対参照に修正すればよい。
反対に、絶対参照で数式を入力したあとに、やっぱり相対参照がよかった。
なんてこともよくあることだ。
しかし、「=A1+A2」と「=$A$1+$A$2」を毎回手作業で修正するのは馬鹿らしい。
それを一括で行うマクロが以下になる。
※以下の例は、行・列ともに全て変換する方法だ。
行のみ、列のみは「マクロの内容説明」を参照してほしい。
選択範囲を絶対参照に変換する
Sub 選択範囲を絶対参照に変換()
Dim myRange As Range
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each myRange In Selection
If myRange.HasFormula Then
myRange.Formula = Application.ConvertFormula( _
Formula:=myRange.Formula _
, fromReferenceStyle:=xlA1 _
, ToAbsolute:=xlAbsolute)
End If
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
選択範囲を相対参照に変換する
Sub 選択範囲を相対参照に変換()
Dim myRange As Range
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each myRange In Selection
If myRange.HasFormula Then
myRange.Formula = Application.ConvertFormula( _
Formula:=myRange.Formula _
, fromReferenceStyle:=xlA1 _
, ToAbsolute:=xlRelative)
End If
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
マクロの内容説明
Application.EnableEvents
とApplication.ScreenUpdating
はマクロ実行時に画面のちらつき防止や処理速度向上のためのおまじない。 行のみ、列のみなどの詳細な参照方法指定は以下の通り。
ToAbsolute:=
- xlAbsolute … 行列ともに絶対参照(例:=$A$1)
- xlAbsRowRelColumn … 行だけ絶対参照(例:=A$1)
- xlRelRowAbsColumn … 列だけ絶対参照(例:=$A1)
- xlRelative … 行列ともに相対参照(例:=A1)
以上
0 件のコメント :
コメントを投稿