78,000+の行では、VBA配列とコレクションオブジェクトを使用する次のVBAルーチンは、ワークシートで直接「作業」を実行するよりも迅速かつ迅速に実行する必要があります。
Option Explicit
Option Compare Text
Sub HelloStart()
Dim wsSrc As Worksheet, wsRes As Worksheet, rRes As Range
Dim vSrc As Variant, vRes As Variant
Dim COL As Collection
Dim MaxCols As Long
Dim V As Variant, W As Variant
Dim I As Long, J As Long
Set wsSrc = Worksheets("sheet1")
Set wsRes = Worksheets("sheet2")
Set rRes = wsRes.Cells(1, 1)
With wsSrc
vSrc = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
Set COL = New Collection
For Each W In vSrc
Select Case W
Case Is = "Hello"
If Not IsEmpty(V) Then
COL.Add V
MaxCols = IIf(MaxCols > UBound(V), MaxCols, UBound(V))
End If
ReDim V(1 To 1)
V(1) = W
Case Else
ReDim Preserve V(1 To UBound(V) + 1)
V(UBound(V)) = W
End Select
Next W
If Not IsEmpty(V) Then COL.Add V
MaxCols = IIf(MaxCols > UBound(V), MaxCols, UBound(V))
ReDim vRes(1 To COL.Count, 1 To MaxCols)
I = 0
For Each V In COL
I = I + 1
J = 0
For Each W In V
J = J + 1
vRes(I, J) = W
Next W
Next V
Set rRes = rRes.Resize(UBound(vRes, 1), UBound(vRes, 2))
wsRes.Cells.Clear
With rRes
.Value = vRes
.EntireColumn.AutoFit
End With
End Sub
質問を編集してくれたCarpetsmokerさんには、私よりも速いものがありました。 :) – Bee