> 3万行程度ありまして、スピードUPさせることは可能でしょうか?
多少は変わるかと思いますが
Sub test02()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range
Dim myStr, ra, rr, myAr
myStr = InputBox("部分一致検索する文字を入力します。" _
& vbNewLine & "複数の場合、/(半角スラッシュ)で区切ってください。", " (´^∇^)σ 入力してください", "")
If myStr = "" Then
MsgBox "検索文字未指定", vbCritical, " Σ( ̄ロ ̄lll)"
Exit Sub
Else
myAr = Split(myStr, "/")
MsgBox Join(myAr, "と") & " を検索します。"
End If
Set ws1 = Sheets("Sheet1") '検索 シート
Set ws2 = Sheets("Sheet2") '貼付先シート
With ws1.Columns("A") '部分一致で検索(A列)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = LBound(myAr) To UBound(myAr)
Set rng = .Find(What:=myAr(i), LookAt:=xlPart, After:=.Cells(.Cells.Count))
If rng Is Nothing Then 'なかったら
MsgBox myAr(i) & " はありません", vbCritical, myStr & "? ( ̄~ ̄;)う~ん "
Else 'あったら
ra = rng.Address '最初に見つかったセルアドレス
Do
rr = rr + 1 'カウント
rng.EntireRow.Copy Destination:=ws2.Cells(rr, 1) '行のコピペ
Set rng = .FindNext(rng) '連続検索
Loop While rng.Address <> ra '繰り返し
Set rng = Nothing
End If
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End With
If rr > 0 Then
MsgBox rr & "件をSheet2に抽出しました。", vbInformation, " ( ̄ー ̄)v"
End If
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
では?
お礼
有難うございました。
補足
merlionXXさん、感謝感謝です。 5秒程度速くなりました。 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual これって、効果あるんですね。 勉強になりました。 有難うございました。