プロが教えるわが家の防犯対策術!

こんにちは エクセル2010を使っています。

複数のセルを一括して貼りつける場合にその数式に含まれるセル番地に一括して絶対値を付与して貼りつける方法はありますか?

もしくは、元セルのセルに含まれるセル番地に一括して絶対値を付与する方法でも構いません。

詳しい方、よろしくお願いいたします。

質問者からの補足コメント

  • コピペではなく絶対値を付与する方法でしたね、解決しました!
    ありがとうございました!

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/12/09 12:57

A 回答 (4件)

計算式の列記号や行番号の前に「$」を付けるマクロという事ですか?

    • good
    • 0
この回答へのお礼

こんばんわ、前回は回答いただきありがとうございます。

その通りです。

A1 =(E142+E163+E184+E205+E226+E247+E541)/7
B1 =(F142+F163+F184+F205+F226+F247+F541)/7
C1 =(G142+G163+G184+G205+G226+G247+G541)/7

みたいな感じで数式が入っているのですが、貼りつける際に参照元が変わってしまうのを防ぐために、一括で絶対値を付与するか、上記のデータ全てに絶対値を付与したいと言う事です。
(実際はもっとたくさんのコピペがあります。)

マクロは依然ボタンクリックのみ出来るようで、もしマクロで解決する方法であれば、ボタンクリックで行いたいと思います。

お礼日時:2019/12/09 02:07

こんばんは、このようなのでいかがでしょう。


一例です。

Sub Sample()
Dim cel As Range
  With ActiveSheet
    For Each cel In .UsedRange
      If Range(cel.Address).HasFormula = True Then
        cel.Formula = Application.ConvertFormula(cel.Formula, xlA1, xlA1, xlAbsolute)
      End If
    Next cel
  End With
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答いただき ありがとうございます。
知識が足りなくて申し訳ありませんが、コピー元のデータ範囲と、貼り付け先のデータ範囲の指定は出来るのでしょうか?

お礼日時:2019/12/09 12:51

以下の様な物はいかがでしょうか?選択されている部分を変更します。



Sub 絶対参照へ変換()
Dim セル As Range
For Each セル In Selection
If セル.HasFormula Then
セル.FormulaLocal = Application.ConvertFormula(セル.FormulaLocal, xlA1, xlA1, xlAbsolute)
End If
Next
End Sub

※「xlAbsolute」を以下のように変更すると次のように出来ます。
「xlRelative」にすると、相対参照になります。
「xlAbsRowRelColumn」にすると、行は絶対参照、列は相対参照になります。
「xlRelRowAbsColumn」にすると、行は相対参照、列は絶対参照になります。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
わっ、凄いです、あれだけ時間が掛かった作業も一発で、とても助かりました、ありがとうございました!

お礼日時:2019/12/09 12:56

#2です


>知識が足りなくて申し訳ありませんが、コピー元のデータ範囲と、貼り付け先のデータ範囲の指定は出来るのでしょうか?
コピー、貼り付け時のデータ範囲に対応する(書き方が少し変わります)ことも出来ますが、範囲が不明です。

>もしくは、元セルのセルに含まれるセル番地に一括して絶対値を付与する方法
として、回答しましたが、データ範囲を限定したいと言う事でしたか、残念。

範囲が示されていないのでその場合、GooUserラック氏の回答にあるようにSelectionが良いでしょう。
普通に考えるとSelectionの方が汎用性ありますよね。。

寝る前だったので、考えず、>複数のセルを一括して で.UsedRange(アクティブシートの使用しているセル範囲全て)にしました。

Sub Sample()
Dim cel As Range ’セル
  With ActiveSheet ’アクティブなシート(複数選択の場合、表示されているシート)
    For Each cel In .UsedRange ’使用されているセル範囲すべて
      If Range(cel.Address).HasFormula = True Then ’セルの内容に数式があるかHasFormulaプロパティで調べる
        cel.Formula = Application.ConvertFormula(cel.Formula, xlA1, xlA1, xlAbsolute)’ ConvertFormulaで数式を操作する。これにつては#3にあります。
      End If
    Next cel
  End With
End Sub
    • good
    • 0
この回答へのお礼

こんにちは、返事が遅くなってすみません、

ご丁寧に最後まで教えて頂き、ありがとうございます。

おかげさまで目的が果たせました、行 列 まで応用できるのも知りました。

大変ありがたく思います、ありがとうございました!

お礼日時:2019/12/12 15:23

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