今日も、生徒さんからの質問にお応えしましょう。
「先生、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行は、必ず、サブルーチンよりも上に書いてください。
参考までに画像も載せておきます。
メインの処理は、Ucase関数を使って、大文字に置き換える1行です。
その割には、まわりくどいコードのように見えますね。
実は、大文字に変換した途端、このイベントプロシージャが再度実行されてしまうのです。
繰り返し実行される回数をカウントしたら、227回でした。
明らかに無駄な処理なので、この無駄を回避するために、コードが長くなりました。
それでは、Excelに切り替えてください。
プログラムを確認してみましょう。
なお、今回は、マクロを実行する必要はありません。
B列に入力すると、自動的にプログラムが実行されます。
これを、イベントプロシージャといいます。
例えば、B4に、a002 と入力して、Enterキーを押すと・・・
自動的に、A001 と、大文字に変換されます。
「なるほど、こんなこともできるんですね。なんだか楽しいなあ」
「何よりです。」
「先生もエクセルを見習って、しっかり働いてくださいよ。」
「な、何てことを!・・・」
だい
「先生、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 と、大文字に変換されます。
「なるほど、こんなこともできるんですね。なんだか楽しいなあ」
「何よりです。」
「先生もエクセルを見習って、しっかり働いてくださいよ。」
「な、何てことを!・・・」
だい
※コメント投稿者のブログIDはブログ作成者のみに通知されます