前提・実現したいこと
excelに出力された時系列データがありますが、
データの並び順が特殊なため、整理するマクロを作成しました。
希望通りの動作にはなってはいますが、実行にとても時間がかかってしまうため
処理速度を上げたいです。
方法がわかりませんので、アイデアなどをいただけますと助かります。
<時系列データの構成>
右から左、上から下にデータが時系列で入力されている。
<出力イメージ>
別シートに縦1列で時系列順にデータを並べたい。
発生している問題・エラーメッセージ
実際は元データは 100列x1000行 程度の量があります。
この処理に数分~数十分かかってしまいます。
該当のソースコード
VBA
1Sub Macro1() 2 3Application.ScreenUpdating = False 4 5Dim startrow As Integer 'データの最初の行 6startrow = 5 7 8Dim endrow As Integer 'データの最後の行 9endrow = 1007 10 11Dim firstrow As Integer 'データ整理シートの最初の行 12firstrow = 3 13 14Dim defrow As Integer '1行当たりのデータ数 15defrow = 100 16 17Dim lngrow As Long 'データ整理シートのデータ貼りつけセル変数 18Dim dataarray() As Variant 'データ仮格納配列 19Dim rdataarray() As Variant 'データを反転させた配列 20Dim array1d As Variant '反転データから1行分を抽出した1次元配列 21 22'配列の再定義 23ReDim dataarray(1 To endrow, 1 To 100) 24ReDim rdataarray(1 To endrow, 1 To 100) 25 26Worksheets("元データ").Select 27dataarray = Range(Cells(startrow, 5), Cells(endrow, 104)) 28 29'1行ごとに、データの向きを入れ替え 30For i = 1 To endrow - startrow + 1 31 For j = 1 To 100 32 rdataarray(i, j) = dataarray(i, 100 - j + 1) 33 Next j 34Next i 35 36'「データ整理」シートに貼り付け 37For r = 5 To endrow 38 lngrow = firstrow + defrow * (r - 5) 39 40 Worksheets("元データ").Cells(r, 4).Copy Worksheets("データ整理").Cells(lngrow, 1) 41 array1d = WorksheetFunction.Index(rdataarray, r - 4) 42 43 Worksheets("データ整理").Select 44 Range(Cells(lngrow, 2), Cells(lngrow + 99, 2)).Value = WorksheetFunction.Transpose(array1d) 45Next r 46 47Application.ScreenUpdating = True 48End Sub 49
試したこと
おそらく、「データ整理シートに貼り付ける」ところが時間がかかっていると思われますが、
どう改善したらいいのかわかっていません。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Excel 2016
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/02 00:40