私は4連休ですよ(嬉)、どうもoReです。
前回は、増えていく入出庫履歴に対応させました。
今回は、上から古い順に並んでいる入出庫履歴を
新しい順にしていきます。
Insert 行の挿入
・Insert インサァートゥ
Insertは、『入れる』という意味みたいです。
Insertを使用すれば、行や列等を挿入できます。
そもそも入出庫履歴シートに出力する際、
最終セルの1つ下に入出庫データを出力させてるため、
入出庫履歴シートは、上から古い順になっています。
なので、入出庫履歴シートを上から新しい順にしてあげればいいわけです。
【VBA在庫管理#06】でこのように書きました。
Range(“B3”) = 日時Range(“C3”) = 入出庫者このように書きますか?はい! これではだめですよね。1回目の入出庫はうまくいきますが、2回目の入出庫の時
また同じ3行目に入出庫データが出力されてしまいます。これは入出庫履歴ではなくて、最後に入出庫した部品データです。
3行目に上書きされてしまうのでダメでしたが、
Insertを使用して3行目に行を挿入してやれば可能となります。
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行目に出力していますか?
リストボックスにも反映してますか?
Delete 行の削除
・Delete ディィリィートゥ
Deleteは、『削除』という意味みたいです。
Deleteを使用すれば、行や列等を削除できます。
【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
これで、最終行までいってもエラーが出なくなりました。
ただ、一番古い入出庫履歴データは消えるけどね。
まとめ
次回 ユーザーフォームをオシャンティーにするよ
コメント