[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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参照形式になってしまうのですが・・・
香織
変更はこのままでは「不可」です。 というのは、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.