0

ランタイム エラー 13「型の不一致エラー」で問題が発生しています。複数行のコードを取り、それらを 1 行に凝縮して、各行を並べて配置しようとしています。問題は、私の入力が文字列と数字であることです。これが、この問題の原因であると私は信じています。どうすればこれを修正できますか?

Sub multRowsTo1Row()
    Dim inputRange As Variant
    Dim outputRange As Variant

    inputRange = Selection
    y = UBound(inputRange, 1)
    x = UBound(inputRange, 2)

    ReDim outputRange(1 To x * y)

    For j = 1 To y
        For i = 1 To x
            outputRange(i + y(j - 1)) = inputRange(j, i)
        Next i
    Next j

    Selection.Offset(0, x).Select


End Sub
4

2 に答える 2

3

変数Dim x#, y#を正しく宣言してください。これで不一致エラーは修正されますがy(j - 1)、配列が必要なため、別のエラーが表示されます。そのように乗算記号を追加するy * (j-1)と、そのエラーを回避できますが、イベントでオーバーフローが発生する可能性があるSelection.Rows.Count > 2ため、そのチェックを追加することもできます。

Sub multRowsTo1Row()


    Dim inputRange As Variant
    Dim outputRange As Variant
    Dim y#, x#

    If selection.Rows.Count > 2 Then 
         MsgBox "Invalid Selection!", vbCritical
         Exit Sub
    End If

    inputRange = Selection
    y = UBound(inputRange, 1)
    x = UBound(inputRange, 2)

    ReDim outputRange(1 To x * y)

For j = 1 To y
    For i = 1 To x
        outputRange(i + y * (j - 1)) = inputRange(j, i)
    Next i
Next j

Selection.Offset(0, x).Select


End Sub

Option Explicitいつものように、変数を使用して特定の値に合わせることで、多くの苦痛とトラブルシューティングを回避できますType:)

于 2013-05-22T23:29:34.793 に答える
0

私はデビッドのおかげで成功しました。これが私の完成したコードです。

Sub multRowsTo1Row()

'' これは複数行の配列を取り、各行を並べて配置します '' 現在は一番上の行の隣に配置しています。これは変更できます。

Dim inputRange As Variant
Dim outputRange As Variant
Dim x#, y#

inputRange = Selection

y = UBound(inputRange, 1)
x = UBound(inputRange, 2)

ReDim outputRange(1 To x * y)

For j = 1 To y
    For i = 1 To x
        outputRange(i + x * (j - 1)) = inputRange(j, i)
    Next i
Next j

''別の場所に出力したい場合は、これを変更してください。これにより、最初の行の最後のエントリの右側に出力が貼り付けられます。

    Selection.Offset(0, x).Resize(1, x * y).Select
    Selection = outputRange
End Sub
于 2013-05-23T17:30:54.420 に答える