| 
    
     |  | そう、事例で示すと 新参者さんのコードは、データが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)
 
 とすれば済みます
 
 
 |  |