4

VBAを使用してExcelのセルのブロック内の値を自動合計しようとしています。次のコードをデバッグしているときに、タイプの不一致エラーが発生し続けました。どこで私は間違えましたか?

Sub autosumtest()
    Dim total As Integer
    Worksheets("Sheet1Test").Select
    Range("F16:G20").Select
    total = CInt("=SUM(Selection.Values)")
    MsgBox (total)
End Sub

EDIT 1:AutosumRangeと呼ばれる私のテストデータの簡単なサンプルを次に示します。

ここに画像の説明を入力してください

4

4 に答える 4

6

[]を使用して、任意のスプレッドシート式を評価できます。

Sub autosumtest()
   Dim total As Integer
   total = CInt([=sum(sheet1Test!F16:G20)])
   MsgBox (total)
End Sub
于 2012-11-05T08:08:03.037 に答える
2

範囲F16 to G20にはさまざまな形式が含まれます。Numberフォーマットと問題が解決されていることを確認してください。

以下も使用できます。

Sub autosumtest()
    Dim total As Integer
    total = [=SUM(Sheet1Test!F16:G20)]
    MsgBox (total)
End Sub
于 2012-11-05T07:50:51.820 に答える
2

はい、「= SUM(F16:G20)」は文字列であるため、型の不一致があります。

Worksheetfunctionは、目的の範囲を合計するために使用する必要があります。選択でさらに何かをしたい場合を除いて、.Selectは必要ありません。

Option Explicit

Sub autosumtest()
    Dim total As Integer
    Dim rng As Range

    Set rng = Worksheets("Sheet1Test").Range("F16:G20")
       total = CInt(WorksheetFunction.Sum(rng))
    MsgBox (total)
End Sub
于 2012-11-05T07:58:41.333 に答える
1

わかりました、他のいくつかの答えの長さと冗長性を考えるとCInt...。

Sub Easy()
MsgBox Application.Sum(Sheets("Sheet1Test").Range("F16:G20"))
End Sub 
于 2012-11-05T09:01:30.467 に答える