こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も「時間クリエーター」としてバシバシ時短に取り組んでます!
全10回の連載でエクセルのデータ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。今回はその第2回目です。
前回お伝えした「セル内の文字列に含まれる改行を一括で削除する」に続いて、今回は「全角文字を半角に一括で変換」するテクニックをご紹介します。
全角を半角への変換はASC関数、半角から全角への変換はJIS関数を使って、ワークシート内でもできるのですが、毎回入力するのは面倒ですよね。というわけで本記事ではVBAを使って別のエクセルファイルでも使える汎用的なプログラムを作っていきます。
目次
全角文字を半角に変換するプログラムの作成
前回使用した改行削除プログラムにボタンを追加する
はじめからユーザーフォームを作って、ワークシートに起動ボタンを配置して・・・という作業は面倒だし効率が悪いので、前回使ったプログラムを再利用します。前回作った「一括変換.xls」を開きます。
UserForm1を開いて新たに「全角→半角」ボタンを追加します。ユーザーフォームやボタンの大きさは見やすいように調整して下さい。
「全角→半角」ボタンをダブルクリックしてコードウィンドウを開きます。「CommandButton2_Click()」の下に以下のコードを貼り付けます。
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 |
'全角から半角に変換 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 '全角から半角に変換 selConv = vbNarrow '処理開始行 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 |
プログラムコードの解説
重要なポイントに要点を絞って説明していきます。
On Error GoToでキャンセルが押されたときの処理を追加する
前回と同じですがInputBoxを表示させるスクリプトは以下にようになります。
前回の「セル内の文字列に含まれる改行を一括で削除する」ではキャンセルボタンが押されたときの処理を入れていませんでした。ですのでキャンセルを押すと「実行時エラー’424′ オブジェクトが必要です」というエラーメッセージが表示されます。
キャンセルが押されるとInputBoxの返り値に”False”が入ります。しかしここで指定している引数はType=8のRangeオブジェクトなので、Falseという返り値を変数tmpに入れることができません。その結果エラーになります。
そこで以下のようなエラー処理をInputBoxを表示させる前に入れます。
そしてプロシージャの最後に以下のコードを入れます。
こうすることでInputBoxでエラーが発生したときに、プロシージャの最後にある変数myError:まで処理をスキップさせることができます。つまりキャンセルが押されたときは処理が何も発生しないということになります。
エラーのスキップを解除する
On Error GotoステートメントでInputBox使用時にエラーがあった場合、スキップするようにしましたが、このままだとInputBoxの処理が終わったあとにエラーが起こった場合でもスキップされてしまいます。
On Error Gotoステートメントは記述した場所からプロシージャが終わるまで有効だからです。そのためエラーをスキップさせたい処理が終わったら、On Error Gotoステートメントを解除する必要があります。
解除は以下のように書きます。
こうすることでOn Error Gotoステートメントが解除され、InputBoxの処理の後にエラーがあった場合、エラーメッセージが表示されるようになります。
StrConv関数で全角文字を半角に変換する
全角文字を半角に文字列変換をする場合は以下のようにStrConv関数を使用します。
StrConv関数を使えば大文字を小文字にしたり、カタカナをひらがなにしたりできるのでとっても便利ですね~。これらを組み合わせれば今まで手作業で行ってた作業を一気に効率化することができますよ。以下が主な文字列変換の種類です。
vbWide 半角文字を全角文字に変換
vbUpperCase 文字列を大文字に変換
vbLowerCase 文字列を小文字に変換
vbKatakana ひらがなをカタカナに変換
vbHiragana カタカナをひらがなに変換
全角から半角に一括変換プログラムの動作確認
ワークシートの起動ボタンを押します。フォームが表示されたら「全角→半角」ボタンを押します。
全角文字を半角文字に変換したい列をクリックします。InputBoxのOKボタンを押します。
全角文字が半角に変換されました。
まとめ
いかがでしたか?今回の内容をまとめます。
- Inputboxでキャンセルが押された場合のエラー処理を入れる
- StrConv関数で全角文字を半角に変換できる
- StrConv関数はひらがなをカタカナにしたりする便利な文字列変換関数
以上おつかれさまでした~。
[連載記事 全10回] エクセルVBAで文字列変換ツールを作る
全角半角の変換をしたり、空白行や改行を削除したり。データ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。1つの記事で1機能ずつ追加していきますので、少しずつVBAを学びながら進めることができます。
- エクセルVBAでセル内の文字列に含まれる改行を一括で削除する方法
- エクセルVBAでセル内の文字列を操作して全角文字を半角に一括変換する方法 (本記事です)
- エクセルVBAでチェックボックスのONOFFでボタン表示を変える方法
- エクセルVBAでセル内文字列の前後の空白をまとめて一括で削除する方法
- エクセルVBAのReplace関数でセルの文字列内の空白をまとめて一括削除する
- エクセルVBAのCountA関数でシート内の空白行をまとめて一括で削除する方法
- エクセルVBAで空白行を削除しないでまとめて一括非表示で隠す方法
- エクセルVBAで条件付き書式を使わず1行おきに色を付ける方法
- エクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法
- エクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法