• 締切済み

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

エクセルにおいて絶対参照に変更する方法はわかったのですが、それを相対参照に戻す方法がわかりません。 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

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 #2の回答者です。 #3さんのおっしゃることで分かりました。 実際、こんなマクロを作ったことはありませんでしたからね。 ただ、私が、#2で考えていることをそのままにしておくと、間が抜けたことを書いているようにしかみえてこないと思いますので、それをコードで表現してみました。主旨が変わるわけではありません。 まず、A1 方式だけの問題に限定しておきます。R1C1方式でも可能だとは思いますが、必要はないだろうと思います。次に、本来、相対座標と絶対座標の融通性がないのではないでしょうか?実用性はありませんが、以下のように文字列として扱うというのが、私の主旨です。別に、そういうマクロコードに、大した実用性があるとは思えません。ただ、Replace やFind メソッドでは、$を抜くのは出来ても、入れるほうがしにくいだろうと思うだけです。 '------------------------------------------- Sub Test1() Static x As Integer 'トグルになっています。   Dim c As Variant   Dim rng As Variant   Dim ar() As Variant   Dim i As Long      If Application.ReferenceStyle = xlR1C1 Then     MsgBox "R1C1方式では、このマクロは実行できません。", vbExclamation     Exit Sub   End If   x = IIf(x < 2, 4, 1) '4--xlRelatiive; 1 -- xlAbsolute   Application.Calculation = xlCalculationManual   With ActiveSheet     '* A列に対して     Set rng = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))     ReDim ar(rng.Count)          For Each c In rng       If c.HasFormula Then         ar(i) = Application.ConvertFormula(c.Formula, xlA1, xlA1, x)       Else         ar(i) = c.Value       End If       i = i + 1     Next '最後のindex は、Empty の場合もあるけれど、そのままにします     rng.Value = WorksheetFunction.Transpose(ar())   End With   Set rng = Nothing   Application.Calculation = xlCalculationAutomatic End Sub

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

回答1、myRangeです。 ちょと安易な回答をしてしまったようです。(^^;;; 相対から絶対への変換は問題になるところはないのですが、 質問のように、絶対から相対への変換はちょと頭に入れておかなければいけないことがあります。 それは、相対参照は式の入っているセルが基準になる、ということです。 ですから、変換の時は基準になるセルを明示する必要があるということです。 その方法としては、 変換の直前で式のあるセルをselectしておく  c.Select  か 以下のように第5引数RelativeToを式のあるセルに設定します。 .Formula = Application.ConvertFormula(.Formula, xlA1, , xlRelative, c)   これで上手くいくはずです。 以上です。    

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 xlAbsolute から xlRelative に換えることぐらいはヘルプを見ても分かることなので、質問がヘンだと思いました。 コードを良く見ていただければ分かると思いますが、  ConvertFormula(.Formula, xlA1, , xlAbsolute) .Formula は、文字列ですから、それは単に、'$'を取っているに過ぎません。だから、数式としては、参照箇所がずれるようなことはありえません。 >しかしそれでは参照箇所がずれて戻ってしまったりとうまくできませんでした 実際に、そのようなことが起こりうるのか、言葉だけでは分かりませんから、どのような現象なのか、実際のところを教えていただいたほうが回答が付きやすいかと思います。 絶対座標・相対座標という言葉は、A1方式では中身が見えませんからありませんが、$A$1 とA1 とは、本来は、意味としてはまったく違います。実務上では、ConverFormula というのはめったに使われないのは、絶対参照と相対参照は交換してしまってはいけないことが多いのです。ですから、実務的には使用できるかは、何ともいえないのです。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

第4引数ToAbsolute の定数を、xlAbsoluteからxlRelativeに変えてやればできませんか?   .Formula = Application.ConvertFormula(.Formula, xlA1, , xlRelative)   以上です。  

rigu120
質問者

お礼

ありがとうございます。しかしそれでは参照箇所がずれて戻ってしまったりとうまくできませんでした

関連するQ&A

  • CnvFormula 絶対参照にsheet名を付けたい

    winxp he sp3, excel2003 CnvFormula 範囲指定して相対→絶対参照に変換します。 sheet1→sheet2にcopyした時、sheet名が必要です。 下記マクロにsheet名を追加したいのです。 Sub CnvFormula() With Selection.SpecialCells(xlCellTypeFormulas) .Formula = Application.ConvertFormula(.Formula, xlA1, xlA1, xlAbsolute) End With End Sub よろしくお願いします。

  • 選択範囲だけを相対値セルに変換

    選択範囲だけを相対値セルに変換 Sub test()   Dim c For Each c In Selection If c.HasFormula Then c.Formula = Application.ConvertFormula(Formula:=c.Formula, _ FromReferenceStyle:=xlA1, ToAbsolute:=xlRelative) End If Next End Sub セル行が変化してうまく動作しません どこを直せばよいのかわかりませんどなたかお教えください。

  • マクロの相対参照、絶対参照

    マクロを使い始めたばかりなんですけど 相対参照と絶対参照で困ってます 任意のセル(A1とする)を選択しておいてマクロの開始 B1のセルをコピー 最初のセル(A1)に貼り付け としたいんですけど B1のセルをコピー、を絶対参照にして 最初のセル(A1)に貼り付け、を相対参照にしてマクロに記録しました そのマクロをC1で使うと A1のセルにB1のセルを貼り付けてしまいます C1でマクロを使えばB1のセルをC1に貼り付けるようにはどうすればいいのでしょう 分かりにくい説明で申し訳ありません

  • エクセルのマクロ

    選択状態にあるセル(どのセルも一文字のみ入力されている)に"●"以外が入力されていたら、全て消去する。 上記を実行するマクロとして以下を試してみましたが、うまくいきません。どこがおかしいのでしょうか? Sub test()  For Each cell In Selection   If Selection.Value <> "●" Then   Selection.ClearContents   End If  Next End Sub

  • Excel VBAの相対参照について

    Excelで相対参照を勉強しようと思い、 A3を選択後 1.A3:F3を選択 2.A3:F3に黄色の網かけを設定 3.A5を選択 を相対参照で記録しました。(記録は1.~3.までです) VBAを確認すると Sub 罫線() ActiveCell.Range("A1:F1").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveCell.Offset(2, 0).Range("A1").Select End Sub という記述があったのですが、 なぜ、ActiveCell.Range("A1:F1").Selectと ActiveCell.Offset(2, 0).Range("A1").Selectというものがあるのでしょうか。 僕は、A1:F1の選択はしていませんし、網掛け後はA5を選択しているのに Range("A1").Selectの記述もよくわかりません。 ActiveCell.Offset(2, 0).Range("A1").Selectというのは 「選択したA1のセルから2行下、0列めを選択」と読めそうですが、 相対参照ならではの記述があるのでしょう。 ご存知の方、教え下さい。

  • excel マクロ Selection.Formula

    VBA初心者です。 excelの表に文字を記入して、それをカード化したいと思ってます。 テキストボックスをN回コピーして、それぞれに名前をつけて、またそれぞれにテキストが入力されたセルへ参照先を指定したいのですが、上手くいきません。 Dim n As Integer 'カードのコピー回数はD4のセルを参照 n = Range("input!D4").Value If n >= 1 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card1" Selection.Formula = "=formula!B6" End If If n >= 2 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card2" Selection.Formula = "=formula!B7" End If If n >= 3 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card3" Selection.Formula = "=formula!B8" End If If n >= 4 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card4" Selection.Formula = "=formula!B9" と延々と50回繰り返してます。 希望は150~200回繰り返したいのですが、 マクロ記録などや他の回答などを参考にしながら、 初心者なりに考えて、 Sub cardproductionA4() 'カードのコピー回数を指定 N=総回数 P=1~N回 Dim N As Integer, P As Integer N = Range("input!D4").Value 'カードのコピー For P = 1 To N If N >= P Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card" & CStr(P) Selection.Formula = "=formula!B(P+5)" End If Next P End Sub としました。 でも、参照先が漸次変わっていって欲しいのですが、 Selection.Formula の先がエラーで出来ません。 どのように記述すれば宜しいのでしょうか? あるいは、そもそもVBAを理解していないので、間違っているのかもしれませんが、 御教授お願い致します。

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

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

  • 相対参照→絶対参照

    複数のセルを、一気に相対参照から絶対参照にする方法はありますか?

  • Excel スピンボタン 相対参照について

    スピンボタンの相対参照について調べていたところ、ちょうどやりたいことと類似した物ありましたので、実際にやってみたのですがうまくいきません。 sub macro1()  with activesheet.shapes(application.caller)   .topleftcell.offset(0, 1) = .oleformat.object.value  end with end sub 上記のようにソースが書かれていましたので入力しても.oleformatのところでエラーになってしまいます。 ご教授お願い致します。

  • エクセルのマクロ

    エクセル2002でマクロを記録しました。 セルD5を選択した状態で、マクロの記録を始めました。(相対参照ボタンをクリックしています) D5のセルの色を黒にして、セルD6を選択して色を白にしました。ここで記録を終了しました。 VisualBasicEditorで見ると以下のような記述がありました。 そこで教えてください。 1)どの部分が相対参照をしているという意味の記述でしょうか? 2)どの部分がD6を選択したという記述でしょうか? 3)「Range("A1").Select」はどういう意味ですか?A1のセルはクリックしていないのですが・・・。 教えてください。 記述は以下です。 With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With ActiveCell.Offset(1, 0).Range("A1").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With End Sub

専門家に質問してみよう