面倒臭いVBAプログラムはWithちゃえYO!! 【VBA在庫管理#08】

Excel VBA 部品在庫管理アイキャッチ画像部品在庫管理

ブルゾンちえみどこ行った? どうも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

 

Excel画像最終セル起点

 

前回作成した入出庫履歴VBAプログラムは、
各列(項目)ごとに最終セルを取得していました。

 

これだと、何者かが入出庫履歴シートの項目列に
データを入力してしまった場合、その項目がずれてしまうんです。

Excel画像いたずら

 

入出庫履歴シートの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

oReのぞき見

コメントを入れる(書く)ことによって可読性?が上がりますよね。

  ↓たとえばこんな感じ

'コマンドボタン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プログラムの手直しをする時でも、
『えーっと…んんっ?』となってしまいます。自分で作った物なのに…

なので、なるべくコメントは書いたほうがいいですね。
※書きすぎには注意

 

まとめ

With 共通するコード
  共通しないコード
End With
 シングルクォーテーションの後がコメントになる

可読性って難しいですよね…

初心者が書いたコードを上級者がみたらわかりづらいだろうし、
上級者が書いたコードは初心者にはさっぱりだろうし…

日本語でプログラミングできれば…

あっ!! と、特許とらなきゃ(焦)

まあ、レベルを上げるしかないっすね。

With oRe End With

次回 在庫管理ユーザーフォームに入出庫履歴がほしくね?

ExcelVBA部品在庫管理【目次】へ戻る

コメント

タイトルとURLをコピーしました