こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も「時間クリエーター」としてノー残業をめざしますっ!
全10回の連載でエクセルのデータ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。今回はその第3回目です。
前回は「セル内の文字列を操作して全角文字を半角に一括変換する方法」を紹介しました。
今回は「チェックボックスのONOFFでボタン表示を変える」テクニックをご紹介していきます。
目次
なぜチェックボックスを使うのか
なぜチェックボックスを使うのかというと、チェックボックスを使うことで見た目のデザインがすっきりするんですね。
前回「全角文字を半角文字」に変換するボタンを作りましたが、今回は逆に「半角文字を全角文字」に変換する機能を追加します。
そのとき、「半角文字を全角文字」に変換するボタンを新たに付け加えてもよいのですが、ボタンが増えて見栄えが悪いと思いませんか?
この先、さらに機能を追加していくことを考えたら、なおさらボタン数は少ないほうが見やすいと思います。
そこでチェックボックスの登場というわけです。チェックボックスのONOFFで「全角→半角」「全角→半角」を切り替えることができれば見た目がすっきりしますよね。
ユーザーフォームにチェックボックスとラベルを追加する
それではさっそく前回使ったプログラムにチェックボックスを追加していきます。前回作った「一括変換.xls」を開きます。
UserForm1を開いて新たにチェックボックスを追加します。ツールボックスからチェックボックスをクリックした後に、ユーザーフォーム上の置きたい場所までドラッグします。
続いてラベルを作ります。さきほどと同じようにしてツールボックスでラベルをクリックしてからユーザーフォーム上の適当な位置までドラッグします。
ラベルを右クリックしてプロパティを開き、captionを「半角→全角」にします。
ラベルが「半角→全角」になりました。
チェックボックスがONOFFされたときの処理を追加する
チェックボックスをダブルクリックしてVisual Basic Editorを開きます。CheckBox1_Click()プロシージャの下に以下のコードを書きます。
1 2 3 4 5 6 |
'チェックボックスの値でボタンの文字を変える If CheckBox1.Value = True Then CommandButton2.Caption = "半角→全角" Else CommandButton2.Caption = "全角→半角" End If |
CheckBox1.valueでチェックボックスの値を取得します。値がある場合はtrue、ない場合はfalseを返します。つまりチェックがONならtrue、OFFならfalseを返します。
ここではtrueの場合、ボタンの表示を「半角→全角」にし、Falseの場合は、ボタンを「全角→半角」にしています。
前回作った「全角→半角」のソースコードの修正
今度は前回作った「全角→半角」のソースコードの一部を変更します。といっても大幅に変更するわけではありません。始めのほうに数行追加するだけです。
それではCommandButton1_Click()プロシージャに移ります。
変更前
1 2 |
'全角から半角に変換 selConv = vbNarrow |
変更後
1 2 3 4 5 6 7 |
If CheckBox1.Value = True Then '半角から全角に変換 selConv = vbWide Else '全角から半角に変換 selConv = vbNarrow End If |
チェックボックスのチェックがONならselConv変数に「vbWide」、OFFなら「vbNarrow」を入れています。
ここで一度selConv変数に変換の種類を入れていますが、実際に変換するのは下記のコードになります。
1 |
strCelldata = StrConv(strCelldata, selConv) |
変換の種類に先ほどselConv変数に入れた、「vbWide」または「vbNarrow」が入ります。
修正したソースコード
修正したソースコードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
'全角から半角に変換 Private Sub CommandButton2_Click() Dim tmp Dim Col As Long Dim Row_Start As Long Dim Row_End As Long Dim strCelldata As String Dim y As Long Dim selConv As String If CheckBox1.Value = True Then '半角から全角に変換 selConv = vbWide Else '全角から半角に変換 selConv = vbNarrow End If '処理開始行 Row_Start = 2 '最終行を取得 With ActiveSheet.UsedRange Row_End = .Rows(.Rows.Count).Row End With 'キャンセルが押された場合は処理を終了する On Error GoTo myError tmp = Application.InputBox("列を選択して下さい", "列の選択", Type:=8).Address Range(tmp).Select '選択した列番号 Col = Selection.Column For y = Row_Start To Row_End strCelldata = Cells(y, Col).Value '全角から半角に変換する strCelldata = StrConv(strCelldata, selConv) Cells(y, Col).Value = strCelldata Next y myError: End Sub |
アプリケーションの動作確認をする
ワークシート上の起動するボタンをクリックします。チェックボックスをクリックします。
ボタンの表示が「全角→半角」から「半角→全角」に変わりました。半角→全角ボタンをクリックします。
変換対象の列の上部をクリックします。OKボタンをクリックします。
半角文字が全角に変換されました。
もちろんチェックボックスのチェックを外せば、全角から半角の変換ができます。
まとめ
いかがでしたか?今回はチェックボックスのONOFFでボタン表示を変える方法の紹介でした。
今回の内容をまとめます。
- CheckBox1.valueでチェックボックスの値を取得できる
- StrConv関数の引数にvbWideを指定すると半角から全角に文字列を変換できる
時短のおつまみ
今日のおつまみはコレです!
メッセージボックスだけのキャプチャー画像を取るときなんかに便利ですっ。トリミングが必要ないぶん時短になりますねっ。
それではまた~。
[連載記事 全10回] エクセルVBAで文字列変換ツールを作る
全角半角の変換をしたり、空白行や改行を削除したり。データ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。1つの記事で1機能ずつ追加していきますので、少しずつVBAを学びながら進めることができます。
- エクセルVBAでセル内の文字列に含まれる改行を一括で削除する方法
- エクセルVBAでセル内の文字列を操作して全角文字を半角に一括変換する方法
- エクセルVBAでチェックボックスのONOFFでボタン表示を変える方法 (本記事です)
- エクセルVBAでセル内文字列の前後の空白をまとめて一括で削除する方法
- エクセルVBAのReplace関数でセルの文字列内の空白をまとめて一括削除する
- エクセルVBAのCountA関数でシート内の空白行をまとめて一括で削除する方法
- エクセルVBAで空白行を削除しないでまとめて一括非表示で隠す方法
- エクセルVBAで条件付き書式を使わず1行おきに色を付ける方法
- エクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法
- エクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法