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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

13131閲覧

VBAで環境依存文字を判定したい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/01/05 03:55

前提・実現したいこと

VBAで全角文字と環境依存文字があれば表示するようなコードを作成しています。
全角文字を出力できるようにはしていますが環境依存文字がどうしても出力できません。
また、Range(Cell~)で検索範囲をセル「A4~I100」で指定しているのにどうしてもA4しか検索されません。
小生、VBA初心者でネットでググって作成していますが、よくわからない状態です。

ソースコードには作成途中のコードを貼り付けます。一応これでA4のみ全角か判定できるようにはしています。
どうすれば解決できるか、どうかお力添えをお願いします。

該当のソースコード

Sub A()
Dim a As Range
Set a = Range(Cells(4, 1), Cells(100, 9))
If hasZenkaku(a) Then
MsgBox "全角文字を含んでいます"
Else
MsgBox "全角文字を含んでいません"
End If
End Sub

Function hasZenkaku(a As Range) As Boolean
Set a = Range(Cells(4, 1), Cells(100, 9))
For Each a2 In a
If Len(a2) <> LenB(StrConv(a2, vbFromUnicode)) Then
hasZenkaku = True
Exit For
Else
hasZenkaku = False
Exit For
End If
Next a2
End Function

補足情報(FW/ツールのバージョンなど)

Excel2016

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

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

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

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

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

guest

回答2

0

ベストアンサー

また、Range(Cell~)で検索範囲をセル「A4~I100」で指定しているのにどうしてもA4しか検索されません。

まずは、この原因は、下記のループ内の判定で、TrueでもFalseでもループを抜けている(Exit For)からです。最初の判定でループを抜けてしまいますので、最初のセルしか判定できません。

vba

1If Len(a2) <> LenB(StrConv(a2, vbFromUnicode)) Then 2 hasZenkaku = True 3 Exit For 4Else 5 hasZenkaku = False 6 Exit For 7End If

全角が含まれるかどうかなら、全角の時だけループを抜けるようにします。

vba

1Sub a() 2 Dim a As Range 3 Set a = Selection 'Range(Cells(4, 1), Cells(100, 9)) 4 If hasZenkaku(a) Then 5 MsgBox "全角文字を含んでいます" 6 Else 7 MsgBox "全角文字を含んでいません" 8 End If 9End Sub 10 11Function hasZenkaku(a As Range) As Boolean 12 hasZenkaku = False 13 Dim a2 14 For Each a2 In a 15 If Len(a2) <> LenB(StrConv(a2, vbFromUnicode)) Then 16 hasZenkaku = True 17 Exit For 18 End If 19 Next a2 20End Function

環境依存文字(機種依存文字)については、時代によって定義が変化してきています。
現在はほとんどの環境でUnicode対応しているので問題になる場面は少ないです。
質問者さんが考える環境依存文字の定義は何かを明確にしてください。

機種依存文字 - Wikipedia

投稿2020/01/06 02:27

編集2020/01/06 03:20
hatena19

総合スコア33715

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

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

退会済みユーザー

退会済みユーザー

2020/01/11 02:23

お二方共ご回答ありがとうございます。お二方共詳細に説明いただき大変勉強になりました。原因について詳細に、かつわかりやすくご説明いただきましたこちらの方をベストアンサーにします。環境依存文字については入力された文字数の想定バイト数から出力する方法で解決したいと思います。
guest

0

とりあえず、検索範囲内に全角文字が含まれているかの判定方法を示します。

ここから先は、以下サイトを参考にまずは実現したいことを具体化することが必要と思います。
https://excel-ubara.com/excelvba4/EXCEL_VBA_403.html

VBA

1Sub a() 2 Dim a As Range 3 For Each a In Range(Cells(4, 1), Cells(100, 9)) 4 If hasZenkaku(a) Then 5 MsgBox "全角文字を含んでいます" 6 End If 7 Next 8End Sub 9 10Function hasZenkaku(a As Range) As Boolean 11 If Len(a.Value) <> LenB(StrConv(a.Value, vbFromUnicode)) Then 12 hasZenkaku = True 13 Else 14 hasZenkaku = False 15 End If 16End Function

投稿2020/01/05 04:41

編集2020/01/05 04:51
TanakaHiroaki

総合スコア1063

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問