パソコン活用研究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と同じになった)
例を見てください

EXCEL95の記述
'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

 

EXCEL2000での記述
'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

Pictureオブジェクト使用例
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


TopPage > Visual BasIc&Excel活用研究目次