2
2

More than 3 years have passed since last update.

ExcelVBAでツール開発

Last updated at Posted at 2020-02-03

データ抽出・加工の際に、ExcelVBAツールを作成させていただくことがあり、その時に学習した豆知識をメモしておきたいと思います。

1)Excelが重く、データ編集や関数計算の処理時間が長い問題

以下のサイトが結構参考になりました。
https://www.fastclassinfo.com/entry/excel_work_slow
この知識点が知らなかったです。
・VBAのセル.Selectを使うのを避けるべき。必要ない限り書かないこと。
・書式やフォントなどは設定種類が豊富であればあるほど、Excel実行が重くなる。

2)VBA開発中に、すぐ使えるコード

https://ateitexe.com/code-snippet/
http://www.max.hi-ho.ne.jp/happy/YNxv20002.html

3)ほかのVBAコード問題

■ コピーペースト
Destinationキーワードを使った方が効率よい。(※クリップボードを使わないため、メモリが食わないようです。)

Range("A1").CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1")

■ 複数シートに対する処理(配列を使用)

ReDim My_SheetName(0)
For Each MySheet In ThisWorkbook.Worksheets
   If MySheet.Name Like "売上*" Then
     ReDim Preserve My_SheetName(i)
     My_SheetName(i) = MySheet.Name
     i = i + 1
   End If
Next MySheet

■ 複数セルに対する処理(配列を使用)
選択範囲がセルの場合,選択範囲を「Selection」のオブジェクトとして操作できる

Sub Sample3()
Dim c As Range, i As Long
  Range("A1:D10").select
For Each c In Selection
i = i + 1
c.Value = i
Next c
End Sub

Selectionプロパティ
Selectionとは、選択されたセルを表します。操作対象がセルであり、ワークシートではない

重複コマンド

セルA1を起点としたアクティブセル領域(CurrentRegion)の取得し、コピー

Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
結果が Range("A1").CurrentRegion.Select.Copy とイコールです。

4) 間違いやすい

■ Worksheets()とWorksheet()の違い
■ ThisWorkbook.Worksheets
■ CollectionとSellection

5) エラー調べ

■ 10004エラー

WbCopy.Worksheets("sh1").Range("A1").SelectでRangeクラスのSelectメソッドが失敗しました。

エラーの原因がSelectにある。ワークシートsh1がアクティブになっていない場合、sh1内のセルをSelectに指定してはいけない。
以下のコードを追加すればエラーが解消される。

Worksheets(sh1).Activate

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2