|
処理速度向上につき、アドバイスを頂きたく、投稿致しました。
下記のロジックの改善点にお気づきの方は、どんなことでも良いので
ご教示頂けると幸いです。
※integer より long が良いのは学びました。
下記は、シートAにある値を、シートBの適切なセルに表示させるもので
シートAを参照する式を埋め込むことで、シートBに値をコピーしています。
入り組んでいて分かり辛いのですが、ループ、分岐、変数の使い方などが
キーになると思ったので、なるべくそのままのコードを記載しました。
◎実際の処理では、下記のようなロジックが10個くらい連なります。
【シートAの特徴】
CSVから読み込んだデータが貼り付いていて、各列、行に名前をつけています。
(例)列名 <10列分> _1 〜 _10
行名 <50行分> PHNYL1 〜 PHNYL50
【処理概要】
シートBの"HNY_INPUT_FLAG"と名前がついている列に'1'が入力されている行に
シートAの値を適宜セットしていく。
※シートBの"HNY_INPUT_FLAG"列+3の列に'1'が入力されている行数
=シートAの行数(ここでは50。)
-----------
Public Const INT_HNY_START_ROW As Integer = 5
Public Const INT_HNY_END_ROW As Integer = 55
Dim intRow As Integer
Dim intInputFlagCol As Integer
intInputFlagCol = Range("HNY_INPUT_FLAG").Column '入力可能な項目(行)フラグが設定されている列
i = 1
For intRow = INT_HNY_START_ROW To INT_HNY_END_ROW Step 1
If Cells(intRow, intInputFlagCol + 3).Value = "1" Then 'iのカウントアップ用Ifブロック
If Cells(intRow, intInputFlagCol).Value = "1" Then
k = 10
'前回値を保持するシートを参照する式をセット
For j = 1 To 10
Cells(intRow, INT_HNY_PRJSTART_COL - 1 + j).Formula _
= "=PHNYL" & i & " _" & k
k = k - 1
Next
'式ではなく値のみ表示するよう設定
Range(Cells(intRow, INT_HNY_PRJSTART_COL), _
Cells(intRow, INT_HNY_PRJSTART_COL + 9)).Copy
Range(Cells(intRow, INT_HNY_PRJSTART_COL), _
Cells(intRow, INT_HNY_PRJSTART_COL + 9)).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End If
i = i + 1
End If
Next
|
|