(EXCEL97)
by h-huji update:2000/12/22
〜するには | こうしたら、どうでしょう!? |
● 今までいろいろとやってきたマクロを項目別にまとめてみました。EXCEL VBA Memo Ver1.0 ← ここをクリック。 市販の参考本は、「Excel2000/97 VBA」技術評論社 をお勧めします。重宝しています。 |
|
(1)マクロボタンがグレーでつまらない. | ifran_viewなどの画像(表示)ソフトで、サムネイル表示ですばやく探して、お気に入りの 画像をコピーしてエクセル上に貼り付けてから,マクロの登録を行います。 当然クリップアートでもOKです。 |
(2)ブックが開いているかどうかチェックして、 もし、開いていなければ,ブックを開く. |
j = Workbooks.Count k = 1 For i = 1 To j If Windows(i).Caption = "住所録.xls" Then k = 0 Exit For End If k = 1 Next If k = 1 Then Workbooks.Open FileName:="d:\data\excel\住所録.xls" Windows("住所録.xls").Activate |
(3)通常、マクロはシート上の画像やボタンに関連づけます。 しかし、より汎用性を高める為に、ツールバーのボタンに登録した方がよい場合があります。 右の例は、そのブックを開いたときに、ツールバーを作成し、マクロを登録する処理を行います。このブックを開かなければ,ツールバーは作成されないので、他の作業の邪魔になりません。 ★ただし、このブックを閉じても、ツールバーは削除されないので、下のマクロをworksheetイベントとして、登録します。 (VBE編集画面でワークシートをダブルクリックすると、ワークシートが閉じる前とか、アクティブになった時の処理を記述できます。) 右記をそのままモジュールシートに貼り付けて、赤字の部分を変更すると、すぐに使用できます。 アクティブシートに対して、何らかの処理を行う場合には、重宝します。(汎用ツールなどはこのようにしたらどうでしょうか?) |
Sub AUTO_OPEN() Morecbar_add MorecMenuVisible End Sub Sub Morecbar_add() CommandBars.Add Name:="Tools", Position:=msoBarTop, temporary:=True CommandBars("Tools").Visible = True End Sub Sub MorecMenuVisible() Dim Instmenu, instmenu2, Set Instmenu = CommandBars("Tools").Controls.Add(Type:=msoControlButton) Instmenu.Caption = "namae" With Instmenu .OnAction = "namae" ' マクロ名 .BeginGroup = True .Caption = "氏名" ' 表示文字 .Style = msoButtonCaption End With Set instmenu2 = CommandBars("Tools").Controls.Add(Type:=msoControlButton) instmenu2.Caption = "atena" With instmenu2 .OnAction = "atena" .BeginGroup = True .Caption = "宛名" .Style = msoButtonCaption End With End Sub sub namae() ' ツールバー上の「氏名」ボタンをクリックした場合のマクロを定義します。 sub end sub atena() ' ツールバー上の「宛名」ボタンをクリックした場合のマクロを定義します。 sub end |
(4)ちなみに、上で作成したツールバーを削除するのは、右の文です。 *thisworkbookで、beforecloseで、定義しておくと便利です。 |
Sub ツールバー削除() Application.CommandBars("Tools").Delete End Sub |
(5)マクロを実行すると、画面切り替えが見えて、ちょっとカッコ悪い・チカチカすると感じる場合は、右の文を処理前に追加挿入します。 詳しい説明は、vbeで、右の文の=の左側部分を選択してF1キーを押すと表示されます。 |
Application.ScreenUpdating = False |
(6)vlookupをVBAで使用した場合によく引っかかるのが,vlookupでエラーが帰ってきたときです. 数値型と文字型の違いなどでよくおきて,vlookupの定義文がちがうのかなぁと要らぬ苦労をしかねません。 そのときは,VLOOKUPの前に、error文を追加しておきます。検索先に対象データがなくても、エラーになりません。 on error goto なら、goto先にエラーの場合の処理を定義しておきます。 |
dim 検索値 as long dim 位置列 as long set 範囲=workbooks("1111.xls").worksheets("sheet1").range("a1:f200") .................................... On Error Resume Next Cells(i, 位置列) = Application.WorksheetFunction.VLookup(検索値, 範囲, 5, False) |
(7)指定ドライブのファイル名一覧をエクセル上に書き出します. 右記では、xlsの拡張子のファイルを1行ずつA列のセルに書き出していきます。 |
Sub drv() Dim f_namae As String Dim i As Long Dim j As Long Dim mes As String mes = MsgBox("「d:\data\excel」ディレクトリのエクセルシートを表示します。" _ , vbOKCancel, "エクセルシート表示") If mes = vbCancel Then End ret(0) = "1" i = 11 j = 1 ret(1) = Dir("d:\data\excel\*.xls", vbDirectory) Range("a" & i) = ret(1) Do While ret(j) <> "" i = i + 1 j = j + 1 ret(j) = Dir Range("a" & i) = ret(j) Loop end sub ※サンプルページに、このサンプルブックがあります。ダウンロードできます。 ※サンプルブックは、ドライブの指定もできます。エクセルで開けないファイルは、エラーになります。(その場合に、エクセルの挿入で対応するような処理を追加すると、さらに使い勝手がよくなると思います。) |
(8)「ファイルを開く」ウインドウを表示します。 | Application.FindFile |
(9)重複したデータを除いたデータを作りたい。 | ■処理イメージ 重複しているデータ領域のセルを順番に、書き出しセル領域にFINDであるかどうか調べて, なければ、書き出しセル領域に順番に書き出していく。 ※サンプルページに、このブックがあります。ダウンロードできます。 |
(10)条件に合致した行を削除する。 | Sub row_del() ' Application.ScreenUpdating = False ' 画面の更新を見せない. Dim ck As Variant Dim hantei As Variant Dim retu As String Dim gyou As Long Dim i As Long retu = "A": hantei = "" retu = InputBox("この処理は入力条件に従って、行削除を行います。" & Chr(13) & "どの列を判定しますか?", "列の指定") If retu = "" Then End hantei = InputBox(retu & "列が何であれば、行削除しますか?", "条件値") If hantei = "" Then End gyou = InputBox("何行から始めますか?", "行の指定") If gyou = 0 Then End ' ------------------------------------------ 条件に合致した行を削除する。 Do While Range(retu & gyou) <> "" Range(retu & gyou).Select ck = Selection.Value If ck = hantei Then Selection.EntireRow.Delete End If If ck <> hantei Then gyou = gyou + 1 Loop ' ------------------------------------------------------------------ End Sub ※サンプルページに、このブックがあります。ダウンロードできます。 |
topに戻る