少々ExcelVBAを使うことがありましたので、備忘録として記載しておきます。
自分自身のブック
ThisWorkbook.Sheets("シート名").Range("アドレス(A1など)")
ThisWorkbook.Sheets("シート名").Cells(行番号,列番号)
セルの指定
Workbooks("エクセルファイル名(フォルダ名は含まない)")_
.Sheets("シート名").Range("アドレス(A1など)")
Workbooks("エクセルファイル名(フォルダ名は含まない)")_
.Sheets("シート名").Cells(行番号,列番号)
複数プロパティーの指定
With Workbooks("エクセルファイル名(フォルダは含まれない)")_
.Sheets("シート名").Range("アドレス(A1など)")
.Value = "12000"
.Formula = "#,##0"
End With
エクセルファイル名にはフォルダ名は含まない。拡張子は必ずつけたほうが良い。(拡張子を省略した場合、エクスプローラの「登録済の拡張子は表示しない」とした場合で動作が異なる場合あり?)
複数シートの選択
Workbooks("エクセルファイル名(フォルダ名は含まない)")_
.Sheets(Array("シート1","シート2")).Select
シート3,シート4と続く場合は、Arrayの中に追加する。
複数シートの選択解除
Workbooks("エクセルファイル名(フォルダ名は含まない)")_
.Sheets(1).Select
一番フロントのシートを選択状態にしたほうが良いかもしれません。
選択中のシートを調べる
選択中のシート数を調べる。
Windows(Workbooks("エクセルファイル名(フォルダ名は含まない)").Name)_
.SelectedSheets.Count
選択中のシート名を一覧する。
For Each sh In Windows( _
Workbooks("エクセルファイル名(フォルダ名は含まない)").Name).SelectedSheets
MsgBox sh.Name
Next
シートの順序入れ替え
With Workbooks("エクセルファイル名(フォルダ名は含まない)")
.Sheets("移動対象シート").Move Before:= .Sheets("シート")
End With
移動対象シートをシート名の前に移動する。後ろに移動する場合はBeforeの箇所にAfterを指定する。
異なるワークブックからシートをコピー
With Workbooks("エクセルファイル名(フォルダ名は含まない)")
.Sheets("コピー対象シート").Copy Before:= _
Workbooks("コピー先エクセルファイル名(フォルダ名は含まない)").Sheets("コピー先シート")
End With
コピー先シートの前にコピー対象シートをコピーする。後ろにコピーする場合、Beforeの箇所にAfterを指定する。
セルコピー
With Workbooks("エクセルファイル名(フォルダ名は含まない)")
.Sheets("コピー元シート").Range("セル範囲(A1:A2など)").Copy _
.Sheets("コピー先シート").Range("セル範囲(B1:B2など)")
End With
Copyメソッドは必ずクリップボードが使われます。
MS Excel VBA Range.Copyリファレンスには、コピー先を省略した場合、クリップボードにコピーされますとありますが、コピー先を指定してもクリップボードが使われます。注意してください。
描画停止/再開
停止
Application.Screenupdateing = False
再開
Application.Screenupdateing = True
計算停止/再開
停止
Application.calculation = xlManual
再開
Application.calculation = xlAuto
プリンタとの通信を停止/再開
停止
Application.PrintCommunication = False
再開
Application.PrintCommunication = True
停止するとPageSetupの高速化が図れる。ただし、当該プロパティはExcel2010より前のバージョンには存在しないので注意。
プロパティーの存在チェック
少々雑なコードですが...PrintCommunicationがあるかどうか調べています。
If hashasPrintCommunication(Application) Then
MsgBox "PrintCommunicationあります"
Else
MsgBox "PrintCommunicationありません"
End If
Function hasPrintCommunication(o As Object) As Boolean
On Error Goto hasPrintCommunication_error:
Dim s As Boolean
s = o.PrintCommunication
hasPrintCommunication = True
hasPrintCommunication_exit:
Exit Function
hasPrintCommunication_error:
Resume hasPrintCommunication
End Function
プロパティの存在チェックを調べたところ、
TypeLib Informationを使って調べる方法があるようです。こちらは今後使ってみます。
VBEの起動
ALT+F11キーで、VBEが起動します。
0 コメント:
コメントを投稿