パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
EXCEL95TIPS(EXCEL95から2000へ)
おじさんにとっては、EXCEL95との出会いは衝撃的なものでありましたが、EXCEL2000は更に一段と
進化した姿をみせてくれています。これは、ほとんどVisual
Basic
に遜色のないプログラミングツールと
言えましょう。これはおそるべきツールです。
強力なUserFormが備わり,
各種ActiveXコントロール(ListBox,CommandButton
など)は多彩な
イベントを持ち、プログラムの自由度は格段に向上しました。
ここでは主役の座を去りつつあるEXCEL95の固有のコーディングのTIPS、およびEXCEL95から
EXCEL2000への移行時のコードの変更についてまとめてみたいと思います。
1 はじめに(EXCEL95で作制したEXCELアプリは2000で動作するか)
EXCEL95で作制されたEXCELアプリはEXCEL2000でもほとんど問題なく動きます。
オブジェクト、プロパティにかなり変更、廃止がありましたが、変更、廃止のほとんどのオブジェクトは
隠しオブジェクトとしてEXCEL2000に引き継がれていますので、動作に問題ありません。
EXCEL95のModule sheet
に作制したマクロは、EXCEL2000でも標準Module
sheetに引き継がれます。
EXCEL2000のmodule sheet
は通常のWorkSheet
とは切り離されたため、通常のExcelのsheet画面
には現れません。Visual Basic Editor
を起動するとVB開発画面の中で確認できます。
2 オブジェクトの指定の仕方
(1) Worksheet オブジェクト
およびその他のコントロール(オブジェクト)
EXCEL95ではWorksheetを指定するのに、Worksheetオブジェクトを使用して
Worksheets(”Sheet1”)
のように記述していました。
EXCEL2000では、上記の記述の仕方でもO.K.ですが、Sheet1
のように
固有のオブジェクト名(nameプロパティ)を直接記述していくことが可能です。(Visual
Basicと同じになった)
例を見てください
'InputBoxに入力された値でA列を検索し、該当するものがあればB列の文字色を赤くする Sub check_name() book_name = InputBox("Book name") x% = Worksheets("Sheet1").Range("A10000").End(xlUp).Row For i = 1 To x% If Worksheets("Sheet1").Cells(i, 1).Value = book_name Then Worksheets("Sheet1").Cells(i, 2).Font.Color_ = RGB(255, 0, 0) Else Worksheets("Sheet1").Cells(i, 2).Font.Color = RGB(0, 0, 0) Next End Sub |
'InputBoxに入力された値をキーとして検索し、該当する行をsheet2の表にコピーする Sub copy1() key = InputBox("検索するKEY") x% = Sheet1.Range("A10000").End(xlUp).Row Sheet2.Range("A1:D10").Clear For i = 1 To x% If Sheet1.Cells(i, 1).Value Like "*" + key + "*" Then For j = i + 1 To x% If Sheet1.Cells(j, 1) <> "" Then Exit For Next j Sheet1.Range(Cells(i, 2), Cells(j - 1, 4)).Copy Destination:=Sheet2.Cells(1, 1) End If Next End Sub |
その他のボタンやリストボックスも同様です。だいたい以下の様です。
EXCEL95 | EXCEL2000 |
Worksheets(1).Buttons(1) | Sheet1.Command1 |
Worksheets(2).ListBoxes(1) | Sheet2.List1 |
Worksheets("Sheets1").TextBoxes(1) | Sheet1.Text1 |
(2) Picture オブジェクト
EXCEL95では画像ファイル(BMP)を扱うのに、Picture
オブジェクトを使いました。
画像ファイルの位置やサイズ、表示、非表示は以下のプロパティで指定しました。
位置 Top,Left,
サイズ Width,Height
(非)表示 Visible
Sheets(4).Pictures(3).Left = 240:
Sheets(4).Pictures(3).Top = 0 Sheets(4).Pictures(4).Left = 230: Sheets(4).Pictures(4).Top = 0 Sheets(4).Pictures(1).Visible = True: Sheets(4).Pictures(2).Visible = True Sheets(4).Pictures(3).Visible = True: Sheets(4).Pictures(4).Visible = False |
EXCEL95で新しく画像ファイルを読み込む時は、Picturesコレクションに対しInsert
メソッドを使いました。
以下の例はおじさん作の Brows.xls(EXCEL自作アプリからダウンロード可)
からの抜粋です。
指定された画像ファイルを、指定の位置、サイズで挿入するマクロです。
'
fには画像のファイル名が渡されます。
xは行を現わしグローバル変数として宣言されています。 ' mypathにはパス名が入っており、グローバル変数として宣言されています。 Sub pictview(f) f = mypath + "\" + f Sheets(1).Pictures.Insert f pc = Sheets(1).Pictures.Count Sheets(1).Pictures(pc).Left = Columns("F").Left Sheets(1).Pictures(pc).Top = Rows(x).Top Sheets(1).Rows(x).RowHeight = 40 Sheets(1).Pictures(pc).Height = 40: Sheets(1).Pictures(pc).Width = 50 End Sub |
EXCEL2000では
Pictureオブジェクトは隠しオブジェクトとなり、画像ファイルは
Image コントロール
が扱うことになりました。(Visual Basicと同じになった)。
従いまして、コードの記述の仕方が大幅に変更となりました。
以下の例は、EXCERL2000で
Imageコントロールへの画像ファイル読み込みと、位置、サイズの
変更をしている例です。
画像の読み込みはLoadPicture を使います。
位置、サイズはImage コントロールの
Top,Left,Width,Height
プロパティで行います。
' 画像ファイルの読み込み LoadPictureを使う Private Sub CommandButton1_Click() filename = Application.GetOpenFilename() UserForm1.Image1.Picture = LoadPicture(filename) End Sub ' 位置変更 Private Sub CommandButton2_Click() UserForm1.Image1.Left = UserForm1.Image1.Left - 5 End Sub Private Sub CommandButton3_Click() UserForm1.Image1.Left = UserForm1.Image1.Left + 5 End Sub ' サイズ変更 Private Sub CommandButton4_Click() UserForm1.Image1.Width = UserForm1.Image1.Width + 5 UserForm1.Image1.Height = UserForm1.Image1.Height + 5 End Sub Private Sub CommandButton5_Click() UserForm1.Image1.Width = UserForm1.Image1.Width - 5 UserForm1.Image1.Height = UserForm1.Image1.Height - 5 End Sub |