0

以下はうまく機能します(このコミュニティによる親切な支援に感謝します!)

    Function RangeToArrayToRange(inputRange as Range) As Variant
            Dim inputArray As Variant
            inputArray = inputRange
            RangeToArrayToRange = inputArray
    End Function

この関数は、入力範囲を出力に完全にコピーします。ただし、inputArray でいくつかの操作を行うと、配列は完璧に見えますが、Excel では、配列の最初の値のみがすべてのセルに出力されます。この例では、いくつかの入力文字列から数値を解析しています。

入力範囲:

ABC=1X:2Y 
ABCD=10X:20Y
ABCDE=100X:200Y

コード:

    Function RangeToArrayToRange(inputRange As Range) As Variant

        Dim inputHeight As Integer
        inputHeight = inputRange.Count

        Dim inputArray As Variant
        inputArray = inputRange

        Dim strippedArray() As Variant
        ReDim strippedArray(1 To inputHeight)

        Dim currentInput As String
        Dim currentInputAsInt As Integer
        Dim i As Integer

        For i = 1 To inputHeight

            currentInput = inputArray(i, 1)
            currentInput = Right(currentInput, (Len(currentInput) - Application.WorksheetFunction.Find("=", currentInput))) 
            'splits out everything left of the "="
            currentInput = Right(currentInput, (Len(currentInput) - Application.WorksheetFunction.Find(":", currentInput)))
            'splits out everything to the right of the ":"
            currentInput = Left(currentInput, Len(currentInput) - 1) 
            'split out the letter to allow int casting
            currentInputAsInt = CInt(currentInput)
            'cast to int
            strippedArray(i) = currentInputAsInt
            'saved

        Next i

        RangeToArrayToRange = strippedArray
    End Function

期待される出力:

1
10
100

実際の出力:

1
1
1

デバッガーを実行すると、strippedArray にはそれぞれ strippedArray(1)/(2)/(3) の位置に Variant/Integer 値 1、10、100 が含まれます。問題は、私が知る限り、配列が Excel に入力する範囲に strippedArray(1) しか含まれていないことです。

ありがとうございました!

4

1 に答える 1

4

strippedArrayExcelワークシート/範囲に出力する場合、配列は2次元である必要があります(これを配列数式として実行していると仮定しました)。次の変更を行います。

ReDim strippedArray(1 To inputHeight, 1 To 1)
...
strippedArray(i, 1) = currentInputAsInt
于 2012-06-28T14:46:44.437 に答える