●冒頭
オブジェクト上での処理方法であれば、正常動作できていることは確認済
●課題点
オブジェクト上での処理となるためデータ量が多ければ多いほど処理時間が要している
●対策点
オブジェクトでの処理でなく、配列を用いて処理時間を短縮することを目標
指定範囲を配列格納 ➡ 配列上で処理 ➡ 指定範囲へ配列の出力
といった方法で処理を模索中
上記の対策点にある配列上での処理において、オブジェクト上での処理で言う切り取り(Cut)と挿入(Insert)のやり方が分からず詰まっております。
そもそも配列上での切り取り(Cut)と挿入(Insert)の概念があるのか知識不足のため、
自分なりにネット上で検索してみたのですがこれといったページが見つからず解決に至っておりません。
また配列上での処理以外にも他に最善のやり方がございましたら、
アドバイス頂けると幸いです。
また下記にて自分なりに作成したコードとイメージ図を記載いたしますので、
よろしくお願いいたします。
VBA
1Sub sample1() 2'--------------------------------------------------------------- 3Dim wb As Workbook 4Set wb = ThisWorkbook 5 6Dim ws As Worksheet 7Set ws = wb.Sheets("メイン") 8'--------------------------------------------------------------- 9 10With ws 11 12 Dim i, j, x 13 For i = .Cells(Rows.Count, "A").End(xlUp).Row To 3 Step -1 14 15 If .Cells(i, "D") = "●" Then 16 17 x = Cells(i, "C").Value 18 .Range(i & ":" & i).Cut 19 20 For j = Cells(Rows.Count, "A").End(xlUp).Row To 3 Step -1 21 22 If .Cells(j, "C").Value Like x Then 23 Rows(j + 1).Insert 24 Exit For 25 End If 26 Next j 27 End If 28 Next i 29 30End With 31End Sub
VBA
1Sub sample2() 2'--------------------------------------------------------------- 3Dim wb As Workbook 4Set wb = ThisWorkbook 5 6Dim ws As Worksheet 7Set ws = wb.Sheets("メイン") 8'--------------------------------------------------------------- 9 10With ws 11 12 Dim lRow 13 lRow = .Cells(Rows.Count, "A").End(xlUp).Row'最終行取得 14 15 Dim TB 16 TB = .Range("A3:D" & lRow)'配列格納 17 18 Dim i, j, x 19 For i = UBound(TB, 1) To 3 Step -1 20 21 If TB(i, 4) = "●" Then'●の有無判別 22 23 x = TB(i, 3) 24 TB(i).Cut 25 26 For j = UBound(TB, 1) To 3 Step -1 27 28 If TB(j, 3) Like x Then 29 TB(j+1).Insert 30 Exit For 31 End If 32 Next j 33 End If 34 Next i 35 36 .Range("A3:D" & lRow) = TB 37 38End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/10 15:40 編集
2021/09/10 23:22