商品の販売をPC管理しています。手順としては、
①PCの台帳シートにお客ごとに黄色セルの一連番号(D2セル)と店コード(E2セル)を入力し、G2で表示される店舗確認後に、入力シートに移動し、黄色のセルのB16に商品コード(101)、数量(1)を入力します。品名・数量を確認し、転記印刷ボタンをクリックし、台帳に転記と同時に別シートの納品書を印刷します。次に、
②次の来客のため、台帳シートに戻します。台帳の記録行は転記されているが、黄色セルの入力欄はそのままです。
③来客がある場合は、一連番号、店コードを次の番号に上書きして処理しています。
以上の処理を行っていますが、一連番号を変えることに気づかず、店コードのみ変えて入力シートに移動し、転記印刷してしまい、伝票番号(一連番号)の重複発行及び転記行欄が上書きされ、前のデータが記録されないミスが多々出て、伝票をみながら訂正入力しています。毎日の確認作業がロスになっています。
このミスを防止するには、入力シートで転記印刷ボタンをクリックした時に、台帳シートの黄色セル内の一連番号が「次の番号」に変わっていて、同時に、店コードが「空欄」になっていればと思っています。なお、重複なら「メッセージ」も表示したい。
添付画像は、例ですが、実際は4月から現在も実用しています。なお、添付の「転記のコード」に書き込みたいのですが、このコードにどんなコードを入れたら良いの解りません。
教えて頂けたら大変助かります。
No.2
- 回答日時:
<<<このミスを防止するには、入力シートで転記印刷ボタンをクリックした時に、台帳シートの黄色セル内の一連番号が「次の番号」に変わっていて、同時に、店コードが「空欄」になっていればと思っています。
なお、重複なら「メッセージ」も表示したい。>>>上記がなさりたいことかと思いますが、
不明点1
上記のコードを埋め込むのは、
Call 印刷 'Sub印刷()を呼び出す。
の次の行でよいのですか?
つまり
Call 印刷 'Sub印刷()を呼び出す。
sh1.Cells(2, "D").Value =「次の番号」
sh1.Cells(2, "E").Value = ""
のようになれば良いのでしょうか?
不明点2
「なお、重複なら「メッセージ」も表示したい」
ということですが、何と何が重複した場合のことでしょうか。
もし、D2の一連番号が、D7列以降の一連番号と重複している場合という意味なら、今後は不明点1の個所で、かならず次の番号をセットするようになるので、重複は発生しないようになるはずですが。
遅くなりました。有難うございます。
>不明点1
上記のコードを埋め込むのは、Call 印刷 'Sub印刷()を呼び出す。
の次の行でよいのですか?
→良いです。おっしゃる通りです。考えてみれば、「転記印刷」ボタンで同時に進行した後のことなので、納得いたしました。
>不明点2
→おっしゃる通りです。考えが及びませんでした。
コードを試行してみます。有難うございました。
No.1
- 回答日時:
こんばんは
ほとんど理解できていませんが・・・
・「台帳シートを上書き使用」って、それって本当に台帳シートなのでしょうか?
・「台帳シート→入力シートに移動して入力」 入力シートだけで済ませないのでしょうか?
・「一連番号を書き直す」一連番号なら、記入などさせる必要などないのでは?
なんだか、複雑にして、返って使いにくくしているように感じられます。
全体をもう少し見直してみてはいかがでしょうか?
※ コードを載せるのなら、コピペで書かれた方が回答が付きやすいと思いますよ。
(図だと読みにくい上に、回答者がいちいち手入力で入れなくてはならない)
有難うございます。セキュリティがかかって、添付画面が全て添付できませんでした。解りにくくてすみませんでした。
・「台帳シートを上書き使用」って、それって本当に台帳シートなのでしょうか?
→台帳シートには、入力シートの内容を転記すると、台帳に一連番号ごとに記録されます。一連番号は台帳のD列にすでに入れてます。来客の受付時に台帳の空欄行のD列の空欄行から、受付の一連番号を、台帳の別枠の黄色Dセルに入力しています。
・「台帳シート→入力シートに移動して入力」 入力シートだけで済ませないのでしょうか?
→入力シートの様式は、納品書・請求書・領収書に内容を作成するため、自動転記(コピー)し、印刷するためのシートになります。また、入力シートで台帳転記処理をして、台帳に記録しています。
・「一連番号を書き直す」一連番号なら、記入などさせる必要などないのでは?
→前述の納品書等を作成するため、どうしても、台帳の別枠で一連番号と店コードを付与した後に、入力シートに移動する必要があります。
コードは補足コメントに添付します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- 会計ソフト・業務用ソフト VBA 記録簿の行間を空けないコードを教えて欲しい。 5 2023/07/10 19:29
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) エクセルのVBAで上の表の最下行を求める 4 2022/09/14 15:22
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
Excel 特定のシートを印刷不可...
-
エクセルでのヘッダーをページ...
-
エクセルの一部のセルの背景色...
-
エクセル印刷時 一枚の書類に...
-
マクロで印刷→セルの値から部数...
-
エクセルの行タイトルを特定の...
-
条件によって印刷するシートを...
-
エクセルで行番号、列アルファ...
-
Excelであるシートだけ印刷でき...
-
EXCELで宛名だけ連続変更...
-
エクセルで複数のシートを同じ...
-
Excel 2シートを1枚に印刷した...
-
エクセルのシート名を印刷した...
-
特定のセルに数値が入っている...
-
EXCELで複数のシートを同時に印...
-
1ヶ月分の日付を一度に出す方法...
-
カラーで一括印刷したいです
-
エクセルのページ設定を他のペ...
-
エクセルで複数のシートの1枚目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
エクセルの一部のセルの背景色...
-
エクセル印刷時 一枚の書類に...
-
マクロで印刷→セルの値から部数...
-
エクセルで複数のシートの1枚目...
-
Excel 特定のシートを印刷不可...
-
1ヶ月分の日付を一度に出す方法...
-
エクセルの行タイトルを特定の...
-
エクセルで行番号、列アルファ...
-
エクセルでのヘッダーをページ...
-
エクセルのマクロで複数シート...
-
エクセルでシートの色がグレー...
-
エクセルで複数のシートを同じ...
-
【Excel】複数シートがあるエク...
-
エクセルのシート名を印刷した...
-
条件によって印刷するシートを...
-
エクセルのページ設定を他のペ...
-
Excel 2シートを1枚に印刷した...
-
エクセルで、ヘッダーに他のシ...
-
特定のシートのみ印刷できない...
おすすめ情報
コードを2回に分けました。(文字オーバーのため)
Public Sub 転記()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow As Long
Dim row As Long
Dim dicT As Object
Dim key As Variant
Set sh1 = Worksheets("納品書台帳")
Set sh2 = Worksheets("入力シート")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = sh1.Cells(Rows.Count, "D").End(xlUp).row
'伝票番号を記憶
For row = 7 To maxrow
key = sh1.Cells(row, "D").Value
dicT(key) = row
Next
コード 続き です。
key = sh2.Cells(8, "R").Value
If dicT.exists(key) = False Then
MsgBox ("伝票番号=" & key & "は納品書台帳にありません")
Exit Sub
End If
If sh2.Cells(12, "E").Value = "" Then
MsgBox ("名前が未入力です")
Exit Sub
End If
If sh2.Cells(24, "S").Value = "" Then
MsgBox ("金額が未入力です")
Exit Sub
End If
row = dicT(key)
sh1.Cells(row, "G").Value = sh2.Cells(12, "E").Value '名前
続きです。(最後)
sh1.Cells(row, "H").Value = sh2.Cells(24, "S").Value '金額
MsgBox ("転記完了印刷します")
Call 印刷 'Sub印刷()を呼び出す。
End Sub
画像の添付にセキュリティがかかって送れませんでしたので、説明させていただきます。
① 台帳の様式は
2行目:B2C2→今日の年月日、D2→一連番号その都度入力)、E2→店コード(その都度入力)
※D2とE2は、来客の都度入力するセルです。
4行目~6行目までは、項目です。
7行目:B7C7→入力時の年月日、D7→一連番号(=伝票番号)、D7→店コード(=店舗ID)、G7→店名、H7→金額8行目以降は、7行目と同じく、月日及び一連番号(=伝票番号)等ごとに、自動転記されます。
従って、2行目の入力以外は入力シートからの転記になります。
② 入力シートの様式
伝票(納品書)様式にして、台帳の一連番号と店コードの入力で、年月日、伝票番号、店名が表示されて、以下の商品コードと数量を入力します。
16行目:B16→商品コードを入力すると、D16→商品名、G16→数量
続きです。
以下、他の商品を追加できるように、23行目まで表示できます。※この入力シートの入力により、納品書・請求書・領収書が別シートに作成されます。
※このシートから、台帳へ転記するとともに、伝票を印刷する。
となります。
ご質問にもありましたが、台帳シートと入力シートの関係は、一連番号と店コードの付与が、はじめに台帳シートでの入力でスタートするので、次の来客時の処理をするためには、台帳シートに戻る必要があります。
この台帳シートに戻った際、2行目のD2(一連番号)とE2(店コード)はそのままとなっています。
従って、台帳シートに戻ったとき、D2の一連番号が次の番号に変わっておれば、番号の重複を防ぐことができます。
早とちりですみません。
sh1.Cells(2, "D").Value =「次の番号」
sh1.Cells(2, "E").Value = ""
を、そのまま入れたら、sh1.Cells(2, "D").Value =「次の番号」が赤くなりました。
ご指示を待てばよかったと後悔しています。