プロが教える店舗&オフィスのセキュリティ対策術

VBA作成中です。
SUMIF関数なのですが、
ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R14C1,RC[-1],R2C4:R14C4)" 

このままだと計算式が入るので、これを計算結果のみ表示させたいのですが、値のみ貼り付け以外で方法はありますか?

A 回答 (4件)

こんばんは。



WorksheetFunction.SumIf を使うなら、左辺は、ActiveCell.Value ですね。私は、Evaluate にこだわり、忘れていました。(^^;
Evaluate は、特殊な使い方があります。エラーをはいても、Variant で受けると、それは、エラー値として出力されます。
    • good
    • 0
この回答へのお礼

お礼が遅れてすみません。
やってみます。
ありがとうございました。

お礼日時:2008/11/16 10:52

こんにちは


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

ご参考まで
    • good
    • 0
この回答へのお礼

初心者な者でそのまま貼り付けさせていただきましたが、
エラー表示になってしまいます。
Application.WorksheetFunction.SumIf関数ですね
勉強してみます。
ご回答ありがとうございました。

お礼日時:2008/11/15 22:59

こんばんは。



数式をワークシートに入れて値を求めるのは、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
    • good
    • 0
この回答へのお礼

詳しく説明して頂きありがとうございます。
勉強になりました。

お礼日時:2008/11/15 22:44

With ActiveCell


.FormulaR1C1 = "=SUMIF(R2C1:R14C1,RC[-1],R2C4:R14C4)" 
.Value = .Value
End With
とか?
    • good
    • 0
この回答へのお礼

出来ました。
ご回答ありがとうございした。

お礼日時:2008/11/15 22:41

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