VBAテクニック集テクニック集です。私が気づいた点や、覚えておいた方がよい点などを
ピックアップして掲載しています。ただ、初心者対象のため
中級者以上の方は無用かもしれません。
随時追加していきますし、メインコンテンツに移動することもありますので
よろしくお願いします(いまは、少々寂しいですよね)。
Select、Selectionについては、皆さんよく使用されていると思います。
セルを選択してそのままコピーというようなことはよく使用すると思いますが、
該当シートをアクティブにしておかないとうまく作動しません。
意外と参考書に載っていないので知っておくとよいと思います。
Advancedfilterについて研究。ノーマルにAutofilterを使用するより格段に高速で
作動することが判明。Autofilterは、フィルターの要素が2から3、3から4、4から5と
増えていくごとに指数関数的に速度が遅くなっていくことがわかています。
下の例を見てください。。
Sub Advancedfilter_練習()
Dim Sht1 As Worksheet
Dim Sht2 As Worksheet
Set Sht1 = Worksheets("sheet1")
Set Sht2 = Worksheets("sheet2")
Sht1.Range("B1").CurrentRegion.Advancedfilter _
action:=xlFilterCopy, _
criteriarange:=Range("G1:H2"), _
copytorange:=Sht2.Range("A1"), _
unique:=False
End Sub
|
以下のコードは、現在アクティブになっているブックのフォルダ内にtest.xlsの有無を判断します。
存在すれば、パスを表示、存在しなければ存在しない旨のメッセージを表示します。
Sub Path()
Dim strPath As String
Dim strFullPath As String
Dim Fname As String
strPath = ActiveWorkbook.Path
strFullPath = strPath & "\*.*"
Fname = Dir(strFullPath)
Do While Fname <> ""
If Fname = "test.xls" Then
MsgBox strPath
Exit Sub
End If
Fname = Dir()
Loop
MsgBox ("test.xlsが同一フォルダにありません。やり直してください")
End Sub
|
いままでの意味を理解していればわかると思います
エクセルの上のほうにあるメニューバーを消したり、表示させたりしたいことがあると思います。
あと、メニュー、ツールバーのカスタマイズも考えたい人も多いのではないでしょうか?
そんな人には一度下のコードを実行してみてください。
Public Function メニューバー非表示()
Dim Cmbar As CommandBar
Set Cmbar = CommandBars("worksheet menu bar")
Cmbar.Controls(2).Enabled = False
Cmbar.Controls(3).Enabled = False
Cmbar.Controls(4).Enabled = False
Cmbar.Controls(5).Enabled = False
CommandBars("standard").Controls(7).Visible = False
CommandBars("standard").Controls(8).Visible = False
CommandBars("standard").Controls(9).Visible = False
End Function
|
あわせて表示するコードも載せておきます。
Public Function メニューバー表示()
Dim Cmbar As CommandBar
Set Cmbar = CommandBars("worksheet menu bar")
Cmbar.Controls(2).Enabled = True
Cmbar.Controls(3).Enabled = True
Cmbar.Controls(4).Enabled = True
Cmbar.Controls(5).Enabled = True
CommandBars("standard").Controls(7).Visible = True
CommandBars("standard").Controls(8).Visible = True
CommandBars("standard").Controls(9).Visible = True
End Function
|
お分かりだと思いますが上のコードが選択できなくなりました。
ブックのオープンイベントなどと組み合わせるとユーザーに操作してほしくない
ツールバーの操作を禁止することが可能になります。
今度はメニュー、ツールバーのカスタマイズです。
メニューを作成することが出来ます。
Sub カスタマイズ()
Dim CmdBar As CommandBar
Dim MMenu As CommandBarControl
Dim SMenu As CommandBarControl
Set CmdBar = CommandBars("WorkSheet Menu Bar")
Set MMenu = CmdBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
MMenu.Caption = "ツール情報"
Set SMenu = MMenu.Controls.Add
SMenu.Caption = "バージョン情報"
SMenu.OnAction = "ShowVer"
End Function
|
最終行のSMenu.OnAction="ShowVer"はShowVer関数を実行しなさいという意味です。
実際上のコードを実行して理解してみてください。