• ベストアンサー

相対参照から絶対参照に変換する方法

エクセルで作った関数の相対参照から絶対参照に変換する方法について検索したところ、OKWeb内で以前回答があり、それを参考に実行したところ、ほとんどの相対参照が絶対参照に変換されたのですが、一部で「#VALUE!」となってしまいます。なぜでしょうか。 ちなみに、その関数というのが以下の通りです。 =IF(SUMIF(L108,"",L109)+SUMIF(L127,"",L128)+SUMIF(L155,"",L156)+SUMIF(L181,"",L182)+SUMIF(L238,"",L239)+SUM(L238,L181,L155,L127,L108)=L90,"",SUMIF(L108,"",L109)+SUMIF(L127,"",L128)+SUMIF(L155,"",L156)+SUMIF(L181,"",L182)+SUMIF(L238,"",L239)+SUM(L238,L181,L155,L127,L108)) 力業で作った関数なので、少し長くなってスミマセン。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#29107
noname#29107
回答No.4

#3です。ロジック自体は一緒ですが、よけいなオブジェクト参照をしないように変更しました。少しは速くなっていると思います。 Sub test() Dim c As Range, myrng As Range, s1, s2, fml, cnvfml For Each c In Selection If c.HasFormula Then   cnvfml = Application.ConvertFormula(Formula:=c.Formula, _     FromReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)   If Not IsError(cnvfml) Then     c.Formula = cnvfml   Else     fml = c.Formula     For Each myrg In c.Precedents       s1 = myrg.Address(ReferenceStyle:=xlA1, _       rowabsolute:=False, columnabsolute:=False)       s2 = myrg.Address(ReferenceStyle:=xlA1)       fml = Replace(fml, s1, s2)     Next     c.Formula = fml   End If End If Next End Sub

A-kamada
質問者

お礼

ありがとうございました。 非常に感動しております。 問題は全てクリアーされました。 これで仕事がはかどります。 本当にありがとうございました。

その他の回答 (4)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.5

こんにちは。maruru01です。 質問欄の数式のような一定の条件の場合のみの方法ですが。 数式の入ったセルに対して、メニューの[編集]→[置換]で、 「L」→「$L$」 で置換してはどうでしょうか。 L列以外がなく、数式で使用している関数名にも"L"が入っていないので、出来ると思います。

noname#29107
noname#29107
回答No.3

お示しのマクロだと、一定以上の長さの関数の場合、うまく変換できないようです。 ConvertFormula自体の制限と思われますので、回避するためには、別のロジックを追加する必要があります。 とりあえず、作ってみましたのでおためし下さい。 (長い関数がたくさんあると変換に少々時間がかかります) Sub test() Dim c As Range, myrng As Range For Each c In Selection If c.HasFormula Then   If Not IsError(Application.ConvertFormula(Formula:=c.Formula, _     FromReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)) Then     c.Formula = Application.ConvertFormula(Formula:=c.Formula, _       FromReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)   Else     For Each myrg In c.Precedents       s1 = myrg.Address(ReferenceStyle:=xlA1, _       rowabsolute:=False, columnabsolute:=False)       s2 = myrg.Address(ReferenceStyle:=xlA1)       c.Formula = Replace(c.Formula, s1, s2)     Next   End If End If Next End Sub

  • macchan1
  • ベストアンサー率38% (52/136)
回答No.2

>OKWeb内で以前回答があり、それを参考に実行したところ、ほとんどの相対参照が絶対参照に変換されたのですが、一部で「#VALUE!」となってしまいます。 具体的にどのような方法で絶対参照に変更したのでしょうか? 多分F4キーまたは置換操作で絶対参照にしたと思われますが、「#VALUE!」というエラーが出るのは数式内で文字列などが入ったセルを参照しているものと思われます。 この原因となっている数式を見つけるには、数式バー内の、たとえば「SUMIF(L108,"",L109)」の部分をカーソルで選択してF9キーを押して数値が返ってくるか調べてみてください。 数値が返っていた場合はその部分の数式には問題は無いのでEscキーを押して、同様に次の部分の数式を選択してF9キーで「#VALUE!」というエラーがでる数式を調べていきます。

A-kamada
質問者

補足

以下の問題に対する回答で、一部解決しました。 【問題】  数式を絶対参照に一括で変換をする方法はあるでしょうか?  例えば =A1+B1 といった数式を =$A$1+$B$1 へとしたいのですが、一箇所のセルだけではなく、複数のセルの数式の絶対参照への変換を一括で行う方法はないでしょうか? 【回答】 Sub test() 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 End Sub 【解説】  ToAbsolute:= のところで、変換後の参照の種類を指定します。 xlAbsolute     行列とも絶対参照に xlAbsRowRelColumn 行だけ絶対参照に xlRelRowAbsColumn 列だけ絶対参照に xlRelative     行列とも相対参照に というように、マクロを組み解決しました。 だいたいおっしゃっていることはわかったのですが、 「#VALUE!」とでるのは、数式内にでるのではなく、 カーソル全てが「#VALUE!」になってしまうのです。 原因がよくわからないのです。 しかし、おっしゃるように文字列がないかは確認したいと思います。

  • hyde19
  • ベストアンサー率29% (196/661)
回答No.1

絶対参照から相対参照にするのは、セル参照から単に$を外すだけですよね。 しかし、コピーをしたときに正しく値を参照できてないのではないでしょうか? ようするに取っては行けない$もあるのかなと推測します。 $は列と行で別々に付けられますので、右にコピーをするときは、参照が左の列にあるときは列には$が必要です。 例:「$A1」 まずは落ち着いて、長い数式を幾つかに分けてはいかがでしょうか。 そうすればどこに問題があるか分かってきます。

関連するQ&A

  • 複数のエクセル相対参照を絶対参照に一発変換したい。

    一つの相対参照を例えば横方向にいくつか複写して、 複写された各セルの相対参照を、絶対参照化する時 各セルにポイントをおいて「F4」プッシュで処理 しています。これを範囲指定して一度に変換する方法があれば大変助かるのですが。 良い方法があったら教えて下さい。

  • Excel 絶対参照と相対参照の違い。

    VLOOKUP関数を用いて数式を列に作ります。 範囲が違うシートのセルを指定します。 その場合、テキストでいくと相対参照にしなくてはならないのですがなぜでしょう? 相対参照と絶対参照の違いがExcelのヘルプで見ても理解できません。 わかる方、教えてください。

  • 相対参照にしたい

    エクセルで関数を入れているのですが、ドラッグしてコピーする時に $マークをつけていないのに相対参照にならず、数値が固定されてしまいます。逆に固定したい数値は1,2,3,4と増えていくので$マークで対応しています。絶対参照にする事は出来るのですが、逆に強制的に相対参照にすることは出来ますか? 今OKWAVEで相対参照と絶対参照という言葉を覚えたので、この二つの用語の使い方が間違っていたら済みません。 回答お願いいたします。

  • エクセル 相対参照を含む数式なのに、貼り付けると絶対参照の扱いになる

    エクセルで、数式内のセル番号に$を付けていない(つまり相対参照である)のに、貼り付けると絶対参照同様の扱いをされます。 例えば… O33に「SUM(O3:O32)」が入っている状態でI列~O列をコピーし、 Q列を選択して貼り付けると、W33は「SUM(W3:W32)」となると思うのですが、 なぜかW33は「SUM(O3:O32)」となります。 (絶対参照の扱い) ところがO列のみをコピーし、W列を選択して貼り付けると、 W33は「SUM(W3:W32)」となりました。 (相対参照の扱い) 調べてみたのですが、M2とN2のセルを結合していまして、 どうもその結合したセルM2・N2を含む列をコピーして貼り付けると そのような症状になるため、セルの結合が影響しているようなのですが、それが原因と考えて正しいでしょうか? 宜しくお願いします。

  • 絶対参照について。。。。

    SUMIF関数で店舗別売り上げの計算練習をしているのですが、「関数の引数」で範囲、合計範囲を絶対参照にする理由はなんでしょうか? 範囲、合計範囲はそのまま絶対参照にしなくても、結果はテキストとおりでますが・・・・。

  • エクセルでマクロを使って絶対参照を相対参照に戻す方法

    エクセルにおいて絶対参照に変更する方法はわかったのですが、それを相対参照に戻す方法がわかりません。 Sub tes1() Dim c As Range For Each c In Selection With c If .HasFormula Then .Formula = Application.ConvertFormula(.Formula, xlA1, , xlAbsolute) End If End With Next ですべての範囲を絶対参照にすることができました。 しかし、逆にその絶対参照を全てはずす方法がわかりません。 わかりましたら教えて頂けたらと思います。よろしくお願いします End Sub

  • Excel関数 シート内の全ての相対参照の計算式をいっぺんに絶対参照に変えたい!

    こんにちは。Excel関数についてお聞き致します。どうか教えてください。 仕事でたくさんのデータを扱っているのですが、 月ごとの売上げデータの累計表や集計結果などを利用して報告書を作成しています。 各月の売上げシートを元に作成した累計表や統合表を作った後で、数式を相対参照にしてしまったことに気づきました。 累計表のある一つのセルに「=SUM(1月売上げ!A1,2月売上げ!C1)」という計算式があるとします。そのセルの他にも参照しているセル番号は異なっているが同じ計算式が入力されています。 私は、上記の計算式を「=SUM(1月売上げ!$A$1,2月売上げ!$C$1)」という絶対参照に変えたいのです。他のセルにも同様に絶対参照記号をつけたいのです。 ところが、検索置換しようとしてもできないし、 ある一つのセルを絶対参照に変えてそれを他の全ての計算式にもオートフィルで反映させようと思っても、できません。絶対参照のマークが就いていない相対参照のときは、オートフィルで他のセルにも反映できるのですが、絶対参照の計算式を他のセルにも反映させようとしてオートフィルを使うと、全てが全く同じ計算式になってしまいます。 絶対参照なので、当たり前なのかもしれませんが、、 少々言っている意味が分かりにくいかもしれませんが、、 相対参照を絶対参照に変える作業は、一つ一つ手入力および一つ一つセルをクリックして絶対参照にしたい数式の部分にカーソルをもっていきF4を押す事でしか、絶対参照にできないのでしょうか(一つ一つ手作業でしか絶対参照に変えられないのでしょうか?)? 書店でExcelの関数やVBAの本にいくつかざっと目を通したのですが、いっぺんに絶対参照に変える方法はありませんでした。

  • エクセルのマクロ絶対参照と相対参照の指定方法

    私は、エクセルでマクロ自動記録を勉強しはじめたものです。 エクセル2000の参考書で絶対参照と相対参照の指定方法の説明をみると、 「マクロの記録中に表示される<記録終了>ツールバーの<相対参照>ボタンで切り替えます。 このボタンをくぼんでいない状態にすると絶対参照、クリックしてくぼんだ状態にすると相対参照で記録されます。」 以上のように解説されているのですが、実際に試してみると、 ステップ1. ツールバー→マクロ→新しいマクロの記録→マクロ名とショートカットキー入力→OK ステップ2.操作どうりに自動的にマクロが記入される。 ステップ3.ツールバー→マクロ→マクロの終了→クリック ステップ4.絶対参照のマクロが登録されてしまいます。 絶対・相対参照の切り替えステップをが見つけることが出来なくて困っています。 過去カテによれば マクロの記録時に「操作終了」というツールボックスが表示されますよね? 2つあるボタンのうちの右側のボタンが相対参照と絶対参照を切り替えるためのボタンになっています. もしも「操作終了」のボタンが表示されないのであれば,一度ダミーでマクロの記録を実行して,記録中にメニューの下の空白部分(灰色の部分)を右クリックし,「記録終了」をチェックすると,ツールボックスが表示されるようになります。 これも試しましたが、マクロの記録時に「操作終了」も 記録中にメニューの下の空白部分(灰色の部分)も見付ける事が出来ません。 WindowsMe Office2000Personalに於いては、絶対・相対参照の切り替えは不可能なのでしょうか? 可能なら絶対・相対参照の切り替えボタンを表示させる方法を教えて頂きたいと思います、よろしくお願いします。

  • VBA セルにSUM関数を相対参照で埋め込む時に変数を使用したい

    VBAを使用して、セルに相対参照でSUM関数を仕込もうと考えています。 Cells(goukei_start_row, 10) = "=SUM(R11C10:R" & goukei_start_row - 1 & "C" & 10 & ")" 上記でやると、絶対参照で =SUM($J$11:$J$43) となってしまうのですが、 $を付けず=SUM(J11:J43)のような形にするにはどうすればよいのでしょうか?

  • エクセルの複数のセルを一括で絶対参照にする方法

    エクセルの絶対参照についての質問です。 複数のセルに関数がある時,その複数のセルの関数に含まれる参照先を一括で相対参照から絶対参照に変える方法はありますでしょうか?

専門家に質問してみよう