ブルゾンちえみどこ行った? どうもoReです。
前回作成した、在庫管理の入出庫プログラムのところ、
すごく長いコードが羅列してますよね?
コードをみたとき『うわっ…』ってテンション下がりませんか?
ブログなんかでも一緒らしいですね、文字がすし詰めに
なっているブログはあまり読まれないみたいです。
可読性というみたいですが、初心者の私には
『カ・ド・ク・セ・イ ?』といった感じです(笑)
今回は、可読性?をよくしていきましょう。
With EndWith
・With ウィズ
Withは、『一緒』という意味みたいです。
では、在庫管理の入出庫プログラムをWithちゃいましょう。
※出庫処理
↓こんな感じ
With Worksheets(“入出庫履歴”).Cells(Rows.Count,2).End(xlUp)
.Offset(1,0) = Now
.Offset(1,1) = TextBox1
.Offset(1,2) = Knskcell.Offset(0, -1)
.Offset(1,3) = Knskcell.Offset(0, 1)
.Offset(1,4) = Knskcell.Offset(0, 2)
.Offset(1,5) = Knskcell.Offset(0, 3)
.Offset(1,6) = TextBox3*1
.Offset(1,7) = “出庫”
End With
With 共通するコード 共通しないコード End With
入出庫履歴シートの2列目(B列)の最終セルを起点に、
Offsetを使用して各項目にデータを出力しています。
↓こんなイメージ
Worksheets(“入出庫履歴”).Cells(Rows.Count,2).End(xlUp) ←共通するコード Worksheets(“入出庫履歴”).Cells(Rows.Count,2).End(xlUp).Offset(1,0) = Now ←共通しないコード Worksheets(“入出庫履歴”).Cells(Rows.Count,2).End(xlUp).Offset(1,1) = TextBox1 ←共通しないコード ↓以下同じ End with
前回作成した入出庫履歴VBAプログラムは、
各列(項目)ごとに最終セルを取得していました。
これだと、何者かが入出庫履歴シートの項目列に
データを入力してしまった場合、その項目がずれてしまうんです。
入出庫履歴シートの2列目(B列)の最終セルを起点にしておけば、
入出庫履歴データの各項目のずれはなくなります。
2列目(B列)にいたずらされたら?
各項目のずれはないですが、いたずらされたセルの下に
データが出力されてしまいますね。
そこはほら、ねっ…
入庫処理のほうもWithちゃってください。
不要コード探し
在庫管理VBAプログラムに不要なコードがあります。
↓どこだかわかります?
Private Sub CommandButton1_Click()
Dim Knskcell As Range
If TextBox1 = "" Then
MsgBox "入出庫者名を入力してください。"
ElseIf TextBox2 = "" Then
MsgBox "バーコードデータを入力してください。"
ElseIf TextBox3 = "" Then
MsgBox "個数を入力してください。"
Else
Set Knskcell = Range(“C:C”).Find(what:=TextBox2, lookat:=xlWhole)
If Knskcell Is Nothing Then
MsgBox “部品が登録されていません。”
ElseIf Knskcell = "" Then
MsgBox “部品が登録されていません。”
Else
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) - TextBox3
さすがです!!
If Knskcell Is Nothing Then MsgBox “部品が登録されていません。” ElseIf Knskcell = "" Then ←不要 MsgBox “部品が登録されていません。” ←不要 Else
この部分は、セルA1にバーコードデータを入力していた
ころのなごりですよね。
セルA1にバーコードデータを入力しないで、
入出庫ボタンを押されたときの処理として書きました。
ただ、今はテキストボックス2にバーコードデータを入力しており、
テキストボックス2に入力しないで入出庫ボタンを押すと、
メッセージを出すようになっているため、上記のコードは不要となります。
意味のない不要なコードは消して可読性?を上げましょう。
コメント
いまさら次郎って死語かしら?
いまさらですが、VBAプログラムコード内に
コメントを入れる(書く)ことができます。
‘ ←シングルクォーテーション
この、シングルクォーテーションの後がコメントになります。
Sub oRe() 'セルA1に、こまけぇこたぁいいんだよを入れるよ ←コメント Range("A1") = "こまけぇこたぁいいんだよ" 'オレオレ詐欺だよ、もっと早く教えろ!! ←好きな所にコメント End Sub
コメントを入れる(書く)ことによって可読性?が上がりますよね。
↓たとえばこんな感じ
'コマンドボタン1押したら出庫処理だよ!!(児嶋風)
Private Sub CommandButton1_Click()
Dim Knskcell As Range '変数Knskcellはレンジ型だよ!!(児嶋風)
If TextBox1 = "" Then '↓テキストボックス1未入力の場合(草)
MsgBox "入出庫者名を入力してください。" 'メッセージを出すよ!!(児嶋風)
ElseIf TextBox2 = "" Then '↓テキストボックス2未入力の場合(草)
MsgBox "バーコードデータを入力してください。" 'メッセージを出すよ!!(児嶋風)
ElseIf TextBox3 = "" Then '↓テキストボックス3未入力の場合(草)
MsgBox "個数を入力してください。" 'メッセージを出すよ!!(児嶋風)
Else '↓テキストボックスすべて入力済みの場合(草)
'Knskcell←C列からTextBox2のデータと完全一致したセル
Set Knskcell = Range(“C:C”).Find(what:= TextBox2, lookat:= xlWhole)
※ただしコメントを書きすぎると、逆にわかりづらくなるという良い見本です。
プログラムコードの先頭にシングルクォーテーションを付けて、
コードをコメントとして処理させないこともできます。
コメントアウトというらしいです。
Sub oRe() 'Range("A1") = "こまけぇこたぁいいんだよ" ←コメントにして処理させない End Sub
私の場合ですが、数カ月前に作ったVBAプログラムの手直しをする時でも、
『えーっと…んんっ?』となってしまいます。自分で作った物なのに…
なので、なるべくコメントは書いたほうがいいですね。
※書きすぎには注意
まとめ
共通しないコード
End With
可読性って難しいですよね…
初心者が書いたコードを上級者がみたらわかりづらいだろうし、
上級者が書いたコードは初心者にはさっぱりだろうし…
日本語でプログラミングできれば…
あっ!! と、特許とらなきゃ(焦)
まあ、レベルを上げるしかないっすね。
次回 在庫管理ユーザーフォームに入出庫履歴がほしくね?
コメント