掲載ファイルは、プログラムでEドライブから開きますから
どのファイルも、Eドライブに左側の名前で保存してください。
プログラムを変更すれば、他のドライブに保存可能です。
掲載参考 EXCEL ファイルダウンロード
1. 製作指示書作成.xlsm
2. 印刷4.xlsm   
3. 得意先リスト.xls
4. 得意先リスト変換4.xlsm
5. 仕入先データベース.xlsm
6. 加工部品注文データベース.xlsm
Psu=パスワード解除
Psr=シートパスワード保護
交互保護と解除の考え方は、押すたびに、保護と解除が切り替わるもので、これに必要な
事は、今で知らになっているのかが分かる事である。そのために、Z80に 1 と 0 を入れる
事にした。

strSname=ActiveSheet.Name         ' 今選択されているシート名を知る。
If Sheets(strSname).Range("Z80")=1 Then   ' どのシートでも使用できる。
[Ps]ボタンマクロ
[赤GO]ボタンマクロ
[青GO]ボタンマクロ
[印刷4.xlsm]から各担当に配布する帳票が印刷される。
Windows("印刷4.xlsm").Activate
Sheets("A印刷").Select
Range("D2:AM67").Select
ActiveSheet.PageSetup.PrintArea="$D$2:$AM$67"
ActiveWindow.SelectedSheets.PrintOut Copies:=1,Collate:=True

Range("D69:AM120").Select
ActiveSheet.PageSetup.PrintArea="$D$69:$AM$120"
ActiveWindow.SelectedSheets.PrintOut Copies:=1,Collate:=True

Range("D124:AM177").Select
ActiveSheet.PageSetup.PrintArea="$D$124:$AM$177"
ActiveWindow.SelectedSheets.PrintOut Copies:=1,Collate:=True

Range("D180:AM229").Select
ActiveSheet.PageSetup.PrintArea="$D$180:$AM$229"
ActiveWindow.SelectedSheets.PrintOut Copies:=1,Collate:=True

Sheets("A出荷指示書").Select
Range("B4:S53").Select
ActiveSheet.PageSetup.PrintArea="$B$4:$S$53"
ActiveWindow.SelectedSheets.PrintOut Copies:=1,Collate:=True

=IF(Y17="","",IF(LEFT(Y17,1)="A","100"&MID(Y17,3,6)IF(LEFT(Y17,1)= _
"B","200"&MID(Y17,3,6),IF(LEFT(Y17,1)="C","300"&MID(Y17,3,6),IF(LEFT(Y17,1)= _
"D","400"&MID(Y17,3,6),IF(LEFT(Y17,1)="E","500"&MID(Y17,3,6)))))))
受注番号は、機種分類のA,B,C,D,Eと機番の数値を基に決定していて、

=IF(Y17="","",IF(LEFT(Y17,1)="A","100"&MID(Y17,3,6)
Y17の左1文字目がAなら、100とY17の3文字目から6文字目までを合体して 1003556 と表示。
違ったら、
IF(LEFT(Y17,1)="E","500"&MID(Y17,3,6)))))))
Y17の左1文字目がEなら、500とY17の3文字目から6文字目までが合体して 5003556 と表示される。
機番はY17である。
strRe=Sheets("A入力").Range("AW44")
AW44には、=AQ4 & AS4 の関数が書かれていて、AQ4 の A− と 3556 を結合している。
これは、前回の機番に1を加算して、今回の機番としているので、数値でなくてはならないので、
A1−と3556を分割して表示させ、再度AW44で結合して、Y17に記入している。
ボタンを押すと、[A機番転記]マクロが実行される。
[A入力]シートに戻ると
入力されている。
[コード選択]シートで入力
した内容
[Aへ]を実行してA入力シートに移動する。
[[契約先名]内関数   ' =IF(C5=0,IF(B5=1,登録申請!D5,""),VLOOKUP(C5,確認,5))
           ' C5が0で、B5が1なら、登録申請シートのD5を表示する。
           ' C5が0でなかったら、[確認]範囲からC5の内容で探して5列目の客先名を表示する。
[契約先コード]内関数 ' =IF(C5=0,"",VLOOKUP(C5,確認,3))
           ' C5が0なら空白、0でなかったら[確認]範囲から、C5=5だから
           ' 5を探して、あれば3列目のデータを表示する。
[得意先リスト]を手動更新する場合のボタン

ActiveSheet. Unprotect Password=3210      ' パスワード解除
ActiveSheet. Protect Password=3210,DrawingObjects:=True, Contenta:=True, Scennarios:=True
                          ' パスワード保護
ActiveSheet. EnableSelection=xlUnlockedCells
C11からO26までが[確認]と言う範囲名である。
登録申請シートのD5にデータが書き込まれていたら、登録申請シートのW60に1が入る。
B5はその値を見ている。
=IF(AND(C5=0,B5=1),"入力No未入力なので 登録申請のデータを表示中","")
G3に「入力No未入力なので 登録申請のデータを表示中」と表示させる理由は、新規客先からの受注で、
データが登録されていない場合、新規登録シートに記入する必要がある。
新規の場合は、入力Noが無いので、新規登録で入力したデータをここで表示させるために、C5が空白の
場合で、B5が1なら登録申請データを表示させ、B5が0なら空白にしている。
G5には、 =IF(C5=0,IF(B5=1,登録申請!D5,"")VLOOKUP(C5,確認,5)) と書かれていて、
C5が未入力で、B5が1なら、登録申請シートのD5の内容を。C5に入力されていたら、[確認]と言う
範囲でC5を基に抽出して、5列目の内容を表示する。
新規登録シートに移動する。
ボタンを押すと、新規登録マクロを実行する。
Sub コード番号検索( )
  ' コード番号がある行を選択する。
  Dim strKy As String      ' コード番号と言う文字列なので、Stringである。
  Dim strKy2 As String
  Dim myRange As Range    ' 検索されたセルが入るので、Rangeになる。

  strKy=Range("E2")
  Set myRange=Worksheets("コード選択").Range("E13:E250").Find(strKy)
                  ' Find検索して strKy のあるセルが myRange に代入される。
  myRange.Select        ' myRangeのセルを選択する。
  SR=myRange.Row       ' 検索した行番号がSRに記録される。
  Set myRange=Nothing     ' myRange変数を開放する。
  ActiveSheet.Shapes("実行ボタン").Visible=False  ' 実行ボタンを非表示にする。
                           ' ボタンは無くなった分けではない。
  Call ダブルクリック取り消し            ' ダブルクリックの使用を不可にした。
End Sub
  
Sub ボタンにマクロ登録( )
  ActiveSheet.Shapes("実行ボタン").Select
  Selection.OnAction="コード番号検索"     ' [実行ボタン]に "コード番号検索"
                         ' マクロを登録する。
  Range("A1").Select             
End Sub
Cボタンは検索と言う名前である。
ダブルクリックの使用を取り消している。
黄色セルを白色に戻す。

Call ダブルクリック取り消し
ActiveSheet.Shapes("検索").Select   ' Cボタンは検索と言う名前である。
Selection.OnAction="セル黄色"     ' そのボタンに、[セル黄色]マクロを登録する。
Range("A1").Select
ActiveSheet.Shapes("実行ボタン").Visible=True   ' 実行ボタンが表示される。

ActiveSheet.Shapes("検索").Select
Selection.OnAction="セル色戻す"
Range("A1").Select
[C]ボタンを押すとこのプログラムを実行して、E2セルが黄色になり、メッセージが表示される。
[OK]ボタンを押すと、メッセージが消えて入力待ちになる。
E2セルにコード番号を入力して、黄色セルをダブルクリックすると、[特定セルをダブルクリック]を
実行する。
このボタンで先頭へ戻り[入力No]セルに番号を入力する。

又、[コード]が分かっている場合で[入力No]が分からない場合は、
このボタンを押すとダイレクトで、その行にカーソルが移動する。
客先名の1文字目のボタンを押すと、そのグループに移動する。そこから[入力No]を見つける。
[A入力]や[F入力]シートの[入力]ボタンを押すとこのシートに移動する。客先情報を入力する
シートで、受注した客先名を基に、この表から検索して客先の[入力No]を入力する。
 機番台帳のB4から下へ、データのある最下行+1を選択する。
 値だけ貼り付ける。

●[コード選択]シートの詳細
 BD44がA ならBD44からBJ44までをコピーする。

 SHeets("機番台帳").Select
 Range("B4").Select
 Selection.End(xlDown).Select   ' B4から下にデータの最下行を選択する。
 ActiveCell.Offset(1,0).Select     ' そのセルの一つ下を選択する。
 Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                   ' 値だけの貼り付けをする。
End If
If Range("BD44")="A" Then
 Range("BD44:BJ44").Select
 Selection.Copy
タイトル="これは「指定色確認」のためのメッセージです。"
スタイル=vbInformation
メッセージ="指定色がありで、色番号が入力されていません、" & vbCr & vbCr & _
      "色番号を入力しないと次に進みません。"
MsgBox メッセージ,スタール,タイトル

図のように vbInformation 形式の MsgBox にタイトルとメッセージが表示されて、[OK] ボタンが
装備される。尚、文章の改行は & vbCr & と書く。空白行の挿入は & vbCr & vbCr & と2回続けて書く。

Application ScreenUpdating=False
Workbooks.Open Filename:="E:\印刷4.xlsm"
Windows("製作指示書作成.xlsm").Activate
Sheets("A入力").Select
Range("A1").Select
   ' Application ScreenUpdating=False は印刷4.xlsmを開いても画面を[A入力]シートから
   ' 動かさないで印刷する。プログラムはファイル間を移動しないと、印刷4の関数が最新に
   ' データを更新しないから移動している。

Windows("印刷4.xlsm").Activate
Sheets("A印刷").Select
Range("D2:AM67").Select
ActiveSheet.PareSetup.PrintArea="$D$2:$AM$67"
ActiveWidow.SelectedSheets.PrintOut Copies:=1,Collate:=True
   ' 印刷プログラムである。
=If(AW52=AW44,1,If(AW52=AW45,1,If(AW52=AW46,1,If(AW52=AW47,1,If(AW52=AW48,1, _  If(AW52=AW49,1,If(AW52=AW50,1,0)))))))

これは、AW42に書いてある関数である。AW52とAW44が同じなら1が入る。違うなら、AW52とAW45が
同じなら1が入る。と言うように違うなら順に右に調べて、AW52とAW50が同じなら1が入り、違うなら0が
入る。0ならMsgBoxで入力間違いを表示して停止する。このエラーメッセージによって、機番台帳に不具合が
発生したのか、この入力画面で不具合が発生したのかを調べるきっかけになる。先に進まないのだから。

尚、AW45に書いてある関数の =AQ6 & TEXT(AS6,"0###") は数値の 0656 の前の 0 を書くためのもので
ある。セルの値をテキストに変換する時に、前に0を付けると言う定義で、 "0###" の 0 を省くと656 と書か
れるのが分かる。
非該当証明に、要と不要の両方が入っていたら、見ていないのでMsgBoxで入力を促すメッセージが
表示されて、Exit Subで終了する。

機番入力確認は、確実に機番台帳に保存されている機番の、次の番号が入る必要があり、
重複することは許されないので厳重に確認している。
 
このボタンを押すと、[A印刷]マクロが実行される。
このボタンを押すと、[手動A消去]マクロが実行される。
Call A平積
サブプログラムを実行し、荷姿[平積]を記入している。担当者が選択を忘れないように、
空白にならないようにしている。(尚、平積とは、箱に入れないでトラックに積むことである。)
Sheets("A入力").Range("AI29").Value="要"
Sheets("A入力").Range("AK29").Value="不要"
非該当証明の要、不要は、どちらかが消されているので、ここで両方に記載している。
(尚、非該当証明とは、商品にインバーターやシーケンサーが使用されていると、その商品を
外国に輸出する場合には、戦略物資に使用されない旨の証明書が必要になる。)

Call A指定色なし
サブプログラムを実行し、指定色[なし]を記入している。担当者が選択を忘れないように、
空白にならないようにしている。
シートの保護をパスワードで解除している。
C5とC7はナンバーの手動入力セルなので、既に入力されている数値を消去している。
その後、シートの自動入力部をパスワードで保護している。
[入力]ボタンを押すと、[コード選択へ]マクロが実行される。
[A]ボタンを押すと、機番が機番セルに記入される。
A,B,C,D,Eは機種の機番を入力するボタンで、受注した商品の機種によってボタンが違う。
それぞれ自動で機番セルに、現在の機番が記入される。
[A−]部は機番台帳の機種部を示し、[3556]部は機番台帳で使用した機番の、次の機番が
入っている。それが機番セルに記入される。
 これは、[加工部品注文データベース.xlsm]の製作指示書作成から注文した、注文内容が
 保存されたシートである。

●[A入力]シートの詳細
これは、[製作指示書作成.xlsm]の[コード]シートである。
仕入商品を受注して、このファイルから発注するときに必要な、注文先の名前とコードが
記載されている。このリストも[製作指示書作成.xlsm]を開いたときに、最新のデータを
自動で取得して、このシートに転記している。
これは、Eドライブに存在する[得意先リスト変換4.xlsm]である。

営業の契約、売上、納期、納品などの管理は、[弥生販売]が行っている。
新規の客先から受注すると、新規契約先登録と納入先登録が[弥生販売]に対して行われる。
[弥生販売]に入力されたら、[得意先リスト]が出力される。
普通は、社内ネットワークのデータサーバーなどに出力される。それがドライブ名になる。
ここでは、ネットワークではなく自分のPCの[Eドライブ]としている。

[製作指示書作成.xlsm]から[得意先リスト変換4.xksm]を開くと、[得意先リスト.xls]から
データを取得して、データの並び替えと番号付けをして、[製作指示書作成.xlsm]にデータを
転記する。
これは、Eドライブに存在する[弥生販売]から出力された、[得意先リスト.xls]である。
印刷される帳票は、営業控、設計、電気設計、部品調達、組立、出張作業指示書、出荷指示書等が
機番ごとに出力される。
入力画面の[印刷]ボタンを押すと、印刷用のファイルが開き、そこから印刷される。
入力画面の[入力]ボタンを押すとこの画面に移動して、契約先と納入先のデータを取得し
入力画面に戻ると、自動入力されている。
A装置の[GO]ボタンを押した、入力画面
●このシステムは、受注したときに営業担当が「製作指示書作成」ファイルに受注内容を入力することによって、
 営業業務が「弥生販売」等に受注登録する帳票と、各工程担当者に製作指示書によって作業指示をすることがで
 きる。又、製作指示書には工数集計できる部分を記載し、別のシステムで製番ごとの工数を集計把握することも
 できる。又、ファイルを開いたときに、最新の「弥生販売」で作成された、得意先リストのデータを取得して、
 受注実績のある契約先や、納入先のデータは自動で入力される。尚、仕入商品の発注は、このファイルからでき、
 注文書の作成と注文データベースへの保存もされる。仕入先データベースともリンクされて、最新のデータを取得
 している。
●システムの概略

 メニュー画面



 
実践コース
製作指示書作成システムからプログラムテクニックを学ぶ


実際に使っているシステムの内容で解説
  EXCEL VBA 講座