FC2ブログ

配列とコレクションを使う

2017–09–02 (Sat) 19:22
エクセルには配列以外にもコレクションと言う配列に似たものがあります。
Dim cl as new collectionで指定します。

量が少ないと配列でも良いのですが、量が多い、Redim の数が多い場合などは、コレクションを使っても良いかもしれません。
量が少ない場合は配列のほうが早かったです。

Sub CollectionVersion()
Dim sssss As Single
sssss = Timer
Application.ScreenUpdating = False
Dim CL As New Collection
Dim MaxRow As Long
Dim MaxCol As Long
With ActiveSheet.UsedRange
MaxRow = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
MaxCol = .Find("*", , xlFormulas, , xlByColumns, xlPrevious).Column
End With
CL.Add Range(Range("a1"), Cells(MaxRow, MaxCol)).Value
Dim nyuryoku() As String
ReDim nyuryoku(MaxRow, MaxCol)
Dim ct As Long
ct = 0
For i = 1 To MaxRow
If InStr(CL(1)(i, 4), "霊夢") <> 0 Then
For j = 1 To MaxCol
nyuryoku(ct, j - 1) = (CL(1)(i, j))
Next
ct = ct + 1
End If
Next

Range(Worksheets("sheet2").Range("a1"), Worksheets("sheet2").Cells(MaxRow, MaxCol)) = nyuryoku
Application.ScreenUpdating = True
MsgBox Round(Timer - sssss, 2)
End Sub
Sub Hairetsu()
Dim sssss As Single
sssss = Timer
Application.ScreenUpdating = False
Dim CL As Variant
Dim MaxRow As Long
Dim MaxCol As Long
With ActiveSheet.UsedRange
MaxRow = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
MaxCol = .Find("*", , xlFormulas, , xlByColumns, xlPrevious).Column
End With
CL = Range(Range("a1"), Cells(MaxRow, MaxCol)).Value
Dim CL2 As Variant
ReDim CL2(MaxRow, MaxCol)
ct = 0
For i = 1 To MaxRow
If InStr(CL(i, 4), "霊夢") <> 0 Then
For j = 1 To MaxCol
CL2(ct, j - 1) = CL(i, j)
Next
ct = ct + 1
End If
Next

Range(Worksheets("sheet2").Range("a1"), Worksheets("sheet2").Cells(MaxRow, MaxCol)) = CL2
Application.ScreenUpdating = True
MsgBox Round(Timer - sssss, 2)
End Sub

実験は上記の方法で行いました。

無題
ファイルを増やして又行ってみたいです。

休憩

スポンサーサイト



«  ワークシートのコピーはどれが一番早いか | HOME |  SUMと足し算 »

コメント

コメントの投稿

 
管理者にだけ表示

 | HOME | 

プロフィール

はる

Author:はる
FC2ブログへようこそ!

最新記事

最新コメント

フリーエリア

月別アーカイブ

カテゴリ

ブロとも申請フォーム

検索フォーム

RSSリンクの表示

リンク