プロが教える店舗&オフィスのセキュリティ対策術

シート内に入力済みのすべての数式を、一度に絶対参照に転換できる方法はありませんか。

A 回答 (5件)

VBAを使わないと出来ません。


参考のため、一応コードを貼っておきます。

Sub WK()
Dim c As Range
For Each c In Selection
If c.HasFormula Then
c.Formula = Application.ConvertFormula(Formula:=c.Formula, _
FromReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
End If
Next
Application.StatusBar = False
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
大変参考になりました。

お礼日時:2016/08/18 17:40

#4の回答者です。



「シート内に入力済みのすべての数式を、一度に絶対参照に転換」する理由

#3さんの質問を質問者に代わって私が回答するというのは、まったくもってでしゃばった行為ですし、質問者さんの回答とは同じだと思っているわけではないのですが、なぜ、こんなマクロのテクニックが残っているかお答えさせていただきたく思いました。

端的にいうと、この絶対参照に変更というのは、Lotus123->Excel の人には、あまり馴染みがないでしょうけれども、昔からのPCユーザーの最初の表計算は、Excelの前進ともいえる、同じ作者のMS-Multiplanで、各社各様にOEM販売され、富士通のワープロにさえバンドルされていました。その仕様が、R1C1方式で、Multiplan は、日本では、NEC 98モデルの普及とともに使い続けられ、その製品は1992年頃を、最後に約10年で終えました。

だから、一部の人には、R1C1方式は馴染みが深かったわけです。それで、ずっとR1C1方式で使い続ける人が残っていたわけです。

A1方式には相対参照と絶対参照の差はあまり大きく変化しないのですが、このR1C1方式は、相対参照と絶対参照では、まったく考え方が違うというか、相対参照には、セル位置の情報がないので、どこを参照しているのかまったく分からないわけです。そのために、絶対参照式に変える必要性を感じたわけです。今となっては、そんな要求する人は皆無だとは思いますが……。

さて、問題のマクロは、私の言葉どおりなら文句はないのでしょうから、このコンバートは、シートが、A1スタイル上でないと、今のところ、私の所では変換しません。
    • good
    • 0
この回答へのお礼

補足欄を使えないので、この欄をお借りして。

#2さんのご回答欄に#3さん宛ての内容を書いてしまいました。
#2さん、どうも失礼いたしました。
そして、#3さんともども大変参考になりました。

お礼日時:2016/08/18 17:51

すでに回答がでてしまいましたが、古典的マクロのひとつです。


私は、まだ、VBAを習いたてで、たぶん、#3さんはご存知かと思いますが、芳坂さん(日経BP21)が書いていたマクロと、自分が書いたものとを見比べたことを思い出します。私は、当時と、それほど変わらないかもしれません。未だに、わかっていないところがあります。

If Not r.HasArray Then 
この部分は、私は知りませんでした。

'//
Sub ConvertFormulas()
Dim rng As Range
Dim rf As Range
Dim r As Range
Set rng = ActiveSheet.UsedRange
On Error Resume Next
Const AB As Integer = xlAbsolute '絶対座標 'xlRelative '相対座標

Set rf = rng.SpecialCells(xlCellTypeFormulas)
If Err <> 0 Then Exit Sub
On Error GoTo 0
If Application.ReferenceStyle = xlR1C1 Then 'R1C1 方式はA1方式の戻す
  Application.ReferenceStyle = xlA1
End If
Application.ScreenUpdating = False
For Each r In rf.Cells
    If Not r.HasArray Then '配列数式は除外されます。
    r.Formula = Application.ConvertFormula( _
    Formula:=r.Formula, FromReferenceStyle:=xlA1, _
    toAbsolute:=AB, RelativeTo:=r)
    End If
Next
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
わたしのような素人に過分なる知識を開陳していただき恐縮です、
どうも猫に小判といった印象で・・
これに懲りずに、またよろしくお願い申し上げます。

お礼日時:2016/08/18 17:48

マクロを使用しない関数や置換機能ではできないけど、長年 Excel を使用して来た私には貴方が希望する機能の必要に遭遇したことがありません。


参考までに教えてください。「シート内に入力済みのすべての数式を、一度に絶対参照に転換」したくなったのはなぜですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
セルの位置を変更する必要が生じまして、その際、絶対参照にしとかないと、あとが面倒になることに気づいたという次第。
なぜすべてなのか?という疑問を持たれたのかもしれませんが、大幅な手直しをしたくなったわけです。
まあ、先を見通せない素人の悲しさといったところですかね。

お礼日時:2016/08/18 17:44

そんなことできやしない。



自分ならシートを丸ごと複製する。
そして絶対参照が必要な理由を考えてそこからどうするかを再考する。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
セルの位置を変更する必要が生じまして、その際、絶対参照にしとかないと、あとが面倒になることに気づいたという次第。
なぜすべてなのか?という疑問を持たれたのかもしれませんが、大幅な手直しをしたくなったわけです。
まあ、先を見通せない素人の悲しさといったところですかね。

お礼日時:2016/08/18 17:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!