リストボックスに最新の入出庫履歴から表示させる 【VBA在庫管理#11】

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

私は4連休ですよ(嬉)、どうもoReです。

前回は、増えていく入出庫履歴に対応させました。

今回は、上から古い順に並んでいる入出庫履歴を
新しい順にしていきます。

Insert 行の挿入

・Insert インサァートゥ

Insertは、『入れる』という意味みたいです。

 

Insertを使用すれば、行や列等を挿入できます。

そもそも入出庫履歴シートに出力する際、
最終セルの1つ下に入出庫データを出力させてるため、
入出庫履歴シートは、上から古い順になっています。

なので、入出庫履歴シートを上から新しい順にしてあげればいいわけです。

 

【VBA在庫管理#06】でこのように書きました。

 Range(“B3”) = 日時
 Range(“C3”) = 入出庫者
 このように書きますか?
 はい! これではだめですよね。
oReびっくり
1回目の入出庫はうまくいきますが、2回目の入出庫の時
また同じ3行目に入出庫データが出力されてしまいます。
これは入出庫履歴ではなくて、最後に入出庫した部品データです。

 

3行目に上書きされてしまうのでダメでしたが、
Insertを使用して3行目に行を挿入してやれば可能となります。

Excel行の挿入

 

3行目に行を挿入すると、今までの入出庫データが下へ移動するため
上から新しい順の入出庫履歴となります。

行を挿入する場合は

Rows(挿入する行).Insert

 

3行目に行を挿入するので

Rows(3).Insert

 

それでは、入出庫履歴シートに出力するプログラムを変更しましょう。
※出庫処理

  ↓この部分を変更です。

Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) – TextBox3
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

 

  ↓このように書き換えてください。※入庫処理もお忘れなく

Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) – TextBox3
With Worksheets(“入出庫履歴”)
  .Rows(3).Insert '3行目に行を挿入
  .Range("B3") = Now
  .Range("C3") = TextBox1
  .Range("D3") = Knskcell.Offset(0, -1)
  .Range("E3") = Knskcell.Offset(0, 1)
  .Range("F3") = Knskcell.Offset(0, 2)
  .Range("G3") = Knskcell.Offset(0, 3)
  .Range("H3") = TextBox3 * 1
  .Range("I3") = “出庫”
End With

 

動作確認してみてください。
ちゃんと3行目に出力していますか?
リストボックスにも反映してますか?

oReのぞき見

Delete 行の削除

・Delete ディィリィートゥ

Deleteは、『削除』という意味みたいです。

 

Deleteを使用すれば、行や列等を削除できます。

 

【VBA在庫管理#07】でこのように書きました。

 ※『最終行まで蓄積されたらどうするの?』って知らんがな(笑)
 そこはほら、自分でなんとかしてください(笑)

【VBA在庫管理#07】より

 

変更前の入出庫履歴シートへの出力プログラムは、
最終行までいくと、最終行に上書きされていきます。

しかし、変更した入出庫履歴シートへの出力プログラムは、
最終行までいくと、エラーが出てしまいます。

行の挿入エラー

 

最終行にデータがあると、行を挿入できないようなので、
Deleteを使用して最終行を削除しましょう。

Rows(削除する行).Delete

 

最終行を削除するので

Rows(Rows.Count).Delete

 

Rows(1048576).Deleteとなぜ書かないの?
 こちらをみてね→【VBA在庫管理#07】

行を挿入する前に、行を削除しないといけないので

Rows(3).Insertの上にRows(Rows.Count).Deleteを書きます。

Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) – TextBox3
With Worksheets(“入出庫履歴”)
  .Rows(Rows.Count).Delete '最終行を削除
  .Rows(3).Insert '3行目に行を挿入
  .Range("B3") = Now
  .Range("C3") = TextBox1
  .Range("D3") = Knskcell.Offset(0, -1)
  .Range("E3") = Knskcell.Offset(0, 1)
  .Range("F3") = Knskcell.Offset(0, 2)
  .Range("G3") = Knskcell.Offset(0, 3)
  .Range("H3") = TextBox3 * 1
  .Range("I3") = “出庫”
End With

 

これで、最終行までいってもエラーが出なくなりました。
ただ、一番古い入出庫履歴データは消えるけどね。

 

まとめ

Rows(挿入する行).Insert
最終行にデータがあると、行を挿入できない
Rows(削除する行).Delete

oRe4連休

次回 ユーザーフォームをオシャンティーにするよ

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

コメント

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