|
そう、事例で示すと
新参者さんのコードは、データがA1から下に有ることを想定して書いていますよね
もし、このデータがB2以下で始まって居たらどの様に修正しますか?
>ある4桁の数を桁ごとに集計するモジュールを組んでいます。
>実行結果は思ったとおりに反映されますが、
>
>Sub ResetList()
> Dim r As Integer
> r = 1
> Do Until Cells(r, 1) = ""
> Cells(r, 4) = Left(Cells(r, 3), 1)
> Cells(r, 5) = Mid(Cells(r, 3), 2, 1)
> Cells(r, 6) = Mid(Cells(r, 3), 3, 1)
> Cells(r, 7) = Right(Cells(r, 3), 1)
> r = r + 1
> Loop
> MsgBox "リストのリセットが完了しました!!"
>End Sub
たった此れだけの行数でも修正箇所は、結構あると思います
Sub ResetList2()
Dim i As Long
Dim lngRows As Long
Dim rngList As Range
Dim vntData As Variant
Dim vntResult As Variant
'データの先頭を基準とする
Set rngList = Cells(1, 1)
With rngList
'データ行数を取得
lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
If lngRows <= 1 And .Value = "" Then
Set rngList = Nothing
Exit Sub
End If
'データを配列に取得
vntData = .Offset(, 2).Resize(lngRows + 1).Value
End With
'出力用配列を確保
ReDim vntResult(1 To lngRows, 1 To 4)
'データ全行に就いて繰り返し
For i = 1 To lngRows
vntResult(i, 1) = Left(vntData(i, 1), 1)
vntResult(i, 2) = Mid(vntData(i, 1), 2, 1)
vntResult(i, 3) = Mid(vntData(i, 1), 3, 1)
vntResult(i, 4) = Right(vntData(i, 1), 1)
Next i
'集計結果を出力
rngList.Offset(, 3).Resize(lngRows, 4).Value = vntResult
Set rngList = Nothing
MsgBox "リストのリセットが完了しました!!"
End Sub
しかし、上記のコードでは、
'データの先頭を基準とする
Set rngList = Cells(1, 1)
を
'データの先頭を基準とする
Set rngList = Cells(2, 2)
とすれば済みます
|
|