- ベストアンサー
VBAで計算結果のみ表示させたい
VBA作成中です。 SUMIF関数なのですが、 ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R14C1,RC[-1],R2C4:R14C4)" このままだと計算式が入るので、これを計算結果のみ表示させたいのですが、値のみ貼り付け以外で方法はありますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 数式をワークシートに入れて値を求めるのは、VBAのよさが出てきません。 なお、必ずしも、FormulaR1C1 と書く必要はありません。FormulaLocal などでよいです。Local の意味は、日本独特の関数を入れる場合に必要なことがあります。 Test2 は、少し、RC[-1] の表現が、ActiveCell.Offset(, -1).Value というのは、本来のVBAの書き方ではありませんが、以下のような方法があります。 本来は、ActiveCell.Offset(, -1).Value の場所は決めたほうがよいです。 Sub Test2() Dim a As String a = ActiveCell.Offset(, -1).Address ActiveCell.Value = Application.Evaluate("SUMIF($A$2:$A$14," & a & ",$D$2:$D$14)") End Sub '必ずしも同じではないのですが、以下のような書き方がマクロらしいです。 ただし、不等号や等号は、必要に応じて書き換える必要があります。 Sub Test3() Dim i As Integer Dim ret As Double With Range("A2:A14") For i = 1 To .Rows.Count If ActiveCell.Offset(, -1).Value = .Cells(i, 1).Value Then ret = ret + .Cells(i, 4).Value 'A列に対して、4列目という意味 End If Next i End With ActiveCell.Value = ret End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 WorksheetFunction.SumIf を使うなら、左辺は、ActiveCell.Value ですね。私は、Evaluate にこだわり、忘れていました。(^^; Evaluate は、特殊な使い方があります。エラーをはいても、Variant で受けると、それは、エラー値として出力されます。
お礼
お礼が遅れてすみません。 やってみます。 ありがとうございました。
- nayuta_lot
- ベストアンサー率64% (133/205)
こんにちは Application.WorksheetFunction.SumIfという関数がVBAにあります。 以下の例は、アクティブセルにアクティブセルの1列前(Offset(0, -1).Value) の値を検索値として、検索範囲 A1:A14、集計範囲 B1:B14とする例です。 Sub SumIf_Sample() ActiveCell.Formula = _ Application.WorksheetFunction.SumIf(Range("A1:A14"), ActiveCell.Offset(0, -1).Value, Range("B1:B14")) End Sub ご参考まで
お礼
初心者な者でそのまま貼り付けさせていただきましたが、 エラー表示になってしまいます。 Application.WorksheetFunction.SumIf関数ですね 勉強してみます。 ご回答ありがとうございました。
- n-jun
- ベストアンサー率33% (959/2873)
With ActiveCell .FormulaR1C1 = "=SUMIF(R2C1:R14C1,RC[-1],R2C4:R14C4)" .Value = .Value End With とか?
お礼
出来ました。 ご回答ありがとうございした。
お礼
詳しく説明して頂きありがとうございます。 勉強になりました。