|
>以前教えていただいたコードを自分で変えて
>本などをみながら作りましたが、
>If IsNumeric(vntData(v, 5)) = True Then のところで、
>「インデックスが有効範囲にありません」のエラーがでてしまい、
>理由がわかりません。
>どこが間違えているのか教えてください。
配列に1列しか取得していないのに、5列目(配列に無い列)を見ているから
当然、インデクスエラーが出るでしょう
>
>また、画面更新を再開と停止は必要なのでしょうか?
必須では有りませんので、削除してもOK
>処理完了のメッセージは出さなくてもよいです。
各「strProm = "・・・"」と「MsgBox strProm, vbInformation」を削除すれば善いのでは
後、何故、「For v = 2 To lngRows」が2から始まっているのですか?
Public Sub Sample()
Dim vntData As Variant
Set rngList = S2.Cells(2, 5)
With rngList
'データ行数を取得
lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
'データが無い場合
If lngRows <= 1 And .Value = "" Then
GoTo Wayout
End If
'データを配列に取得
vntData = .Resize(lngRows + 1).Value
End With
' For v = 2 To lngRows
For v = 1 To lngRows
' If IsNumeric(vntData(v, 5)) = True Then
If IsNumeric(vntData(v, 1)) = True Then
' If Len(vntData(v, 5)) = 3 Then
If Len(vntData(v, 1)) = 3 Then
' vntData(v, 5) = Left(vntData(v, 5), 2) _
' & "." & Right(vntData(v, 5), 1)
vntData(v, 1) = Left(vntData(v, 1), 2) _
& "." & Right(vntData(v, 1), 1)
End If
End If
Next v
With rngList.Offset(, 1).Resize(lngRows)
.NumberFormatLocal = "@"
.Value = vntData
End With
Wayout:
Set rngList = Nothing
End Sub
|
|