2008年01月26日

第28回SelectCase文の説明

今回は前回作成したマクロの説明をします。

前回作成したマクロは、
Select Case文で1行1列の値を判定し
80〜100の時、"優"
60〜79の時、"良"
30〜59の時、"可"
0〜29の時、"不可"
を1行2列に代入します。

但し、1行1列の値が0〜100までの整数しか
入力されていない事を前提としています。

1行1列に次のような値が入力されていた場合、
正確に処理できません。

未入力の時、0と判断し、"不可"を設定
ブランクの時、何もしない。
文字列混入時、何もしない。
20.5を入力時、0〜29と判断し、"不可"を設定
29.5を入力時、何もしない。
110を入力時、何もしない。

人が入力したデータは誤っている可能性がある為、
エラーチェックが必要となりますが、
データベース等のデータで、
決まった値しか入力されていないのであれば、
エラーチェックは不要となります。

ではまた・・・
posted by ぷろぐらまー at 22:18| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2008年01月14日

第27回SelectCase文


前回、前々回は入力した値によって
以下の判定を行いました。

@未入力またはブランクの時 "未入力エラー"
A文字列混入時 "文字列混入エラー"
B少数混入時 "少数混入エラー"
C80〜100の整数値 "優"
D60〜79の整数値 "良"
E30〜59の整数値 "可"
F0〜29の整数値 "不可"
G0〜100ではない整数値 "範囲外エラー"

もしも、0〜100の整数値しか入力されていなければ、
上記C〜Fだけの判定で十分となります。

この場合の分岐処理は、ElseIfを用いたIf文より、
SelectCase文を使うほうが、より自然です。

[初期設定]
ファイル名:Book1.xls
シート名:Sheet1
下記の値を設定する
1行A列:35

[マクロの処理]
1行A列の値を判定し、判定結果を1行B列に設定する。
判定方法は上記C〜Fを参照して下さい。

尚、0〜100の整数値以外が入力されていた場合、
1行B列に設定されるメッセージは考慮していません。


まずは、下記のMacro1を作成して下さい。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2008/01/14 ユーザー名 :
'

'判定処理
Select Case Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 1)
Case 80 To 100
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "優"
Case 60 To 79
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "良"
Case 30 To 59
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "可"
Case 0 To 29
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "不可"
End Select


End Sub

1行A列に0〜100までの整数値を入力した場合、
正しく判定される事を確認してください。

0〜100までの整数値以外を入力した場合、
正しく判定されない事を確認してみて下さい。

ソースコードについては、次回説明します。

ではまた・・・
posted by ぷろぐらまー at 11:13| Comment(1) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2008年01月12日

第26回複数条件のIf文の説明

今回は前回作成したマクロの説明をします。

前回作成したマクロは1行A列の値を判定し、
判定結果を1行B列に設定します。

判定方法と1行B列の設定値は以下の8パターンです。

@未入力またはブランク "未入力エラー"
A文字列混入時 "文字列混入エラー"
B少数混入時 "少数混入エラー"
C80〜100の整数値 "優"
D60〜79の整数値 "良"
E30〜59の整数値 "可"
F0〜29の整数値 "不可"
G0〜100ではない整数値 "範囲外エラー"

この様に複数の条件で処理が分岐する場合、
ElseIfを用いたIf文を使用します。

処理の流れとしては、
@から順番に判定していき、
条件に当てはまったら、1行B列に値を
設定してIf文を終了します。

Gの条件はElseを使っていますので、
@〜Fまですべて満たされなければ、
必ずGの処理が行われます。

以下にこのIf文の補足事項を示します。

まず、Bでは、
少数が混入しているかチェックする為に
InStr関数を使っています。

InStr(1, work, ".", vbTextCompare)

InStr関数に上記の様な四つの引数を設定した場合、
変数workの1文字目から少数点を検索し、
見つかった場合は検索位置を返します。

例えば、workの値が0.5であれば、
少数点は左から2文字目なので、2を返します。

見つからなかった場合は、0を返します。

1行1列の値が整数なら、少数点が見つからず、
InStr関数は0を返します。

その為、下記ElseIf文を満たさず、Cの判定に
進みます。

ElseIf 0 <> InStr(1, work, ".", vbTextCompare) Then

1行1列の値が少数なら、変数work内で
少数点が見つかり、InStr関数は0以外を返します。
その為、ElseIfの条件を満たし、
1行B列に"少数混入エラー"を設定し、
If文を終了します。

InStr関数の詳細な説明はヘルプファイル等を
参照してみて下さい。

次にC〜Fの判定ですが、ここでは
AND演算子を使っています。

AND演算子はAND演算子の前後の条件を
満たした場合のみ、
条件を満たした事になります。

下記はCの判定処理ですが、
ANDを使っている為、
変数workが80以上かつ100以下という
二つの条件を満たす必要があります。

ElseIf 80 <= work And work <= 100 Then

AND演算子に対し、OR演算子があり、
こちらは、二つの条件のうちどちらか
一つでも満たせば、条件を満たした
事になります。

AND演算子、OR演算子についても、
ヘルプファイル等で調べてみてください。

ではまた・・・
posted by ぷろぐらまー at 13:48| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2008年01月09日

第25回複数条件のIf文

第5回では、入力した数値が
70以上なら合格、70未満なら不合格
という判定でした。

今回は以下の4段階評価を行います。・・・@

80 〜 100 優
60 〜 79 良
30 〜 59 可
0 〜 29 不可

さらに今回は以下のエラー処理も追加します。・・・A

未入力またはブランク入力時、未入力エラー
数字でない文字列混入時、文字列混入エラー
少数混入時、少数混入エラー
0〜100ではない整数混入時、範囲外エラー


[初期設定]
ファイル名:Book1.xls
シート名:Sheet1
下記の値を設定する
1行A列:35

[マクロの処理]
1行A列の値を判定し、判定結果を1行B列に設定する。
判定方法は上記@とAを参照して下さい。

まずは、下記のMacro1を作成して下さい。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2008/01/09 ユーザー名 :
'

'1行1列の値を変数workに格納
Dim work As String
work = Trim(Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 1))

'workの値を判定し、判定結果を1行2列に格納
If "" = work Then
'未入力またはブランク入力時
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "未入力エラー"
ElseIf False = IsNumeric(Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 1)) Then
'文字列混入時
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "文字列混入エラー"
ElseIf 0 <> InStr(1, work, ".", vbTextCompare) Then
'少数混入時
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "少数混入エラー"
ElseIf 80 <= work And work <= 100 Then
'80〜100の整数値
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "優"
ElseIf 60 <= work And work <= 79 Then
'60〜79の整数値
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "良"
ElseIf 30 <= work And work <= 59 Then
'30〜59の整数値
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "可"
ElseIf 0 <= work And work <= 29 Then
'0〜29の整数値
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "不可"
Else
'0〜100ではない整数値
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = "範囲外エラー"
End If



End Sub

1行A列に35を設定し、マクロを実行してみて下さい。
1行B列に"可"が設定される事を確認して下さい。

1行A列にあらゆる値を設定して、
仕様どうりに動作しているか確認して下さい。

ソースコードについては、次回説明します。

ではまた・・・
posted by ぷろぐらまー at 05:55| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2008年01月03日

第24回マクロの環境設定の説明

今回は前回作成したマクロの説明をします。

前回作成したマクロは、判定条件である70、
表示文字列である合格、不合格を
シート上で設定しています。

その為、判定条件や表示文字列を変更する場合、
シート上に設定した値を変更するだけです。

ただ、変更しやすい反面、だれかにいじられる
可能性も高くなります。

ソースコードについては、シート上で設定した値を
変数に格納して処理を行っています。

定数ではなく変数を使う理由は、
定数はシート上で設定した値を格納できないからです。

尚、判定条件や表示文字列を格納する場所として、
テキストファイル、データベース等もあります。

状況に応じて使い分けて下さい。

ではまた・・・
posted by ぷろぐらまー at 20:28| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

第23回マクロの環境設定


前回は、修正しやすいマクロを作るために
定数を使いました。

今回はさらに修正が簡単な方法として、
ワークシート上で値を設定します。

[初期設定]
ファイル名:Book1.xls
シート名:環境設定
下記の値を設定する
1行A列:合格基準点 B列:70
2行A列:合格時のメッセージ B列:合格
3行A列:不合格時のメッセージ B列:不合格

ファイル名:Book1.xls
シート名:Sheet1
下記の値を設定する
1行A列:35

[マクロの処理]
Sheet1の1行A列の数字が、環境設定の1行B列の数値未満
ならSheet1の1行B列に環境設定の3行B列の値を設定、

Sheet1の1行A列の数字が環境設定の1行B列の数値以上
ならSheet1の1行B列に環境設定の2行B列の値を設定する。


まずは、下記のMacro1を作成して下さい。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2007/01/03 ユーザー名 :
'

'*********** 環境設定 ***********
'合格基準点
Dim hantei As Integer
hantei = Workbooks("book1.xls").Worksheets("環境設定").Cells(1, 2)
'合格時のメッセージ
Dim ok_word As String
ok_word = Workbooks("book1.xls").Worksheets("環境設定").Cells(2, 2)
'不合格時のメッセージ
Dim ng_word As String
ng_word = Workbooks("book1.xls").Worksheets("環境設定").Cells(3, 2)
'***********************************

'判定処理
If hantei <= Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 1) Then
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = ok_word
Else
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = ng_word
End If


End Sub

マクロを実行して処理を確認してみて下さい。

シート(環境設定)で設定した値を変えることによって、
処理結果が変わる事を確認してみて下さい。

ソースコードについては、次回説明します。

ではまた・・・
posted by ぷろぐらまー at 02:02| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月31日

第22回定数を使った処理の説明

今回は前回作成したマクロの説明をします。

前回作成したマクロは、1行1列に入力した数値が
70以上なら合格、70未満なら不合格と表示します。
(第5回と同じ処理です)

現状は70以上で合格となるわけですが、
例えば、30以上で及第点、30未満で落第点
とマクロの仕様を変える必要になるかもしれません。

仕様変更が必要となった場合、当然ソースコードの
修正が必要となります。

第5回のソースコードであれば、ソースコードの解析
が必要となります。

前回のソースコードであれば、ソースコードの解析は
必要ありません。
定数に設定した値を変えるだけで十分です。

具体的には、前回のマクロの下記部分

'*********** 環境設定 ***********
'合格基準点
Const hantei As Integer = 70
'合格時のメッセージ
Const ok_word As String = "合格"
'不合格時のメッセージ
Const ng_word As String = "不合格"
'***********************************

を次のように変更するだけです。

'*********** 環境設定 ***********
'合格基準点
Const hantei As Integer = 30
'合格時のメッセージ
Const ok_word As String = "及第点"
'不合格時のメッセージ
Const ng_word As String = "落第点"
'***********************************

定数は変数に似ていますが、
@宣言時にConstを先頭につける
A宣言時に値を代入する
B宣言時に代入した値を別の値に代入しなおす事
はできない

といった点で変数と異なります。

第5回の時には、判定条件である70、
表示文字列である合格、不合格をそのまま
ソースコードとして記述していましたが、
前回の様に定数とする事でソースコードの解析の
必要がなくなりました。

修正しやすいマクロを作成するために
定数を活用してみて下さい。

ではまた・・・
posted by ぷろぐらまー at 19:10| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月30日

第21回定数

マクロを作成した後も、マクロの修正作業は起こりえます。

マクロの作成時には、
後々の修正作業についても考慮すべきです。

今回はマクロの修正を簡単にする為、定数を使ってみます。

下記マクロは第5回のマクロと全く同じ処理内容ですが、
定数を使っています。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2007/12/30 ユーザー名 :
'

'*********** 環境設定 ***********
'合格基準点
Const hantei As Integer = 70
'合格時のメッセージ
Const ok_word As String = "合格"
'不合格時のメッセージ
Const ng_word As String = "不合格"
'***********************************

'判定処理
If hantei <= Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 1) Then
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = ok_word
Else
Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 2) = ng_word
End If


End Sub

マクロを実行し、第5回と同じ処理内容である事を
確認して下さい。

ソースコードについては、次回説明します。

ではまた・・・
posted by ぷろぐらまー at 21:37| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月27日

第20回マクロの動作確認

マクロを作成した後、
当然動作確認をする必要があります。

今回は、第18回の重複エラーチェック処理の
テスト方法を考えてみます。

このマクロは最初に1行1列が未入力か
チェックを行います。
その為、下記のテストケースが必要です。
@1行1列が未入力の場合
A1行1列にスペースのみ入力されていた場合

次に1行1列に文字列が入力されていた場合は、
F列に同じ文字列が存在するか検索します。

その為、検索できなかった場合と検索できた場合の
それぞれについてテストケースを考えます。

F列から検索できなかった場合として、
下記テストケースが必要です。
BF列が0件の場合
CF列が1件の場合
DF列が2件の場合

また、F列から検索できた場合として、
下記テストケースが必要です。
E1行1列とF列の1行目が同じ文字列の場合
F1行1列とF列の2行目が同じ文字列の場合
(FのF列の1行目は1行1列とは別の文字列を設定する)

@〜Fまでのテストケースは最低限必要だと思います。

ではまた・・・
posted by ぷろぐらまー at 21:51| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月24日

第19回重複エラーチェックの説明

前回作成した重複エラーチェックのソースコード
について説明します。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2007/12/23 ユーザー名 :
'

'重複チェックする文字列を格納する
Dim chk_word As String
chk_word = Trim(Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 1))

'1行1列が未入力またはブランクの場合、エラーメッセージを出力、処理終了
If "" = chk_word Then
MsgBox "1行1列が未入力です", vbOKOnly, "エラーメッセージ"
Exit Sub
End If

'F列検索用ループカウンタ
Dim ctr As Long
ctr = 1

'F列を1行目からデータが無くなるまで検索
Do Until "" = Trim(Workbooks("book1.xls").Worksheets("sheet1").Cells(ctr, 6))
'1行1列と同じデータがF列にあったらエラーメッセージを出力、処理終了
If chk_word = Trim(Workbooks("book1.xls").Worksheets("sheet1").Cells(ctr, 6)) Then
MsgBox "既に登録済みです", vbOKOnly, "エラーメッセージ"
Exit Sub
End If
ctr = ctr + 1
Loop

MsgBox "登録可能です", vbOKOnly, "インフォメーション"

End Sub

上記が重複エラーチェックのソースコードです。

最初に行う処理は、String型の変数chk_wordの宣言と、
chk_wordに1行1列の値を格納する事です。

String型の変数chk_wordを可変長で宣言しているので
約20億個までの文字を格納できます。

変数のサイズは、格納した文字列の長さにより変化します。
文字数 x 2byte + 10byte

String型には固定長で宣言する事もできます。

Dim chk_word As String * 30
上記の様に宣言すると、変数のサイズは、
30 x 2byte = 60byteとなり、
可変長の70バイトより小さくて済みますが、
30文字未満の文字列を
格納した場合でも文字列の後ろをブランクで
埋めて30文字にして格納しますし、
30文字を超える文字列を格納した場合、
文字列の左から30文字しか格納されません。

処理内容に応じて固定長にするか可変長にするか
判断して下さい。
尚、固定長の場合、65526文字までが限界です。

次に1行1列の内容が未入力またはブランクでないか
チェックします。

1行1列に文字列が無いとこのマクロを実行する意味が
無いので、ここでチェックしています。

1行1列に文字列が入力されていた場合、同じ文字列がF列に
存在するかチェックします。

具体的には、F列の1行目から2行目、3行目と
F列が空になるまで処理を繰り返し、
1行1列と同じ文字列があれば、既に存在していると
判断し、エラーメッセージ出力、処理終了となります。

F列が空になるまで処理を繰り返しても
1行1列と同じ文字列がF列にない場合、
重複チェックエラーとはならず。
登録可能です
とメッセージを表示し、処理終了します。

ではまた・・・
posted by ぷろぐらまー at 19:44| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月23日

第18回重複エラーチェック

前回、前々回とエラーチェックについて説明しました。
今回は重複チェックを行います。

たとえばメールアドレスの設定時、
正しく入力しても既に使われてしまっている場合、
設定できません。

今回は入力した文字列が既に登録済みか
チェックするマクロを作成します。

[初期設定]
ファイル名:Book1.xls
シート名:Sheet1
下記の値を設定する
1行A列:あああ

1行F列:あああ
2行F列:いいい
3行F列:ううう
4行F列:えええ
5行F列:おおお

[マクロの処理]
まずは、1行A列が入力されているかチェックする。
入力されていない場合、メッセージボックスで、
1行1列が未入力です
と表示し、マクロを終了する。

1行A列が入力されている場合、
F列に同じ文字列が存在するかチェックする。

F列に同じ文字列が存在する場合、
メッセージボックスで、既に登録済みです
と表示する。
F列に同じ文字列が存在しない場合、
メッセージボックスで、登録可能です
と表示する。

まずは、Macro1を下記の様に作成して下さい。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2007/12/23 ユーザー名 :
'

'重複チェックする文字列を格納する
Dim chk_word As String
chk_word = Trim(Workbooks("book1.xls").Worksheets("sheet1").Cells(1, 1))

'1行1列が未入力またはブランクの場合、エラーメッセージを出力、処理終了
If "" = chk_word Then
MsgBox "1行1列が未入力です", vbOKOnly, "エラーメッセージ"
Exit Sub
End If

'F列検索用ループカウンタ
Dim ctr As Long
ctr = 1

'F列を1行目からデータが無くなるまで検索
Do Until "" = Trim(Workbooks("book1.xls").Worksheets("sheet1").Cells(ctr, 6))
'1行1列と同じデータがF列にあったらエラーメッセージを出力、処理終了
If chk_word = Trim(Workbooks("book1.xls").Worksheets("sheet1").Cells(ctr, 6)) Then
MsgBox "既に登録済みです", vbOKOnly, "エラーメッセージ"
Exit Sub
End If
ctr = ctr + 1
Loop

MsgBox "登録可能です", vbOKOnly, "インフォメーション"

End Sub

マクロを実行すると1行1列の"あああ"が
既に1行F列に存在する為、
既に登録済みです
とメッセージが出力されます。

1行1列やF列のデータを書き換えて、
マクロを実行してみて下さい。

マクロのソースコードについては次回説明します。

ではまた・・・
posted by ぷろぐらまー at 13:16| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月15日

第17回エラーチェックの説明

前回作成したエラーチェックのソースコード
について説明します。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2007/12/14 ユーザー名 :
'

'過去に行ったチェック処理結果を削除する。
'(B列を選択し、セル内の値を削除する)
Columns("B:B").Select
Selection.ClearContents
'B列のセル幅を18にセット
Columns("B:B").ColumnWidth = 18

'行カウンタをの宣言
Dim gyo_ctr As Integer

'1 行目から5行目まで処理を繰り返す。
For gyo_ctr = 1 To 5
'数字でなければ、B列に"数字を入力して下さい"を設定する。
If False = IsNumeric(Trim( _
Workbooks("book1.xls").Worksheets("sheet1").Cells(gyo_ctr, 1))) Then
Workbooks("book1.xls").Worksheets("sheet1").Cells(gyo_ctr, 2) = _
"数字を入力して下さい"
End If
Next

End Sub

上記がエラーチェックのソースコードです。

最初に行う処理は、B列に入力されている値の削除と
B列の幅を18に設定する事です。

B列に入力されている値を削除することで、
過去に行ったエラーチェック処理のエラーメッセージを
削除できます。

B列の幅を18に設定する事で、エラーメッセージを
表示するのに十分な幅となります。

これらの処理はマクロの記録時に手作業を行えば、
自動生成されます。

次にエラーをチェックする処理ですが、
今回の処理は1行目から5行目まで繰り返します。

第7回で使用したDo Until〜Loopを
使うこともできますが、
より自然なFor〜nextを使います。

For gyo_ctr = 1 To 5
(中略)
Next
上記の文は、For文とNext文の間の
処理を5回繰り返しますが、
その際、gyo_ctr の値は
まず1を設定し、処理を繰り返すごとに
1加算されます。

For文の中にはIf文が1つあります。
セルの値をTrim関数で余分なスペースを削除し、
その値をIsNumeric関数に渡しています。
IsNumeric関数は渡された値が数字か判断し、
数字ならTrue、数字でないならFalseを返します。
この時点で、
IsNumeric(Trim( _
Workbooks("book1.xls").Worksheets("sheet1").Cells(gyo_ctr, 1)))
はTrueかFalseになり、その後、If文の判定が行われます。
IsNumeric関数がFalseを返していた場合のみ、
B列にエラーメッセージが設定されます。

ではまた・・・
posted by ぷろぐらまー at 07:17| Comment(1) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月14日

第16回エラーチェック

例えば、数値データを手入力してもらい、
それをマクロで処理するとしましょう。

数値データを手入力する時、
当然入力ミスが起こりえます。

入力ミスについては、可能な限り、
マクロでチェックすべきでしょう。

今回は、入力したデータが数字であるかチェックする
マクロを作成します。

[初期設定]
ファイル名:Book1.xls
シート名:Sheet1
下記の値を設定する
1行A列:35
2行A列:AAA
3行A列:100
4行A列:あああ
5行A列:70R

[マクロの処理]
1行A列が数字ならなにもしない。
1行A列が数字でないなら1行B列に
"数字を入力して下さい"を設定する。

2行目から5行目も同様の処理を行う。

まずは、Macro1を下記の様に作成して下さい。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2007/12/14 ユーザー名 :
'

'過去に行ったチェック処理結果を削除する。
'(B列を選択し、セル内の値を削除する)
Columns("B:B").Select
Selection.ClearContents
'B列のセル幅を18にセット
Columns("B:B").ColumnWidth = 18

'行カウンタをの宣言
Dim gyo_ctr As Integer

'1 行目から5行目まで処理を繰り返す。
For gyo_ctr = 1 To 5
'数字でなければ、B列に"数字を入力して下さい"を設定する。
If False = IsNumeric(Trim( _
Workbooks("book1.xls").Worksheets("sheet1").Cells(gyo_ctr, 1))) Then
Workbooks("book1.xls").Worksheets("sheet1").Cells(gyo_ctr, 2) = _
"数字を入力して下さい"
End If
Next

End Sub


マクロを実行し、処理結果を確認して下さい。

B列に"数字を入力して下さい"と表示された行は、
A列を数字に直して再度マクロを実行してみて下さい。

マクロのソースコードについては次回説明します。

ではまた・・・
posted by ぷろぐらまー at 07:04| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月12日

第15回確認メッセージの説明

前回作成した確認メッセージのソースコード
について説明します。

If vbNo = MsgBox("マクロを実行します。よろしいですか?", _
vbQuestion + vbYesNo + vbDefaultButton2, "確認") Then
'いいえ選択時、処理を抜ける
Exit Sub
End If

上記が確認メッセージを出力しているソースコードです。

まずは、MsgBox("マクロを実行します。よろしいですか?", _
vbQuestion + vbYesNo + vbDefaultButton2, "確認")
が実行されます。

vbQuestionは、?印のアイコンを出力します。
vbYesNoは、[はい]と[いいえ]の2つのボタンを出力します。
vbDefaultButton2は、2つめのボタンにフォーカスをセット
します。
2つめのボタンにフォーカスがあると、
このメッセージが表示された時、ENTERを入力すると、
2つめのボタンである[いいえ]が選択されます。

間違って実行されない様にする為、この様な仕様としました。

第12回で追加した処理終了メッセージは、
MsgBoxステートメントを使いましたが、
今回はMsgBox関数を使用しました。
()があるかないかで区別できます。

MsgBox関数を使うと、[はい][いいえ]のどちらがクリック
されたのかを知る事ができます。

[はい]がクリックされると、
MsgBox("マクロを実行します。よろしいですか?", _
vbQuestion + vbYesNo + vbDefaultButton2, "確認")
はvbYesという値になり、
[いいえ]がクリックされると、
vbNoという値になります。

次にif文の判定が行われます。
if文ではMsgBox関数の値がvbNoと同じであれば、
Exit Subを行い、
そうでなければ何も行いません。

[はい]が選択された場合、何もせずに
次の処理を行いますが、
[いいえ]が選択された場合、
Exit Subにより、
このサブプロシージャを終了します。

MsgBox関数に設定できる値ついては、
エクセルのヘルプファイル等で
調べる事ができます。

ではまた・・・
posted by ぷろぐらまー at 04:05| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月11日

第14回確認メッセージ出力

今回は第7回で作成した処理に
実行確認メッセージを追加します。

具体的には、マクロを実行した時に、
マクロを実行します。よろしいですか?
というメッセージを出力し、
[はい]ボタンがクリックされればマクロを実行し、
[いいえ]ボタンがクリックされれば
マクロを実行しません。

第7回で作成したマクロの最初に下記を追加して下さい。
(もちろんSub Macro1()の後ろです。)
If vbNo = MsgBox("マクロを実行します。よろしいですか?", _
vbQuestion + vbYesNo + vbDefaultButton2, "確認") Then
'いいえ選択時、処理を抜ける
Exit Sub
End If

マクロを実行すると、メッセージが表示されます。
[はい]ボタンをクリックした場合と、
[いいえ]ボタンをクリックした場合の
処理の違いを確認してみて下さい。

ソースコードについては次回説明します。

ではまた・・・
posted by ぷろぐらまー at 01:27| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月10日

第13回メッセージ出力処理の説明

前回作成した処理終了メッセージのソースコード
について説明します。

MsgBox "処理が終了しました。", vbOKOnly + vbInformation, "インフォメーション"

上記が処理終了メッセージを出力しているソースコードです。

まず、MsgBox
今回は、MsgBoxステートメントを用いてメッセージを表示
しています。

次に"処理が終了しました。"
ここに、表示したいメッセージを"で囲んで設定しています。

次にvbOKOnly + vbInformation
vbOKOnlyはOKボタンのみ表示させたい時、設定します。
vbInformationはインフォメーションである事を表す
iをデザインしたアイコンを表示したい時、設定します。

最後に"インフォメーション"
ここで設定した内容がタイトルバーに表示されます。

次回もメッセージについて説明していきます。

ではまた・・・
posted by ぷろぐらまー at 04:09| Comment(0) | TrackBack(1) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月09日

第12回メッセージ出力

今回は第7回で作成した処理に
処理終了メッセージを追加します。

第7回で作成したマクロの最後に下記を追加して下さい。
(もちろんEnd Subの手前です。)

MsgBox "処理が終了しました。", vbOKOnly + vbInformation, "インフォメーション"

マクロを実行すれば、処理終了時にメッセージが出力されます。

処理が終了した事を確認し、OKボタンをクリックします。
(右上の×印をクリックしても、
OKボタンをクリックしたのと同様です。)

尚、OKボタンをクリックしてウインドウを閉じるまでは、
エクセル上のほかの作業を行う事はできません。

メッセージ出力のソースコードについては次回説明します。

ではまた・・・
posted by ぷろぐらまー at 02:24| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月06日

第11回オーバーフロー

第7回で作成した繰り返し処理に話を戻します。

この処理で複数のデータを処理できる様になりました。

ただし、限りはあります。

32766件までなら正常に処理できますが、
32767件以上では異常終了してしまいます。

gyouは整数型の変数で-32,768 〜 32,767の値を
格納する事ができます。

32767件目の合格か不合格を設定する処理は行えますが、
その後、gyouを1加算して32768を代入しようとすると、
オーバーフローしてしまいます。

実際に実行してみれば、"オーバーフローしました"
というエラーメッセージが出力されます。

デバッグをクリックすれば、ソースコード上で
エラーが起きた場所が黄色くなっているのを
確認できます。

メニューバーから[実行]-[リセット]で処理を
終了させて下さい。

32767件以上のデータを処理することは絶対にありえない
場合は特に対策を考える必要はありません。

32767件以上のデータを処理する可能性ががある場合は、
gyouを整数型から長整数型に変更して下さい。

長整数型は-2,147,483,648 〜 2,147,483,647 の値を
格納する事ができます。

エクセル2003の最大行数は、65536行なので、
余裕でカバーできます。

デメリットとしては、
整数型はメモリーを2バイト使うのに対し、
長整数型は4バイト使う事です。

状況に応じて使い分けて下さい。

gyouを整数型から長整数型に変更するには、
Dim gyou As Integer を
Dim gyou As Long に変更するだけです。

ではまた・・・
posted by ぷろぐらまー at 07:58| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

2007年12月05日

第10回変数宣言を必須にする理由

COBOL、C、C++、Java等、多くの言語で
変数宣言は必須です。
ただし、BASICは変数宣言が必須ではありません。

変数宣言が必須で無いメリットを考えると・・・
単純に記述する手間が省けるという事です。

逆に変数宣言が必須であるメリットを考えると・・・
プログラム内で変数のスペルミスをした時、
エラーとして発見できる事です。

変数宣言が必須でないと、変数のスペルミスをしても
別の変数と解釈され、普通に実行されてしまいます。

数行程度のプログラムであれば、変数宣言をしない方が
手間が省けて良いと考えてもいいかもしれませんが、
多くの場合、変数宣言が必須の方がメリットが大きいと
思います。

VisualBasicはBASICの考えを受け継いで、
変数宣言が初期設定では必須になっていない
と考えられますが、
多くの言語で採用されている様に変数宣言は
必須にすべきでしょう。

ではまた。
posted by ぷろぐらまー at 09:37| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする

第9回変数の宣言を必須にしよう

エクセル2003はインストールした初期状態では、
変数宣言が必須にはなっていません。

確認してみましょう。

VisualBasicEditorを開いて下さい。
メニュバーより、[ツール]-[オプション]を選択し、
オプションウインドウを表示させる。

"編集"タブの"コードの設定"グループの中に
変数の宣言を強制する
というのがあります。
これがチェックされていなければ、チェックして
OKボタンをクリックして下さい。
既にチェックされていれば、キャンセルボタンをクリックして
ウインドウを閉じて下さい。

これで、今後作成するマクロはすべて変数宣言が必須となります。

この状態でマクロを作成してみて下さい。

マクロを作成し、ソースコードを見ると、
Option Explicit
というのが記述されているのが確認できます。

注意点が2点程あります。
1点目は、このOption Explicitは削除する事ができ、
削除してしまうと同じウインドウ内のソースコードは
変数宣言が必須では無くなってしまう事です。

2点目は、変数の宣言を強制する
をチェックする前に作成したマクロは
変数宣言が必須になっていない事です。
この問題は、マクロの一番上に1行追加して
そこにOption Explicitを記述すれば解決します。

変数宣言を必須にする前に作成したマクロは、
Option Explicitを記述し、
変数宣言を必須にした後は、絶対削除しない。
これを行えば大丈夫です。

なぜ変数宣言を必須にするかは、次回説明します。

ではまた・・・
posted by ぷろぐらまー at 00:03| Comment(0) | TrackBack(0) | 入門偏 | このブログの読者になる | 更新情報をチェックする
Google
 
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。