0

次のコード行では、変数範囲 (列 U) を合計しようとしています。私のコード内で何が間違っているのか教えてください(助けていただければ幸いです):

問題のあるコード行:

Sheets(gcsReportSheetName).Cells(LCounter, 3).FormulaR1C1 = "=sum(" & rng.Value & "!" & Lsumcolumn & ":" & Lsumcolumn & ")"

完全なコード。

Sub Report()

Dim rng As Range
Dim LCounter As Long
Dim sLsheet As String
Dim Lsumcolumn As Long
Set gRwksconfigeration = Sheets("Config")
Set gRnct_Funds_2 = gRwksconfigeration.Range(CT_Funds_2)

LCounter = 3

For Each rng In gRnct_Funds_2

    Sheets(gcsReportSheetName).Cells(LCounter, 1) = rng.Value

    If rng.Value = "" Then

            Exit Sub

        Else

            Sheets(gcsReportSheetName).Cells(LCounter, 2) = Sheets(rng.Value).Cells.Find(What:="Value", After:=Cells(1, 1), LookIn:=xlValues, LookAt:= _
                    xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False).End(xlDown).Value
            Lsumcolumn = Sheets(rng.Value).Cells.Find(What:="illiquid check", After:=Cells(1, 1), LookIn:=xlValues, LookAt:= _
                    xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False).Column
            Sheets(gcsReportSheetName).Cells(LCounter, 3).FormulaR1C1 = "=sum(" & rng.Value & "!" & Lsumcolumn & ":" & Lsumcolumn & ")"


            LCounter = LCounter + 1

    End If

Next

End Sub
4

1 に答える 1

2

シート名 ( rng.Value) にスペースが含まれていますか? その場合は、次のように名前を一重引用符で囲む必要があります。

='Test Sheet'!A:A

また、A1 表記とは少し異なる R1C1 表記を使用しています (詳細については、こちらを参照してください)。次の例はどちらも機能するはずです。


R1C1 表記のコードは次のようになります。

Sheets(gcsReportSheetName).Cells(LCounter, 3).FormulaR1C1 = "=sum('" & rng.Value & "'!C" & Lsumcolumn & ")"

A1 表記のコードは次のようになります。

sSumColumn = Choose(Lsumcolumn,"A","B","C","D","E","F","G") ' Expand this to include all column headers.

Sheets(gcsReportSheetName).Cells(LCounter, 3).Formula = "=sum('" & rng.Value & "'!" & sSumColumn & ":" & sSumColumn & ")"

シート名にスペースが含まれていない場合でも、この構文は機能するはずです。


Choose列ヘッダーを取得する関数に関する追加の注意事項...

多数の列を見ている場合、これを書き出すのは面倒な場合があるため、この値をより簡単に取得するために使用する関数を用意しました (完全な開示、インターネット上の別のサイトからこれを取得しましたが、 Excelの2007/2010/2013バージョンで動作するように自分で更新しました):

Public Function ColumnLetter(ColumnNumber As Integer) As String

    If ColumnNumber > 26 Then

        If ColumnNumber > 702 Then
            ' Compatible with Excel 2007+ extension of columns
            ColumnLetter = Chr(Int((Int((ColumnNumber - 1) / 26) - 1) / 26) + 64) & _
                Chr((Int((ColumnNumber - 1) / 26) - 1) Mod 26 + 65) & _
                Chr(((ColumnNumber - 1) Mod 26) + 65)
        Else
            ' 1st character:  Subtract 1 to map the characters to 0-25,
            '                 but you don't have to remap back to 1-26
            '                 after the 'Int' operation since columns
            '                 1-26 have no prefix letter

            ' 2nd character:  Subtract 1 to map the characters to 0-25,
            '                 but then must remap back to 1-26 after
            '                 the 'Mod' operation by adding 1 back in
            '                 (included in the '65')

            ColumnLetter = Chr(Int((ColumnNumber - 1) / 26) + 64) & _
                Chr(((ColumnNumber - 1) Mod 26) + 65)
        End If
    Else
        ' Columns A-Z
        ColumnLetter = Chr(ColumnNumber + 64)
    End If
End Function

上記の式の代わりに、Chooseを使用できますsSumColumn = ColumnLetter(Lsumcolumn)

于 2013-04-22T14:15:26.137 に答える