VBAテクニック集

テクニック集です。私が気づいた点や、覚えておいた方がよい点などを
ピックアップして掲載しています。ただ、初心者対象のため
中級者以上の方は無用かもしれません。

随時追加していきますし、メインコンテンツに移動することもありますので
よろしくお願いします(いまは、少々寂しいですよね)。

■ VBAのテクニック

TOPに戻る

Select、Selectionについて

Select、Selectionについては、皆さんよく使用されていると思います。
セルを選択してそのままコピーというようなことはよく使用すると思いますが、
該当シートをアクティブにしておかないとうまく作動しません。

意外と参考書に載っていないので知っておくとよいと思います。

「VBAテクニック集」最初に戻る

Advancedfilterについて

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




「VBAテクニック集」最初に戻る

Pathを取得する

以下のコードは、現在アクティブになっているブックのフォルダ内に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

いままでの意味を理解していればわかると思います


「VBAテクニック集」最初に戻る



メニュー、ツールバーの表示、非表示

エクセルの上のほうにあるメニューバーを消したり、表示させたりしたいことがあると思います。
あと、メニュー、ツールバーのカスタマイズも考えたい人も多いのではないでしょうか?
そんな人には一度下のコードを実行してみてください。

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

お分かりだと思いますが上のコードが選択できなくなりました。
ブックのオープンイベントなどと組み合わせるとユーザーに操作してほしくない
ツールバーの操作を禁止することが可能になります。


「VBAテクニック集」最初に戻る

メニュー、ツールバーのカスタマイズ

今度はメニュー、ツールバーのカスタマイズです。
メニューを作成することが出来ます。

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関数を実行しなさいという意味です。
実際上のコードを実行して理解してみてください。


「VBAテクニック集」最初に戻る


// このWebサイトのご意見・ご感想はvb@tentant.comまで //

Copyright (C) 2004 visualbasic.tentant.com.All righs reserved