[[20060220231549]] 『RC[-18]:RC[-17] マイナスってどういういみですか』(香織) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『RC[-18]:RC[-17] マイナスってどういういみですか?』(香織)

[(RC[-18]:RC[-17]) マイナスってどういういみですか?]

下記のマクロの意味を教えていただきたいのですが・・・
お願いします。

    Range("Z6").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = _
        "=IF(SUM(RC[-18]:RC[-17])=0,"""",SUM(RC[-18]:RC[-17]))"
    Range("Z6").Select
    Selection.Copy
    Range("Z6:Z65").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Range("I6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


    Range("Z6").Select →Z6を選択
    Application.CutCopyMode = False →コピーモード終了
    ActiveCell.FormulaR1C1 = _
        "=IF(SUM(RC[-18]:RC[-17])=0,"""",SUM(RC[-18]:RC[-17]))"
     →Z6セルに↑この式を入力(R1C1参照形式ですね。この場合H6:I6と同義)
    Range("Z6").Select →Z6を選択
    Selection.Copy   →Z6をコピー
    Range("Z6:Z65").Select →Z6:Z65を選択
    ActiveSheet.Paste  →ペースト
    Application.CutCopyMode = False →コピーモード終了
    Selection.Copy →選択しているセル(Z6:Z65)をコピー
    Range("I6").Select →I6を選択
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    →I6に形式を選択して、値のみ貼り付け
 以上。

 次のコードでも同様の結果が得られます。
    Range("Z6:Z65").FormulaR1C1 = _
         "=IF(SUM(RC[-18]:RC[-17])=0,"""",SUM(RC[-18]:RC[-17]))"
    Range("I6:I65").Value = Range("Z6:Z65").Value

 ・・・でも、これって、I列を足し算しているのに、I列に上書きしているけど、大丈夫ですか?
 (ROUGE)


回答ありがとうございます。

本日分の売り上げ(H列)と先日までの売り上げ累計(I列)があってH列とI列の合計を本日までの累計(I列)としたかったので・・・、I列は日々累計ということでプラスされていきます。 Z列は一時的に計算で使っただけです。

 Z6セルに入れる数式は、下記を
  ActiveCell.FormulaR1C1 = _
        "=IF(SUM(RC[-18]:RC[-17])=0,"""",SUM(RC[-18]:RC[-17]))"

変更↓↓↓↓

        "=IF(SUM(H6:I6)=0,"""",SUM(H6:I6))"

とするだけでいいのでしょうか?マクロの記録でするとどうしてもR1C1参照形式になってしまうのですが・・・

  香織


「ツール」「オプション」で「全般」のシートでR1C1 参照形式を使用するにチェックが入っていませんか
(shota)

 変更はこのままでは「不可」です。
 というのは、Z6:Z65のすべてのセルに同じ数式が入ってしまうからです。
 R1C1参照形式であれば、問題はありませんが。
 今回の場合、"RC[-18]"と書いてありますが、これは「R(行;Row)が同じで、
 C(列;Column)が-18のセル」を意味しています。
 従って、同じ数式が入っても問題ありません。
 (ROUGE)

 せっかくマクロで実行するのであれば、Z列に数式を入れる必要もないので、次のコードも試して下さい。

 Sub test()
 Application.ScreenUpdating = False
 Dim myR As Long
 Dim i As Long
 Dim myTotal As Currency
 myR = Range("H" & Rows.Count).End(xlUp).Row
 Range("I6:I" & myR).ClearContents
 For i = 6 To myR
 If i = 6 Then
 If Cells(i, 8).Value = "" Then
 Exit Sub
 Else
 myTotal = Cells(i, 8).Value
 End If
 Else
 myTotal = Application.WorksheetFunction.Sum(Range("H6:H" & i))
 End If
 Cells(i, 9).Value = myTotal
 Next
 Application.ScreenUpdating = True
 End Sub

 いかがですか?
 (ROUGE)

そのまま貼り付けしてやりましたが、うまくできませんでした。

マクロのコードがわからないためもしよろしければ説明お願いいたします。

計算範囲詳細は

   @本日分の売り上げ(D6:D65)と先日までの売り上げ累計(E6:E65)

   A本日分の売り上げ(H6:H65)と先日までの売り上げ累計(I6:I65)

※参照形式を使用するにチェックははいっていませんでした。

お手数おかけしますがよろしくお願いいたします。


 私のでは動きましたよ。
 標準モジュールに貼り付けましたか?
 D、E列をさりげなく増やされましたね(^▽^)ハッハッハ
 基本的なコードは一緒です。
 ----------
 Sub test2()
 Application.ScreenUpdating = False               '画面のちらつきを停止
 Dim myR As Long                                  '変数の宣言(長整数)
 Dim i As Long                                    'カウンタ用変数の宣言(長整数)
 Dim myTotal As Currency                          '変数の宣言(お金)
 myR = Range("D" & Rows.Count).End(xlUp).Row      '最終行の取得
 Range("E6:E" & myR).ClearContents                'マクロで出した値を格納するセルを空っぽにする
 For i = 6 To myR                                 '繰り返し処理(iが6からmyRまで)
 If i = 6 Then                                    '条件分岐(もしi=6だったら)
 If Cells(i, 4).Value = "" Then                   '条件分岐(もしD4セルになにもなかったら)
 Exit Sub                                         'マクロ終了!
 Else                                             'そうでなければ
 myTotal = Cells(i, 4).Value                      '合計はD4セルの値
 End If                                           '(もしD4セルになにもなかったらはおわり)
 Else                                             'もしi=6でなかったら
 myTotal = Application.WorksheetFunction.Sum(Range("D6:D" & i))
                                                  '合計はD6からDi(例えばD65)の合計
 End If                                           '条件分岐おわり!
 Cells(i, 5).Value = myTotal                      'E列の値は上の条件で求めた合計を入れる
 Next                                             'もう一回やってみよう。
 Application.ScreenUpdating = True                'ちらつき防止終わり
 End Sub                                          'この処理は終わり!

 ちょっとみにくいですが、いかがですか?
 (ROUGE)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.