【補足】セル指定を数値に置き換えるマクロについて
Sub macro1()
Dim h As Range, h1 As Range
On Error Resume Next
For Each h In Cells.SpecialCells(xlCellTypeFormulas)
h.Formula = Application.ConvertFormula(Formula:=h.Formula, fromreferencestyle:=xlA1, toabsolute:=xlAbsolute)
For Each h1 In h.DirectPrecedents.Areas
If h1.Count = 1 Then
h.Replace what:=h1.Address(True, True, xlA1), replacement:=Mid(h1.Formula, IIf(Left(h1.Formula, 1) = "=", 2, 1), 999), lookat:=xlPart
End If
Next
Next
End Sub
というマクロを使った際のイレギュラーについての質問です。
前回→http://okwave.jp/qa/q7925134.html
まず検証用に再現できる例を提示します。
1.置き換えた後の数値がちょっとおかしい
A1:C10 と A12:C21
を適当な数字で埋めます(例ではA列は1 B列は2 C列は3で統一しています)
A23:C32
へ
A23には=SUM(A1,A12) B23には=SUM(B1,B12) C23には=SUM(C1,C12)
A24には=SUM(A2,A13) B24には=SUM(B2,B13) C24には=SUM(C2,C13)
といった具合にセルを引用する関数を並べます
23行目が意図しない結果になると思いますのでご確認ください。
(行数を変えると不具合の発生する位置も変わります)
素人考えですが、
A23の場合
SUMの中の「A1」を変換、「A12」のうちの「A1」の部分だけ変換。
その後二つ目のA1の返り値の後ろに2がついている風に見えます。
でもそれなら、なぜそれ以降も同様にならないのか、が解りません。
2.絶対参照止まり
隣接するセル(A1とB1、A2とA3等)を選択すると発生するようです。
=SUM(A1:B1)ではなく、=SUM(A1,B1)で発生してしまうことが今回の問題点です。
でもA1:B1やもっと広範のA1:C3のような複数セルの範囲指定にも対応出来たら便利ですね
と、この記事を書きながら気づきました。
拙い説明で心苦しいのですが、一緒に考えていただければ幸いです。
お礼
回答ありがとうございました。