いつでも医師に相談、gooドクター

以下のコードを実行すると、UBoundに配列がありませんというエラーがでます。
どこが間違っているのか教えてください。
よろしくお願いします。
strLine(i)には以下のような漢字でデータが入っています。
strLine(i) = "θinj = ゜BTDC,λ=2.0,KS=20%,TIM= ゜BTDC,DUR= ゜CA,dPg= MPa,Pme= MPa,ne= rpm,Pex= MPa"



'データシートに系列はきだし
strKeiretu = Split(strLine(i), ",")
For j = 0 To UBound(strKeiretu)
If j <= 3 Then Workbooks("matome.xls").Sheets(strSN).Cells(j + 1, 22) = strKeiretu(j)
If j >= 4 And j <= 7 Then Workbooks("matome.xls").Sheets(strSN).Cells(j - 3, 24) = strKeiretu(j)
If j >= 8 Then Workbooks("matome.xls").Sheets(strSN).Cells(j - 7, 26) = strKeiretu(j)

'Pexのはりつけ
If "Pex" = Left(strKeiretu(j), 3) Then
Workbooks("matome.xls").Sheets(strSN).Cells(4, 14) = Mid(strKeiretu(j), 5, Len(strKeiretu(j)) - 6)
End If
Next j

gooドクター

A 回答 (4件)

こんにちは。



その質問だけでは、コードとしては成立しないと思いますが……。

'-------------------------------------------
'ここからの書き出しでは、分かりません。
strLine(i) = "θinj = ゜BTDC,λ=2.0,KS=20%,TIM= ゜BTDC,DUR= ゜CA,dPg= MPa,Pme= MPa,ne= rpm,Pex= MPa"
'データシートに系列はきだし
strKeiretu = Split(strLine(i), ",")
'-------------------------------------------
そのコードの前はどうなっているのでしょうか。

この質問だけで、解決は難しいと思います。
たとえば、このような変数の宣言があるとか。
Dim strLine(10) As String
Dim i As Long
Dim strKeiretu As Variant

こちらが勝手にコードが通るように書き換えることはできますが、strLine(i)というのには、それなりの意図があるはずです。

ただ、今の情報の延長上には、どのようにしても、
>UBoundに配列がありませんというエラーがでます
というようなエラーは発生しません。Split 関数の「Delimiter」を間違えなければ、という条件ですが。質問の範疇では分かりません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今、エラー原因をみつけました。
>Dim strKeiretu As Variant
上記が正しいです。
→Dim strKeiretu As Stringになってました。

変数の宣言エラーでした。助かりました。

お礼日時:2009/09/26 02:51

>UBoundに配列がありませんという・・


質問者がエラーコメントを思い込みで解釈して書いていませんか。
Googleを調べてもこのエラーの話題は、この質問のみしか出ません。
「インデックスの有効範囲にありません」などではないですか。
ーー
変数 i は、この質問のコードの最初以前に、しかるべき整数が決ってますか。いを具体数化するとエラー無く走り、特におかしいところは見つからなかった。
私のテストコード
Sub test01()
Dim strLine(10)
Erase strLine
i = 1
strLine(i) = "θinj = ゜BTDC,λ=2.0,KS=20%,TIM= ゜BTDC,DUR= ゜CA,dPg="
W = "MPa,Pme= MPa,ne= rpm,Pex= MPa"
strLine(i) = strLine(i) & W
strkeiretu = Split(strLine(i), ",")
'Erase strkeiretu
For j = 0 To UBound(strkeiretu)
MsgBox strkeiretu(j)
If j <= 3 Then MsgBox j & " =1"

If j >= 4 And j <= 7 Then MsgBox j & " =2"

If j >= 8 Then MsgBox j & " =3"
Next j
End Sub
    • good
    • 0

Dim strLine As String, strKeiretu, j As Integer


strLine = "θinj = ゜BTDC,λ=2.0,KS=20%,TIM= ゜BTDC,DUR= ゜CA,dPg= MPa,Pme= MPa,ne= rpm,Pex= MPa"
strKeiretu = Split(strLine, ",")
For j = 0 To UBound(strKeiretu)
MsgBox strKeiretu(j)
Next

というコードで問題なく動作します。

なので、「strLine(i)」には「"θinj = ゜BTDC,λ=2.0,KS=20%,TIM= ゜BTDC,DUR= ゜CA,dPg= MPa,Pme= MPa,ne= rpm,Pex= MPa"」のような感じのデータは入っていないと思います。
エラー時には、strLine(i)には実際のところどういう値が入っているのでしょう?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そうですねぇ。見た感じ問題ないんですけど。

エラー時には実際、
「"θinj = ゜BTDC,λ=2.0,KS=20%,TIM= ゜BTDC,DUR= ゜CA,dPg= MPa,Pme= MPa,ne= rpm,Pex= MPa"」
が入っています。

お礼日時:2009/09/26 02:48

>strLine(i)には以下のような漢字でデータが入っています。


>strLine(i) = "θinj = ゜BTDC,λ=2.0,KS=20%,TIM= ゜BTDC,DUR= ゜CA,dPg= MPa,Pme= MPa,ne= rpm,Pex= MPa"

" が多すぎるのでは
strLine(i) = "θinj = BTDC,λ=2.0,KS=20%,TIM= BTDC,DUR= CA,dPg= MPa,Pme= MPa,ne= rpm,Pex= MPa"
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
テキストデータの中身のことですね。
"(ダブルクォーテーション)ではなくて°(ド)です。

お礼日時:2009/09/26 02:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング