2

Microsoft からコピーした、列番号を取得して列文字を再割り当てする関数を使用しています。数式を作成するには、これを行う必要があります。私は一日中調査しましたが、エラーの原因を特定できません (サブプロセスとしてこれを達成しようとしました)。関数は独自のモジュールにあります。私はそれをテストし、正常に動作します:

Function ConvertToLetter(ByRef iCol As Integer) As String
  Dim iAlpha As Integer
  Dim iRemainder As Integer
  iAlpha = Int(iCol / 27)
  iRemainder = iCol - (iAlpha * 26)
  If iAlpha > 0 Then
     ConvertToLetter = Chr(iAlpha + 64)
  End If
  If iRemainder > 0 Then
     ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
  End If
End Function

私にエラーを与えているコードは次のとおりです。

For groups = 1 To i ' level 1 grouping
    For iCol = 24 To 136
       rCol = ConvertToLetter(iCol)
       Cells(Start(groups) - 1, rCol).Formula = "=COUNTA(" & rCol & Start(groups) & ":" & rCol & Finish(groups) & ")"
    Next
Next

関数を式自体に代入してみました:

  Cells(Start(groups) - 1, ConvertToLetter(iCol)).Formula = "=COUNTA(" & ConvertToLetter(iCol) & Start(groups) & ":" & ConvertToLetter(iCol) & Finish(groups) & ")"

デバッガーは最初の関数呼び出しを通過しましたが、2 番目と 3 番目は通過しませんでした。私が受け取ったエラーは、「モジュールではなく、変数またはプロシージャが必要です」というタイプのものです。2 番目のケースでは、他のエラーが発生し、頭がぼやけて思い出せません。

どんな助けでも大歓迎です。アイデアが尽きた。本当にありがとう!

4

3 に答える 3

2

列を文字に変換する必要はほとんどありません。最初に FormulaR1C1 の使用を検討してください

For groups = 1 To i ' level 1 grouping
    For iCol = 24 To 136
        lLast = Finish(groups) - Start(groups) + 1
        Sheet1.Cells(Start(groups) - 1, iCol).FormulaR1C1 = _
            "=COUNTA(R[1]C:R[" & lLast & "]C)"
    Next iCol
Next groups

R1C1 が気に入らない場合は、より直接的に Address を使用できます

For groups = 1 To i ' level 1 grouping
    For iCol = 24 To 136
        Set rStart = Sheet1.Cells(Start(groups), iCol)
        Set rEnd = Sheet1.Cells(Finish(groups), iCol)

        rStart.Offset(-1, 0).Formula = _
            "=COUNTA(" & rStart.Address & ":" & rEnd.Address & ")"

    Next iCol
Next groups
于 2013-04-04T20:03:58.240 に答える
1

次の関数は、列番号を文字に変換します。この.Address方法を利用して、生活を大幅に簡素化します。

Function convertToLetter(colnum)
mycell = [A1].Offset(0, colnum - 1).Address
convertToLetter = Mid(mycell, 2, Len(mycell) - 3)
End Function

しかし、あなたのコードを見てみると、Cells関数を使用するときは、文字ではなく数字で呼び出す必要があります。だからあなたは別の問題を抱えています!

次のことを試してください。

For groups = 1 To i ' level 1 grouping
    For iCol = 24 To 136
       rCol = ConvertToLetter(iCol)
       Cells(Start(groups) - 1, iCol).Formula = "=COUNTA(" & rCol & Start(groups) & ":" & rCol & Finish(groups) & ")"
    Next
Next

ステートメントの一部で使用されてiColいないことに注意してください。悪いのはそれだけではないかもしれません...rColCells(Start(groups)-1, iCol) =

于 2013-04-04T19:21:54.047 に答える
1

使用している機能に問題があります。この例を確認してください

Sub Sample()
    Dim iCol As Integer
    For iCol = 131 To 134
        Debug.Print iCol; ConvertToLetter(iCol)
    Next iCol
End Sub


Function ConvertToLetter(ByRef iCol As Integer) As String
    Dim iAlpha As Integer
    Dim iRemainder As Integer
    iAlpha = Int(iCol / 27)
    iRemainder = iCol - (iAlpha * 26)
    If iAlpha > 0 Then
       ConvertToLetter = Chr(iAlpha + 64)
    End If
    If iRemainder > 0 Then
       ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
    End If
End Function

出力

131 D[
132 D\
133 D]
134 D^

私が言及したリンクから拾ったこのコードを使用してください。

rcol = Split(Cells(, iCol).Address, "$")(1)

それ以外の

rCol = ConvertToLetter(iCol)
于 2013-04-04T19:22:19.623 に答える