2011年3月8日火曜日

エクセル 絶対参照と相対参照 【備忘録】

先日必要に迫られて,相対参照を絶対参照に変換した。
一個ずつ大変だったので,下記のマクロを探し当てた。
一括変換してくれて,とても助かった。
世の中には頭のいい,そしてとても親切な方がいらっしゃるなぁ。。。。


以下参照
----------------------------------------------
エクセルのセル参照の一括変換 絶対参照⇔相対参照


2009/06/24(水)
エクセルのセルの参照方式(絶対参照・相対参照)を一括にまとめて変更できる方法がないかインターネット上で探していた。
すると相対参照から絶対参照に変換する方法は見つかったが、逆の絶対参照から相対参照に変換する方法が見当たらない。
僕が必要だったのは、絶対参照から相対参照に変換する方法だった。


しょうがないので見つかった情報を元に自分でマクロを作り、後でも使えるようにブログで記事に残すことにした。




これはおまけで相対参照と絶対参照については、エクセルのヘルプに載っている文章を載せてみました。

相対参照と絶対参照

実行する処理によって、数式が入力されているセルを基点にして他のセルを参照する相対参照、
または特定の位置にあるセルを常に参照する絶対参照を使うことができます。
絶対参照を作成するには、"$A$1" のように、文字や番号の前にドル記号 ($) を挿入します。
セル参照が入力されたセルをコピーすると、相対参照はコピー先の位置に応じて調整され、絶対参照は調整されません。



話は戻って、できたマクロがこちら。
【絶対参照 ⇒ 相対参照】一括変換

Sub 相対参照()
Dim myRange As Range
On Error Resume Next
If Not ActiveWindow Is Nothing Then
For Each myRange In Selection.SpecialCells(xlCellTypeFormulas)
If myRange.HasArray = False Then
myRange.Formula = Application.ConvertFormula _
(myRange.Formula, xlA1, , xlRelative, myRange)
Else
myRange.FormulaArray = Application.ConvertFormula _
(myRange.FormulaArray, xlA1, , xlRelative, myRange)
End If
Next
Else
Exit Sub
End If
End Sub


【相対参照 ⇒ 絶対参照】一括変換

Sub 絶対参照()
Dim myRange As Range
On Error Resume Next
If Not ActiveWindow Is Nothing Then
For Each myRange In Selection.SpecialCells(xlCellTypeFormulas)
If myRange.HasArray = False Then
myRange.Formula = Application.ConvertFormula _
(myRange.Formula, xlA1, , xlAbsolute, myRange)
Else
myRange.FormulaArray = Application.ConvertFormula _
(myRange.FormulaArray, xlA1, , xlAbsolute, myRange)
End If
Next
Else
Exit Sub
End If
End Sub

これをどのように活用するかというと、




【一括変換手順】


①『Alt』キーを押しながら『F11』キーで『VBE(Microsoft Visual Basic Editor)』の画面を表示させる。

②『Alt』キーを押したまま『I』キー⇒、『M』キーの順に押し、空白画面(標準モジュール)を表示させる。

③この画面に上のマクロ(Sub~End Sub)をコピー&ペーストする。

④『Alt』キーを押しながら『F11』キーでExcelの画面に戻る。

⑤数式を変更したい範囲を選択する。

⑥『Alt』キーを押しながら『F8』キーを押す。

⑦『マクロ』の一覧から【絶対参照】もしくは【相対参照】を選択する。

⑧『実行』ボタンを押す。


以上。




ちなみに上に書いたマクロの色違いの部分を下記の表に基づき修正すれば、行だけ絶対参照、列だけ絶対参照への変換も可能。

 定数
意味

xlAbsolute 行列とも絶対参照 $A$1
xlAbsRowRelColumn 行だけ絶対参照 A$1
xlRelRowAbsColumn 列だけ絶対参照 $A1
xlRelative 行列とも相対参照 A1


http://footballdaddy.blog44.fc2.com/blog-entry-197.html

0 件のコメント: