ネェィティィヴ発音始めました、どうもoReです。
前回手直しした在庫管理入出庫プログラムの説明などしていきます。
・-1(出庫)処理として下記のようにプログラムしました。
Private Sub CommandButton1_Click()
Dim Knskcell As Range
Set Knskcell = Range(“C:C”).Find(what:= Range(“A1”), lookat:= xlWhole)
If Knskcell Is Nothing Then
MsgBox “部品が登録されていません。”
ElseIf Knskcell = "" Then
MsgBox “部品が登録されていません。”
Else
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) – 1
End If
End Sub
変数の宣言 Dim As
・Dim ディィム ・As アズ
Dimは、dimension(ディィメェンシャン)の略で
『寸法』とか『次元』という意味みたいです。
Asは、『なので』とか『として』という意味みたいです。
変数とは、データを入れる箱みたいな物で
データを入れたり出したりでき、とても便利です。
また、好きなだけ作ることができます。
変数の宣言とは
『この箱には、こんなデータをいれるよ!!』
と宣言しなければなりません。
例えば、『ねこ』と言う名前の箱を用意し
『この箱には、猫をいれるよ!!』と宣言した場合
『ねこ』と言う箱には、猫は入れますが人間は入れません。
↓これが変数の宣言です。
Dim Knskcell As Range
↓こんな感じです。
Dim Knskcell As Range 次元 Knskcell とします Range Knskcellと言う変数は、Range型だよ!!(児嶋風)
Dim 変数名 As 変数の型
・変数名は、好きな名前をつけます。
※わかりやすい名前をつけましょう。
AhoでもOKですが、アホってなんやねん!!となりますよね?
※ちなみに、Knskcellは
検索セル→Kensakucell→Knskcellとしました。
・変数の型は、どんなデータを入れるかを選びます。
よく使う変数の型
データの型 | 値の範囲 | |
整数型 | Integer インティィヂャ | -32768~32767の整数値 |
長整数型 | Long ロォーング | -2147483648~2147483647の整数値 |
日付型 | Date デェィトゥ | 日付と時刻 |
文字列型 | String ストゥリィング | 文字列 |
バリアント型 | Variant ヴェアリィアントゥ | あらゆる種類の値 |
オブジェクト型 | Object オブヂィクトゥ | オブジェクト |
ってオイ!! データの型にRangeがないんだが!!
はい、Rangeはオブジェクト型になります。
その他のオブジェクト型は
WorkbookとかWorksheet等があります。
また、オブジェクト型の変数にデータを入れる際は
Set 変数名 = オブジェクト となります。
例) Dim Ws As Worksheet
Set Ws = Worksheets(“sheet1”)
その他のデータ型の場合は
変数名 = データ となり、Setは書きません。
例) Dim Nennrei AS Integer
Nennrei = 100
例) Dim Namae As String
Namae = "オレ"
試しに、下記のようにプログラムを追加してみてください。
Private Sub CommandButton1_Click()
Dim Knskcell As Range
Dim Aho As String
Set Knskcell = Range(“C:C”).Find(what:= Range(“A1”), lookat:= xlWhole)
Aho = "部品が登録されていません。"
If Knskcell Is Nothing Then
MsgBox Aho
ElseIf Knskcell = "" Then
MsgBox Aho
Else
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) – 1
End If
End Sub
動作確認してみてください。
ちゃんと、部品が登録されていません。とメッセージがでましたか?
セルの検索 Find
・Find ファィンドゥ ・what ホワット ・lookat ルックアット ・Whole ホォゥル
Findは、『見つける』という意味みたいです。
Whatは、『何』という意味みたいです。
Lookatは、『~見る』という意味みたいです。
Wholeは、『全体』とか『全て』という意味みたいです。
くそ面倒臭い在庫管理入出庫プログラムでは
と言ったように、データを+-させるセルを一つ一つ指定していました。
手直ししたプログラムは、そうじゃなくて
セルA1のデータと同じデータが入ったセルを、Excelに探してもらいます。
Set Knskcell = Range("C:C").Find(what:= Range("A1"),lookat:= xlWhole)
↓こんな感じです。
C列内で、セルA1のデータと、全部一致するセルを、Knskcell(変数)に入れる
・全部一致するセルがあった場合は、Knskcellに一致したセルが入ります。
・全部一致するセルがなかった場合は、KnskcellにNothingが入ります。
Offset
・Offset オフセェトゥ
Offsetは、『補正』みたいな感じのようです。
オフセットとは、指定したセルから上下左右移動したセルを指定できます。
Offset(行,列)
例えば、セルE5からのOffsetは
セルH5を指定したければ
Range("E5").Offset(0,3)
セルD4を選択したければ
Range("E5").Offset(-1,-1)
と書けば指定できます。
では、手直し在庫管理入出庫プログラムを見てみましょう。
If Knskcell Is Nothing Then
MsgBox “部品が登録されていません。”
ElseIf Knskcell = "" Then
MsgBox “部品が登録されていません。”
Else
Knskcell.Offset(0, 4) =Knskcell.Offset(0, 4) – 1
End If
↓こんな感じです。
もし、KnskcellがNothingだった場合 部品が登録されていません。のメッセージを出す もし、Knskcellが空白("")だった場合 部品が登録されていません。のメッセージを出す もし、Knskcellが上記以外の場合 検索し一致したセルから右に4つ移動したセルに 検索し一致たセルから右に4つ移動したセルの データから1引いたデータを入れる
例えば、セルA1がore2だった場合は
といった動きになります。
なので、部品を1000品目追加したとしても
VBAのプログラムは変更しなくてもいいわけです。
Is Nothing
・Is イズ ・Nothing ナァシィング
Isは、『は(わ)』という意味みたいです。
Nothingは、『無し』という意味みたいです。
手直しした在庫管理入出庫プログラムのIf(条件分岐)は
一番目の条件式の所 『=』が『Is』になってます。
気付いてました?
If Knskcell Is Nothing Then
MsgBox “部品が登録されていません。”
ElseIf Knskcell = "" Then
MsgBox “部品が登録されていません。”
Else
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) – 1
End If
If knskcell = Nothing Then
と書いてしまいそうですが、これだとエラーがでます。
※なんでかは知らん(笑)
必ず Is Nothing と書きましょう。
まとめ
・その他 変数名 = データ
次回 ユーザーフォームでアプリ感をだす
コメント