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

内訳明細書で行全体を移動させるために、2つの行を入れ替えるマクロを作りました。
そこで、マクロを実行すると選択行全体が下へ移動するようになっていますが、
マクロで入れ替えた行だけ、セル内の数式が値となって表示されてしまいます。

下記画像で言うと金額の数式が表示されずに値のみ表示される状態です。
実行前と同じ数式のままにすることは可能でしょうか?


Private Sub CommandButton2_Click() '下へ行を移動

Dim tgtRange_1 As Range
Dim tgtRange_2 As Range
Dim tgtValue_1 As Variant
Dim tgtValue_2 As Variant
Dim 選択行 As Long


選択行 = Selection.Row

' 現在選択されているセルの行をRangeオブジェクトに代入
Set tgtRange_1 = Rows(Selection.Row)


' 入れ替え行をオブジェクトに代入
Set tgtRange_2 = Rows(選択行 + 1)

' それぞれの行の値を記憶
   tgtValue_1 = tgtRange_1
  tgtValue_2 = tgtRange_2

' それぞれの行の値を入れ替えてオブジェクトに代入
Application.ScreenUpdating = False
  tgtRange_1.Value = tgtValue_2
   tgtRange_2.Value = tgtValue_1
Application.ScreenUpdating = True

' オブジェクトを破棄
Set UserSelectCell = Nothing
Set tgtRange_1 = Nothing
Set tgtRange_2 = Nothing

Selection.Offset(1, 0).Select '挿入先の行がアクティブになるのを元のレコードになるよう戻しています

End Sub

「エクセルVBA 2つの行を入れ替えるマク」の質問画像

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

  • HAPPY

    Zincerさんへ
    作戦1で成功しました!
    案外簡単な事だったんですね。
    本当にありがとうございました。

      補足日時:2016/12/17 18:59

A 回答 (1件)

質問者の意には則していませんが、


>' それぞれの行の値を記憶
>   tgtValue_1 = tgtRange_1
>  tgtValue_2 = tgtRange_2

tgtValue_1 = tgtRange_1.Formula
tgtValue_2 = tgtRange_2.Formula
と「.Formula」プロパティーを付けると式が移動します。
ただし、このままですと下記の例のように式の対象は変更されませんので、もう一工夫必要なようです。


入れ替え前
A1:10、B1:20、C1:=A1*B1
A2:30、B2:40、C2:=A2*B2
入れ替え後
A1:30、B1:40、C1:=A2*B2
A2:10、B2:20、C2:=A1*B1


作戦1
「Selection.Rowをもちいて、対象となる式の行番号部分を書き換える」

作戦2
「行全体の選択」から「式の部分を除いたRangeオブジェクト」へ変更する

作戦3
作業用の行を設定して、「Copy」「Paste」メソッドで入れ替える

などへの変更が必要なようです。

以上、ご参考まで。
    • good
    • 0
この回答へのお礼

さっそくの回答ありがとうございます。
.Formulaでいけたんですね。
それで、ご提示の作戦3を自力で頑張ってみようかなと思ってます。作戦1と2は私には難しそうです。しばらく考えてみます。ありがとうございます。

お礼日時:2016/12/17 18:13

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

このQ&Aを見た人はこんなQ&Aも見ています