m-eye blog

ノンプログラマによるVBAとPythonの学習記録

セルの入力規則をVBAで設定する - 不渡届その3

f:id:m-eye:20181019094618p:plain

 

はじめに

  • ファイルはYahoo! ボックスに公開しているので、ここからダウンロードして自由につかってください。
  • このファイルには「不渡届その1・その2」で作成したマクロを含みます。
  • 動作確認は、Offie 365 Solo + Windows 10でおこなっています。
  • 動作は無保証です。

 

セルの入力規則をVBAで設定したい

セルの入力規則はいちど設定すると変更することはあまりないと思いますが、うっかり設定を変更してしまうこともあるとおもいます。

そういうときに困るのはユーザなので、そういうことがないようにVBAでファイルの起動時に毎回入力規則を設定するのがいいでしょう。

 

設定するには

  • 標準モジュールに入力規則を設定するマクロを書きます。
  • ThisWorkbookモジュールにそのマクロを起動する命令文を追加します。

 

セルの入力規則を設定するマクロ

 

ソースコード

Sub S_SetIMEMode()
    Application.ScreenUpdating = False
    
    Worksheets("NoticeOfDishonor").Unprotect
    
    Range("J8, B8, D19, O19, N10, O12, D16").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly
        .IMEMode = xlIMEModeHiragana
    End With
    
    Range("J7, P11").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly
        .IMEMode = xlIMEModeKatakana
    End With
    
    Range("G7, AD10, I13, S16, W16").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly
        .IMEMode = xlIMEModeAlpha
    End With
    
    Range("G8, Y8").Select
    With Selection.Validation
        .Add Type:=xlValidateList, Formula1:="=$B$30:$B$33"
        .IMEMode = xlIMEModeHiragana
    End With
    
    Range("AD9").Select
    With Selection.Validation
        .Add Type:=xlValidateList, Formula1:="=$B$42:$B$46"
        .IMEMode = xlIMEModeHiragana
    End With
    
    Range("AE15").Select
    With Selection.Validation
        .Add Type:=xlValidateList, Formula1:="=$B$56:$B$58"
        .IMEMode = xlIMEModeHiragana
    End With
    
    Range("G10").Select
    With Selection.Validation
        .Add Type:=xlValidateList, Formula1:="=$B$36:$B$39"
        .IMEMode = xlIMEModeHiragana
    End With
    
    Range("AG3").Select
    
    Worksheets("NoticeOfDishonor").Protect _
        AllowFormattingCells:=True
    
    Application.ScreenUpdating = True
End Sub

 

解説

 

画面のちらつきを抑えたい

Application.ScreenUpdating = False

'セルに入力規則を設定する処理

Application.ScreenUpdating = True

いくつものセルを選択するので、画面がちらつきます。

それを抑えるために、Application.ScreenUpdatingプロパティにFalseを設定して、画面の再描画を停止して、ちらつきを抑えます。

入力規則を設定しおえたら、Application.ScreenUpdatingプロパティにTrueを設定して、画面の再描画を再開します。

 

シートの保護

ふだんはシートを保護していますが、セルの入力規則を設定するときだけ、シートの保護を解除します。

Worksheets("NoticeOfDishonor").Unprotect

'セルに入力規則を設定する処理

Worksheets("NoticeOfDishonor").Protect _
    AllowFormattingCells:=True

シートの保護をするときには、ロックしているセルの選択をできないようにして、ロックのかかっていない、これから値を入力したり、変更したりするセルだけを選択できるようにします。

また、文字の大きさを変更できるように、AllowFormattingCells:=Trueでセルの書式設定をできるようにしておきます。

 

セルの入力規則

Excelの標準機能で設定している入力規則をVBAで設定します。

 

入力規則の設定方法

    Range("入力規則を設定するセル").Select
    With Selection.Validation
        .Delete
        .Add Type:="入力規則の種類"
        .IMEMode = "日本語の入力規則の内容"
    End With

マクロの自動記録をとると、いったん入力規則をDeleteしてから、再度設定していますので、このとおりやりましょう。

また、いったんセルを選択しないとうまくいかないようです。

 

よくつかう入力規則の種類
入力規則の種類 引数
xlInputOnly 引数はとくに不要。自由に入力できます
xlValidateList 引数 Formula1 を必ず指定します。引数 Formula1 には、コンマで区切った値の一覧またはこの一覧へのシート参照を指定する必要があります

 

よくつかう日本語の入力規則の内容
定数 内容
xlIMEModeAlpha 半角英数字
xlIMEModeHiragana ひらがな
xlIMEModeKatakana カタカナ

 

入力規則の種類と日本語の入力規則の内容をくみあわせる

どんな文字でも入力してもいいかどうか、リストから選択するか。

半角英数字を入力するのか、ひらがなからかな漢字変換をつかうのか、カタカナを入力するのか。

それぞれのセルによって、設定はちがうので、まずセルを選択して、そのセルにあう内容を設定します。

 

おわりに

ノンプログラマにとっては、入力規則やシート保護、書式設定などもVBAとおなじか、それ以上に重要です。

VBAをつかって特殊なことを実現することよりも、標準の機能を便利につかえるようにするためにVBAを利用することのほうが優先順位がたかいことはよくあります。

ブックやシートやセルに関する設定を操作することは、VBAの独壇場です。

ほかの言語でもできることをムリにVBAですることよりも、VBAにしかできない、ブックやシートやセルといったExcel固有のオブジェクトを自由に操作できるようにすることが重要だと思います。

 

Copyright 2018 m-eye blog All Rights Reserved.