2017-06-06 3 views
0

以下のコードスニペットは、セルの列の内容を調べようとしています。各セルのフォーマットは "X.XX _-_ X.XX"です。例:5.66 - 13.44。このコードは、各セルを受け取り、各文字列を2重に変換し、それを他のいくつかの数値と比較し、次のセルに対して繰り返すことを意味します。分割関数は、ループ内で '下付き文字が範囲外です'エラーを返します

Sub Test() 
Dim PC As Worksheet 
Dim i As Integer 
Dim MaxSpace, MinSpace As Double 
Dim MinMax() As String 

Set PC = Workbooks("RFQ_Worksheet").Worksheets("Press Choice") 

For i = 7 To 52 
    MinMax = Split(PC.Cells(i, 8), " - ", 2) 
    MaxSpace = CDbl(MinMax(1)) 
    MinSpace = CDbl(MinMax(0)) 
    If MaxSpace > 10.3 Then 
     'Do some stuff 
    End If 
Next i 

End Sub 

MaxSpace = CDbl(MinMax(1))を含む行は、「下付き文字が範囲外です」というエラーを示します。しかし、PC.Cells(i, 8)PC.Cells(7, 8)に置き換えると、コードはうまく動作します。

私はここで何が欠けていますか?

+0

それがどのような値 'i'が障害点であることは、あなたが期待しているフォーマットでない細胞であることを示唆しています。エラーが発生したら、 "Debug"を押して "Locals"ペイン(View >> Locals)を見てください。あなたの 'minmax'変数を展開し、その配列の' 0'と '1'の両方の位置に何が格納されているかを見てください。私は文字列全体が '0'であり、' 1'が存在しないと思われます。それはデータ問題の可能性が高いため、それ以上の助けにはならない。 – JNevill

+0

もしあなたが 'uBound(MinMax)> = 1ならばMaxSpace = CDbl(MinMax(1))'を実行し、 'MaxSpace> 10.3 'が正常に動作しない場合に失敗することを知っているだけです分割してもエラーは発生しません。 – JNevill

+2

反復処理中のセルに " - "が含まれていないセルがあります。デバッグモードでコードをステップ実行すると、エラーの原因となっているセルを確認できます。 – trincot

答えて

1

基本的には、区切り文字を持たないループ内のセルに当たっています。

修正:

Sub Test() 
Dim PC As Worksheet 
Dim i As Integer 
Dim MaxSpace As Double 'you didn't declare it properly 
Dim MinSpace As Double 
Dim MinMax() As String 
Dim r As Range 

Set PC = ThisWorkbook.Worksheets("Press Choice") 

For i = 7 To 52 
    Set r = PC.Cells(i, 8) 
    If InStr(r, " - ") <> 0 Then 
     MinMax = Split(PC.Cells(i, 8), " - ", 2) 
     MaxSpace = CDbl(MinMax(1)) 
     MinSpace = CDbl(MinMax(0)) 
     '... etc 
    End If 
Next i 

End Sub 
関連する問題