質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1228閲覧

全角から半角への変換する方法(VBA)

kaiserdoragon

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2020/03/25 07:27

編集2020/03/26 04:45

いつもお世話になっております。

セル範囲に入力された全角のアルファベットは半角にする方法についてわからない点がありご質問させていただきます。

VBA

1 2Sub CharacterConvert() 3 Dim i As Integer 4 Dim myCell As Range 5 6 Worksheets("英字変換元").UsedRange.Copy 7 Worksheets("英字変換").Activate 8 Range("A1").PasteSpecial 9 Range("A1").Select 10 11 MsgBox "セル範囲に入力された全角アルファベットを半角にします" 12 13 Set myCell = ActiveSheet.UsedRange 14 15'-----<「A」→「A」の変換>----- 16 For i = 65 To 90 17 myCell.Replace What:=String(1, i - 32225), Replacement:=String(1, i), _ 18 MatchCase:=True 19 Next i 20 21'-----<「a」→「a」の変換>----- 22 For i = 97 To 122 23 myCell.Replace What:=String(1, i - 32224), Replacement:=String(1, i), _ 24 MatchCase:=True 25 Next i 26 27End Sub 28

こちらのコードになるのですが
これを実行すると全角文字がすべて半角になると思います。

For i=65 To 90 や For i=97 To 122はASCIIコードで指定していると思っており
またString(1,i-32225)やString(1,i-32224)の「i-32225」の「i-32224)」は文字コードを設置していると推測しています。

質問の内容としてはこの32225や32224というのはどういう意味になるのでしょうか??

こちら書籍からそのまま抜粋したコードになるのですが

i-32225 → 全角大文字

i-3224 → 全角小文字

とだけ記載があり「全角 文字コード」、「全角 ASCIIコード」など入力しても
それらしき答えがヒットしませんでした。

ご教授よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

詳しく調べてみませんが、i - 32225またはi - 32224を行うことでシフトJIS漢字の全角英大文字・全角英小文字を文字としてReplaceに与えているようです。

正直自分で全角から半角への変換を行うのなら、StrConvを使用します。

例 A1セルの全角文字を半角文字に変換してB1セルにセットする

VBA

1 Range("B1").Value = StrConv(Range("A1").Value, vbNarrow)

投稿2020/03/25 08:15

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaiserdoragon

2020/03/25 23:51

回答いただきありがとうございます! この件に関して他にも調べたところ 記載いただいたように別の方法で変換を 行っている人や推奨している場合がありました。 こちら今後の参考にします!
hatena19

2020/03/26 00:26

今回の質問のコードはアルファベットを半角に変換するというものですが、 StrConvは、アルファベット以外の数字、記号、カタカナも半角に変換します。 仕様にあわせて選択するといいでしょう。
DreamTheater

2020/03/26 00:32

仰る通りですね。 フォローありがとうございます。>hatena19さん
guest

0

ベストアンサー

イミディエイトウィンドウで?Asc("a") ?Asc("a")とコードを記述してEnterキーを押すと次行に結果が出力されます。Asc関数はAsciiコードを返します。イミディエイトウィンドウでの結果は下記のようになります。

vba

1?Asc("a") 2 97 3 4?Asc("a") 5-32127

半角aのASCIIコードは97、全角aのASCIIコードは-32127と分かります。その差は、32224です。
つまり半角小文字アルファベットのASCIIコードから32224を引くと全角小文字アルファベットになるということです。
半角アルファベット、全角アルファベットともASCIIコード順ではa(97)からz(122)まで連続しているので
String(1, i) が半角小文字アルファベット、String(1, i - 32224)が全角小文字アルファベットになります。

同様に、大文字アルファベットの半角と全角のASCIIコードの差は32225になります。

投稿2020/03/25 08:02

編集2020/03/25 08:06
hatena19

総合スコア33790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaiserdoragon

2020/03/25 23:56

回答いただきありがとうございます! ASCIIコードについての事を調べていたのですが このようにして解決する方法もあるんですね。。 考え方が参考になりました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問