Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6273 / 13646 ツリー ←次へ | 前へ→

【46242】合計にある数値を掛けた数値計算 とら 07/1/27(土) 19:52 質問[未読]
【46243】Re:合計にある数値を掛けた数値計算 かみちゃん 07/1/27(土) 20:08 発言[未読]
【46244】Re:合計にある数値を掛けた数値計算 とら 07/1/27(土) 20:20 発言[未読]
【46245】Re:合計にある数値を掛けた数値計算 とら 07/1/27(土) 20:37 発言[未読]
【46246】Re:合計にある数値を掛けた数値計算 かみちゃん 07/1/27(土) 20:41 発言[未読]
【46247】Re:合計にある数値を掛けた数値計算 Kein 07/1/27(土) 21:30 回答[未読]
【46249】Re:合計にある数値を掛けた数値計算 とら 07/1/27(土) 23:21 発言[未読]
【46252】Re:合計にある数値を掛けた数値計算 かみちゃん 07/1/28(日) 11:01 発言[未読]
【46257】Re:合計にある数値を掛けた数値計算 とら 07/1/28(日) 17:02 お礼[未読]
【46250】Re:合計にある数値を掛けた数値計算 とら 07/1/27(土) 23:23 発言[未読]
【46260】Re:合計にある数値を掛けた数値計算 Kein 07/1/28(日) 20:35 回答[未読]
【46263】Re:合計にある数値を掛けた数値計算 とら 07/1/28(日) 23:28 お礼[未読]

【46242】合計にある数値を掛けた数値計算
質問  とら  - 07/1/27(土) 19:52 -

引用なし
パスワード
   ある行からある行の合計に*0.7[百円単位で丸める四捨五入]
G列とします
   G
   空白
   100
   250
   500
  1,000
  1,300←ここに合計*0.7の集計値を計算[1850*0.7=1295=1300]

マクロ記録は下記でした。
ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)*0.7"
VBAで計算したいのですがよろしくお願いします。

【46243】Re:合計にある数値を掛けた数値計算
発言  かみちゃん  - 07/1/27(土) 20:08 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)*0.7"
>VBAで計算したい

まず、数式がおかしいです。VBAよりも一般操作の数式をきちんと確認しましょう。
=SUM(R[-2]C:R[-1]C)*0.7
の部分は、
=ROUND(SUM(R[-2]C:R[-1]C)*0.7,-2)
とします。
また、範囲の設定もおかしいので、そこは、適宜修正してください。

ご質問の趣旨がある行からある行の決め方であるならば、その考え方を教えてくださいね。

【46244】Re:合計にある数値を掛けた数値計算
発言  とら  - 07/1/27(土) 20:20 -

引用なし
パスワード
   ▼かみちゃん さん:

>=ROUND(SUM(R[-2]C:R[-1]C)*0.7,-2)
>とします。
>また、範囲の設定もおかしいので、そこは、適宜修正してください。
>
>ご質問の趣旨がある行からある行の決め方であるならば、その考え方を教えてくださいね。

ある行からある行の決め方
G列とします
G列のある行最初は必ず空白があり
その下から金額を入力
   100
   250
   500
  1,000← ここまで入力が出来た時点で1300の行へ移動しフォームのボタンを
      クリック1300を出したいのですができますか。要するに連続して
      数値が入っている行を対象に範囲設定したいのですがコードの
      組み方がよく解りません。入力済み最終行と言うことでもないので
  1,300

この下には既に計算値が入力済みの場合もあります。

【46245】Re:合計にある数値を掛けた数値計算
発言  とら  - 07/1/27(土) 20:37 -

引用なし
パスワード
   範囲がわかりにくいでしょうか
要するに入力済み最終から1つ下に計算結果を出したいのですが
結果を出すセルの1つ上から空白行の1つ下が範囲となります。

【46246】Re:合計にある数値を掛けた数値計算
発言  かみちゃん  - 07/1/27(土) 20:41 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>範囲がわかりにくいでしょうか
>要するに入力済み最終から1つ下に計算結果を出したいのですが
>結果を出すセルの1つ上から空白行の1つ下が範囲となります。

ご返事が大変遅くなり申し訳ありません。

Sub Sample()
 Dim rngSum As Range
 
 With ActiveCell
  '数式のセル範囲を決定
  If .Offset(-2).Value <> "" Then
   Set rngSum = Range(.Offset(-1).End(xlUp), .Offset(-1))
  Else
   Set rngSum = .Offset(-1)
  End If
  '数式を設定
  .Formula = "=ROUND(SUM(" & rngSum.Address(0, 0) & ")*0.7,-2)"
 End With
End Sub

【46247】Re:合計にある数値を掛けた数値計算
回答  Kein  - 07/1/27(土) 21:30 -

引用なし
パスワード
   G列に限定するとして、複数の計算範囲を一気に処理するなら

Sub Test_MySum()
  Dim MyR As Range, C As Range
  Dim Ad As String
 
  On Error Resume Next
  With Range("G:G")
   Set MyR = .SpecialCells(2, 1)
   If MyR Is Nothing Then Exit Sub
   .SpecialCells(3).ClearContents
   .Font.ColorIndex = xlColorIndexAutomatic
  End With
  On Error GoTo 0: Err.Clear
  For Each C In MyR.Areas
   Ad = C.Address
   With C.Cells(1).Offset(C.Count)
     .Formula = "=ROUND(SUM(" & Ad & ")*0.7,-2)"
     .Font.ColorIndex = 5
   End With
  Next
  Set MyR = Nothing
End Sub

数式を入れたセルは、青色の文字にして分かりやすくしています。

【46249】Re:合計にある数値を掛けた数値計算
発言  とら  - 07/1/27(土) 23:21 -

引用なし
パスワード
   かみちゃんさん Keinさん
外出しており返事が遅くなりました
思い通りの結果です。
仕事の関係上ずーっと
あったらいいなと思っていましたので
大事に使わせていただきます。

同じような内容なのですが
今回出した答えにだけに対して
またすぐ下のセルに*0.3を同様に
入れたいのですがよろしくお願いします。
↓これでいいのか心配ですVBA未熟なので・・・
ActiveCell = "=ROUND(R[-1]C*0.3,-2)"

【46250】Re:合計にある数値を掛けた数値計算
発言  とら  - 07/1/27(土) 23:23 -

引用なし
パスワード
   ▼Kein さん:
1つ1つ行うにはどこを修正すればいいですか
>G列に限定するとして、複数の計算範囲を一気に処理するなら
>
>Sub Test_MySum()
>  Dim MyR As Range, C As Range
>  Dim Ad As String
> 
>  On Error Resume Next
>  With Range("G:G")
>   Set MyR = .SpecialCells(2, 1)
>   If MyR Is Nothing Then Exit Sub
>   .SpecialCells(3).ClearContents
>   .Font.ColorIndex = xlColorIndexAutomatic
>  End With
>  On Error GoTo 0: Err.Clear
>  For Each C In MyR.Areas
>   Ad = C.Address
>   With C.Cells(1).Offset(C.Count)
>     .Formula = "=ROUND(SUM(" & Ad & ")*0.7,-2)"
>     .Font.ColorIndex = 5
>   End With
>  Next
>  Set MyR = Nothing
>End Sub
>
>数式を入れたセルは、青色の文字にして分かりやすくしています。

【46252】Re:合計にある数値を掛けた数値計算
発言  かみちゃん  - 07/1/28(日) 11:01 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>今回出した答えにだけに対して
>またすぐ下のセルに*0.3を同様に
>入れたいのですがよろしくお願いします。
>↓これでいいのか心配ですVBA未熟なので・・・
>ActiveCell = "=ROUND(R[-1]C*0.3,-2)"

心配でしょうけど、まずは試してみませんか?
おかしいところに気づくと思います。それも勉強かと思います。

なお、以下のような感じになるかと思います。
  .Formula = "=ROUND(SUM(" & rngSum.Address(0, 0) & ")*0.7,-2)"
  .Offset(1).FormulaR1C1 = "=ROUND(R[-1]C*0.3,-2)"

また、
>>G列に限定するとして、複数の計算範囲を一気に処理するなら
>1つ1つ行うにはどこを修正すればいいですか
これはどういう意味ですか?
Keinさんのコードは「複数の計算範囲を一気に処理」という前提であって、
「1つ1つ行う」という前提ではないように思います。
また、私が提示したコードで「1つ1つ行う」という要件を満たしていませんか?

【46257】Re:合計にある数値を掛けた数値計算
お礼  とら  - 07/1/28(日) 17:02 -

引用なし
パスワード
   かみちゃん
ありがとうございました。
うまく動いてます。

【46260】Re:合計にある数値を掛けた数値計算
回答  Kein  - 07/1/28(日) 20:35 -

引用なし
パスワード
   それでは「選択範囲内の数値データに対する計算」をするコードで
どうでしょーか ? 計算を実行する前の処理条件の判定は、If 〜 Then Exit Sub
という形で行います。それらのコードの意味については、自分で調べて下さい。

Sub Test_MySum2()
  Dim Ad As String
 
  If TypeName(Selection) <> "Range" Then Exit Sub
  With Selection
   If .Count < 2 Then Exit Sub
   If .Columns.Count > 1 Then Exit Sub
   If .Areas.Count > 1 Then Exit Sub
   If WorksheetFunction.Count(.Cells) < 2 Then Exit Sub
   .Font.ColorIndex = xlColorIndexAutomatic
   Ad = .Address
   With .Cells(1).Offset(.Count)
     .Formula = "=ROUND(SUM(" & Ad & ")*0.7,-2)"
     .Offset(1).Formula = "=ROUND(SUM(" & Ad & ")*0.3,-2)"
     .Resize(2).Font.ColorIndex = 5
   End With
  End With
End Sub

【46263】Re:合計にある数値を掛けた数値計算
お礼  とら  - 07/1/28(日) 23:28 -

引用なし
パスワード
   ▼Kein さん:
ありがとうございました。
まさにこのコードです。範囲選択内の計算もう一度スレ
立ち上げようか、迷ってました。グッドタイミングです。
大事に利用させていただきます。

>それでは「選択範囲内の数値データに対する計算」をするコードで
>どうでしょーか ? 計算を実行する前の処理条件の判定は、If 〜 Then Exit Sub
>という形で行います。それらのコードの意味については、自分で調べて下さい。
>

6273 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free