パソコンカレッジ スタッフのひとりごと

パソコンスクールのスタッフが、
初心者から上級者まで役立つ情報をお伝えします。

半角英数自動大文字変換システム(Excel2002以降)

2010-01-22 09:00:24 | ExcelVBA
今日も、生徒さんからの質問にお応えしましょう。

「先生、B列に商品コードを入力するときに、自動的に日本語入力システムをOFFにできたら、楽なんですけど。」

「ほう、なるほど、注文書を作っているんだね。そんなときは、こうしましょう。」




B4:B8を選択して、「データ」メニューの「入力規則」をクリック。




「データの入力規則」ダイアログボックスの「日本語入力」タブをクリック。
一覧から、「オフ(英語モード)」を選択して、「OK」をクリック。
これで、B4:B8のセルを選択すると、自動的に、日本語入力システムをOFFになります。



「本当だ。これなら入力時に、いちいち言語バーを気にする必要がなくて楽ですね。」

「そうですね。よかったですね。」

「でも先生、商品コードは、英語の大文字と数字の組み合わせなんですよ。自動的に大文字入力に切り替えられると
うれしいなあ。」

「残念ながら、そんな機能はないですね。でも、VBAを使えば、何とかなりますよ。」



そんな訳で、さっそくコードを書いてみましょう。


ALT + F11 で、VisualBasicEditorを起動します。

左にある、プロジェクトエクスプローラの中の、Sheet1をダブルクリックします。
(今回の表がSheet1にあるという前提です)
すると、コードウィンドウが表示されます。
その上にある、左右二つのリストから、左側Worksheet 右側Changeを選択してください。

すると、
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
というコードが自動的に記述されますので、以下を参考に、コードを入力してください。

なお、左側Worksheet 右側SelectionChangeを選択するともう一つのサブルーチン(イベントプロシージャ)が
自動的に記述されます。

なお、以下のコードの最初の2行は、必ず、サブルーチンよりも上に書いてください。



Option Explicit
Private i As Integer

Private Sub Worksheet_Change(ByVal Target As Range)
    Const STD As Integer = 2
    
    With Target
        If .Column = STD Then
            On Error GoTo eh
            If i > 0 Then Exit Sub
            i = i + 1
            .Value = UCase(.Value)
'            Debug.Print .Value
        End If
    End With
    Exit Sub
eh:
    
End Sub


Private Sub Worksheet_SelectionChange( _
                        ByVal Target As Range)
    i = 0
End Sub




参考までに画像も載せておきます。





メインの処理は、Ucase関数を使って、大文字に置き換える1行です。
その割には、まわりくどいコードのように見えますね。

実は、大文字に変換した途端、このイベントプロシージャが再度実行されてしまうのです。
繰り返し実行される回数をカウントしたら、227回でした。
明らかに無駄な処理なので、この無駄を回避するために、コードが長くなりました。

それでは、Excelに切り替えてください。
プログラムを確認してみましょう。


なお、今回は、マクロを実行する必要はありません。
B列に入力すると、自動的にプログラムが実行されます。
これを、イベントプロシージャといいます。

例えば、B4に、a002 と入力して、Enterキーを押すと・・・




自動的に、A001 と、大文字に変換されます。





「なるほど、こんなこともできるんですね。なんだか楽しいなあ」

「何よりです。」

「先生もエクセルを見習って、しっかり働いてくださいよ。」

「な、何てことを!・・・」



だい
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

【おすすめ】

パソコン買ったらまず入れる10のアプリ