【Excelマクロ(VBa)】セル入力


   セルの入力


セルに文字を入力するには、下記のように記述します。

Dim AppExcel As Excel.Application
Set AppExcel = New Excel.Application

AppExcel.Workbooks.Add 'ブックを新規追加
AppExcel.Visible = True '表示

'10 * 10 のセルに i * j の結果を記入
For i = 1 To 10
  For j = 1 To 10
    AppExcel.Cells(i, j) = i * j
  Next j
Next i

'セルを全選択
AppExcel.Cells.Select
'セルの幅を自動調整
AppExcel.Cells.EntireColumn.AutoFit
'セルA1を選択
AppExcel.Range("A1").Select


 セルの入力(レスポンス向上)


基本は上記のように記載しますが、データのI/Oはレスポンスに非常に負荷が掛かります。負荷を軽減するには、I/Oの処理を極力抑える事が望ましいです。

そこで、i * j の処理結果を 変数(配列)にセットし、纏めてセルへ入力します。(※ 赤字箇所が変更内容です)

Dim AppExcel As Excel.Application
Dim ExcelData() As Variant

Set AppExcel = New Excel.Application

AppExcel.Workbooks.Add 'ブックを新規追加
AppExcel.Visible = True '表示

ReDim ExcelData(10, 10)

'10 * 10 のセルに i * j の結果を記入
For i = 1 To 10
  For j = 1 To 10
    'セルは開始位置(1, 1)に対し、変数は(0, 0)のため注意
    ExcelData(i - 1, j - 1) = i * j

  Next j
Next i

AppExcel.Range(AppExcel.Cells(1, 1), AppExcel.Cells(10, 10)) = ExcelData

'セルを全選択
AppExcel.Cells.Select
'セルの幅を自動調整
AppExcel.Cells.EntireColumn.AutoFit
'セルA1を選択
AppExcel.Range("A1").Select

上記例では、分かりやすいように 具体的な数値 (10, 10) で設定しましたが、変数化すると柔軟になります。

ちなみに、レスポンスの比較で、10 * 10 程度では顕著な差は出ませんが、1000 * 100とすると、下記のようにレスポンスの差が歴然とします。

処理方法 秒数
直接入力 48秒
変数[配列]入力 1秒未満

管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す