まりふのひと

Excel運行管理の車番の入力規制、コピぺもVBAも出来た

いきさつ

 ある会社で Excelでトラックの運行管理をしている方より「車番を追加したいが方法が解らない...」と Lineが入った。
ん? 以前、車番 0000 を追加したじゃん?‥‥ で、ブログを検索したら

Excel運行実績シートに「車番 0000」を追加する
がヒットした。
内容を一通り読んで、急いでいるであろうから伺った。

車番追加手順

 基本的には前述ブログのとおりであるが、環境が変わっていた。

  1. テンプレート・シート*1 ワークシートを開く
  2. シートの保護を解除する。*2
    • シート見出しを右クリック ⇒ シート保護の解除 をクリックする。
    • 解除しておかないと(1)Excelのコマンドが使えなかったり、(2)セルや行、または列が選択できない場合が発生する。
  3. MMUSタブ/表示設定グループの[全面表示]コマンドを起動する。
  4. 車番の非表示行を表示する。*3
    • 例えば、行 8:16 を選択し右クリック ⇒ 再表示 をクリックする。
  5. 車番を追加する
    • 例えば、セルD9に「00001234」を入力する。*4
    • 必ず追加する。挿入すると入力済み運行データとの整合性が取れなくなる。
  6. 使っていない行を非表示にする。(任意)
    • 例えば、行 10:15 を選択し右クリック→非表示 をクリックする。
  7. 運送トラックNO(D列) の データの入力規制/元の値 を更新する。
    1. MMUSタブ/表示設定グループの[実績入力時]コマンドを起動する。(任意)
    2. セル D21:D200 を選択する。
    3. データ・タブ/データツール・グループの[データの入力規制]コマンドをクリックする。
    4. 例えば、元の値 "=$D$2:$D$8" を "=$D$2:$D$9" に変更し、
      • セルD2:D8 を D2:D9 に変更するもの
    5. [OK]
    6. データの入力規制の確認
      • セルD21 を選択し、Alt+↓
      • 入力した車番が表示されればOK。

帰宅して‥‥

  • 「データの入力規制」は、まず1件(セルD21を)修正し、正しく表示されることを確認
  • その後、以下のセル(セルD22~D200)にコピペするのが正道であろう

から、まず、データの入力規制 がコピペできるか‥‥ から調べた。

データの入力規則のコピーと貼り付け|初心者のためのOffice講座

 上記を参考にやってみた。

  1. セルD21のデータの入力規制を修正する
    1. セルD21を選択する。
      • 試しに[▼]をクリックしても、1234 は表示されない...
    2. データ タブ/データツール グループの[データの入力規制]をクリックする。(Excel2021の場合)
    3. 「元の値」を広げて‥‥ [OK]
    4. セルD21の[▼]をクリックして、1234 が表示されることを確認する。
  2. セルD21の入力規制をセルD22~D200 にコピペする
    1. セルD21を選択し、(選択されているはず...)
    2. Ctrl+C。(右クリック ⇒ コピー)
    3. セルD22~D200 を選択し、
    4. Ctrl+Alt+V。(右クリック ⇒ 形式を選択して貼り付けの[>]をポイント ⇒ 形式を選択して貼り付け をクリック)
    5. ●入力規制 を選択し、
    6. [OK]する。
    7. セルD22の[▼]をクリックし、1234 が表示されるのを確認する。

セルD21の入力規制をセルD22~D200にコピペするVBAコード

 手順は解ったが、先々のためマクロを記録し、修正して出来たコードが下記で、実費的には4行であった。

01.Sub トラックNoの入力規制のコピペ()
02.Dim mbTitle As String
03.Dim lngAns As Long
04. 
05.  mbTitle = "トラックNoの入力規制のコピペ/" & ThisWorkbook.Name
06.  If = MsgBox("セルD21 の入力規制を D22:D200 にコピーします。", _
07.    vbOKCancel + vbInformation, mbTitle) = vbCancel Then Exit Sub
08. 
09.  Range("D21").Select
10.  Selection.Copy
11.  Range("D22:D200").Select
12.  Selection.PasteSpecial Paste:=xlPasteValidation, Operation:=xlNone
13. 
14.  Range("D22").Select
15. 
16.End Sub

*1:テンプレートは使っていなかった。

*2:解除してあった。

*3:表示してあった。

*4:今回、仮に1234を追加したとする。