2016-05-09 4 views
0

私は選択を取得し、それを文字列の配列にする次のコードがあります。ExcelのVBAループと配列から値を取得

Dim strArgument As Variant 
Dim irange As Range 
Dim ricosString As Variant 

Set irange = Selection 
ricosString = RangeToStringArray(irange) 

Dim vArray As Variant 
For i = LBound(ricosString) To UBound(ricosString) 
    Set vArray = ricosString(i) 

私の問題はricosString(i)です。それはエラーを投げているSubscript out of range.何か考えている理由は?

ここ

RangeToStringArray

Public Function RangeToStringArray(theRange As Excel.Range) As String() 

Dim variantValues As Variant 
variantValues = theRange.Value 

Dim stringValues() As String 
ReDim stringValues(1 To UBound(variantValues, 1), 1 To UBound(variantValues, 2)) 

Dim columnCounter As Long, rowCounter As Long 
For rowCounter = UBound(variantValues, 1) To 1 Step -1 
    For columnCounter = UBound(variantValues, 2) To 1 Step -1 
     stringValues(rowCounter, columnCounter) = CStr(variantValues(rowCounter, columnCounter)) 
    Next columnCounter 
Next rowCounter 

RangeToStringArray = stringValues 

エンド機能

答えて

1

RangeToStringArrayは2次元であるが、1次元 設定VARRAY = ricosString(I)

はまたRicostringではないとして、あなたがそれを参照するためのコードですオブジェクトを使用しないでください。セット

0

についてRangeToStringArray functi私は本当に興味を持っていません。ricosString = irangeを使ってみてください。これは簡単で速くなりますか?

0

適切な文字列配列としてあなたricosStringを定義します。

Dim ricosString() As String 

は、適切なものを使用してRangeToStringArray機能を置き換えます

Public Function RangeToStringArray(theRange As Excel.Range) As String() 

Dim cell As Range 
Dim values() As String 
Dim i As Integer 

i = 0 

ReDim values(theRange.Cells.Count) 

For Each cell In theRange 

    values(i) = cell.Value 
    i = i + 1 
Next cell 

RangeToStringArray = values 
End Function 

次に、あなたがこのような配列の値を参照することができます。

vArray = ricosString(i) 'without Set 
+0

私は 'RangeToStringArray'関数を変更したときに' For i = LBound(ricosString)To'という行にエラーがありますUBound(ricosString) ' –

+0

どのようなエラーが発生していますか? – gizlmo

+0

添え字が範囲外です。 –

関連する問題