(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に戻る