|
補足ですが、ActivateやSelectに頼ると状況によっては不具合の元ですし、
実行速度にも影響してきます。
Objectの親からきちんと指定してあげれば、ほとんどのケースでは不要です。
://www.officetanaka.net/excel/vba/speed/s2.htm
例えば
Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim mxRow As Long
Dim i As Long
Set ws1 = Workbooks("PickCells.xls").Worksheets(1)
Set ws2 = Workbooks("PickCells.xls").Worksheets(2)
...とし、
cellPlace = ws1.Range(cellPlaceCol + CStr(counter_cell)).Value
cellSheet = ws1.Range(cellSheetPlaceCol + CStr(counter_cell)).Value
targetValue = wb.Worksheets(cellSheet).Range(cellPlace).Value
:
ws2.Cells(1, counter_cell - sv_counter_cell + 1).Value = cellPlace + "(" + CStr(cellSheet) + ")"
:
ws2.Cells(counter_file - sv_counter_file + 2, counter_cell - sv_counter_cell + 1).Value = targetValue
:
...とすればActivateは必要ないです。
またLoop処理についてはFor...Nextステートメントについて調べてみてください。
'B8セルから下へ連続データを調べ、終わりの行を取得
mxRow = ws1.Cells(counter_file, filePathCol).End(xlDown).Row
'B9セル以降データがないとシートの最終行を取得してしまうので念の為チェック
If ws1.Cells(mxRow, filePathCol).Value = "" Then mxRow = counter_file
For i = counter_file To maxrow
'カウンタとして i を利用
:
Next
...などとする事ができます。
さらに For Each...Next ステートメントを使うとObjectや配列のLoopの際に効率的です。
VBEのヘルプは状況依存型で、コード内の調査語句にマウスキャレットをあてて[F1]キーを押せば
目的のトピックにクイックアクセスできますので、色々調べてみてください。
>VBA でもメモリーリークみたいのがあるんですか
あるみたいですね。でも Set wb = Nothing をすれば大丈夫、というものでもないようですよ。
Set wb = Nothing
は言ってみれば『Object変数の初期化』ですね。
本来、プロシージャ終了時にリセットされるので必要ないという考えもあるようです。
ですがこのObject変数の使い方によっては、なんか残ったりするようですね。
プロではないので詳しくはわかりませんが。
補足は以上です。
でわ。がんばってください。
|
|