付録
【ご質問】
マクロでの表転記について
A、B、Cの品、それぞれの発注表を更新後、ボタンを押せば
総計表にも自動で追加されるようにしたいと思っていますが上手くいきません。
どのようなコードが良いか、簡単にでもよいので教えていただきたいです。
①(手入力)A,B、Cの品の発注があるたびそれぞれの品目表に入力
(全て表の形は同じ、都度一番下の行に追加)
②(自動)総計表に追加
③(自動)並び替えされ納品時期の昇順になるように(品目はバラバラで可)
ボタンを押すたび追加した行が総計表に増えていくのが可能でなければ
ボタンを押すたび総計表が一度削除され、すべてのデータを
読み込み直す方法でも構いません。
コードをお見せして添削して頂きたかったのですが
あまりにも拙かったので一旦無しで質問を投げさせていただきます。
品目表と総計表のイメージ画像のみ一枚の画像として添付させていただきます。
【回答】
今回プログラムを組む目的は、発注表より総計表に転記を行なう場合に納品日の順番に並べて転記を行なうこと。
その為の前提は次の通りとする。
1.発注表の記載事項は、B列からQ列までの16項目とする。
2.納期日が記入されている列はE列
3.データ入力は5行目から開始を行なう。
4.「発注表」と「総計表」の様式は同じとする。
5.発注表に記入されたデータ数は10,000行まで対応可能とする。
プログラムを作成する手順
1.シート名の設定:
1)発注表のシートを「発注表」とする。
2)総計表のシート名を「総計表」とする。
但し、総計表のシート名はプログラムに影響しない。
下図参照下さい。
①「総計表」シートに発注表のシート名を書き込む欄を作成する。
発注表のシート名を変更する場合には、このシートの発注書シート名の「発注書」を書き換える。
②総計表シートに読込用の「フォームコントロール」の「ボタン」をタブの「開発」の「挿入」から貼付ける。
シートの様式は次の通り
3.貼付けたボタンの「Click」のプロシージャに以下のプログラム書き込む、またはコピーして貼付けた後、ボタンをクリックすると上記の発注表のデータが、総計表のシートに納入時期の日付順に並べられて転記されます。
作成されたファイルのリンク:Sample15.xlsm
Sub ボタン1_Click()
'総計表への転記ボタン
Application.ScreenUpdating = False
With Worksheets(Cells(1, 3).Value)
For n0 = 5 To 10000
If .Cells(n0, 2).Value = "" Then
Exit For
Else
If .Cells(n0, 19).Value = "" Then
For n1 = 5 To 10000
If Cells(n1, 2).Value = "" Then
If n1 = 5 Then
For x = 2 To 16
Cells(n1, x).Value = .Cells(n0, x).Value
Next
.Cells(n0, 19).Value = "転記済み"
Exit For
ElseIf n1 = 6 Then
If .Cells(n0, 5).Value >= Cells(n1 - 1, 5).Value Then
For x = 2 To 16
Cells(n1, x).Value = .Cells(n0, x).Value
Next
.Cells(n0, 19).Value = "転記済み"
Exit For
ElseIf .Cells(n0, 5).Value < Cells(n1 - 1, 5).Value Then
Range(Cells(n1 - 1, 2), Cells(n1 - 1, 17)).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
For x = 2 To 16
Cells(n1 - 1, x).Value = .Cells(n0, x).Value
Next
.Cells(n0, 19).Value = "転記済み"
Exit For
End If
Else
If .Cells(n0, 5).Value >= Cells(n1 - 1, 5).Value Then
For x = 2 To 16
Cells(n1, x).Value = .Cells(n0, x).Value
Next
.Cells(n0, 19).Value = "転記済み"
Exit For
Else
For n2 = 1 To n1 - 5
If .Cells(n0, 5).Value < Cells(n1 - n2, 5).Value _
And .Cells(n0, 5).Value >= Cells(n1 - n2 - 1, 5).Value Then
Range(Cells(n1 - n2, 2), Cells(n1 - n2, 17)).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
For x = 2 To 16
Cells(n1 - n2, x).Value = .Cells(n0, x).Value
Next
.Cells(n0, 19).Value = "転記済み"
Exit For
ElseIf n1 - n2 = 5 Then
If .Cells(n0, 5).Value < Cells(n1 - n2 - 1, 5).Value Then
Range(Cells(n1 - n2, 2), Cells(n1 - n2, 17)).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
For x = 2 To 16
Cells(n1 - n2, x).Value = .Cells(n0, x).Value
Next
.Cells(n0, 19).Value = "転記済み"
Exit For
End If
End If
Next
End If
End If
Exit For
End If
Next
End If
End If
Next
End With
End Sub
4.ボタンをクリックして「発注書」より「総計表」に転記された行のS列に「転記済み」が表示されます。
この「転記済み」の表記がある行は、次にボタンをクリックした時には検索対象外となり重複して計上されません。
以上