
半角文字の\はエクセル(VBA)では全角扱いなのでしょうか?
添付のマクロを実行すると結果は"全角だろう"になります。
\はStrConvでvbWideを指定しても全角になりません。
全角の¥はStrConv/vbNarrowで半角になります。
どういう理由でこうなっているのでしょうか?
\以外にもこのような文字があるのでしょうか?
ご存知の方、教えていただけないでしょうか。
Sub Macro1()
ch1 = "\"
ch2 = StrConv(ch1, vbWide)
If ch1 = ch2 Then
Debug.Print "全角だろう"
Else
Debug.Print "半角だろう"
End If
End Sub
No.2ベストアンサー
- 回答日時:
StrConv関数で特殊な結果になる文字は、私の知る限り、「\」も含めて3種あります。
1)一方通行:
「\/¥」
2)変換前後で異なる全角文字に変換:
「'/'/’」、「"/"/”」
「2)」については、vbNarrow指定で「'」(ASCIIコード=-1450)と「’」(同=-32408)とが
「'」に変換されます。
一方、「'」はvbWide指定で「'」(同=-1450)に変換されますが、キーボードの「7/'/や」
キーで入力されるのは、通常は「’」(同=-32408)の方なので、StrConv関数で
「(全角入力)→半角変換→全角再変換」という操作をすると、全角にはなっている
ものの、元に戻っているわけではない、という結果になります。
(「"」についても同様です)
ただ、文字種は違っても、全角への変換はされているので、今回ご質問の
「Len関数による文字判定」には、特に支障はないものと思います。
~~~~~~~~~~~~~~~~~~~~~~~~~~
「\→¥」の変換がされないのは、もしかしたら「円記号問題」に絡む・・・のかもしれません。
(「0x5C番地の文字」は「\/バックスラッシュ」という(見た目の全く違う)2通りがあり得るため、
変換可否を判断できない、と。一方、「¥」の半角化の場合は、「0x5C番地ではない\」
(・・・というものがあるのかどうかを知らないのですが(汗))に変換、として対処している、と:
あくまで、素人の推測です(汗))
Wiki・円記号:
http://ja.wikipedia.org/wiki/%E5%86%86%E8%A8%98% …
回答ありがとうございます。
このWikipediaでこんなに大きく扱われているとは驚きました。
全く知りませんでしたが、大きな問題だったのですね。
これらの文字を扱う場合、慎重に行う必要がありますね。
No.3
- 回答日時:
No.2です。
訂正と追加情報です。
<訂正>
「ASCIIコード=-1450」等と書きましたが、これはASCIIの範囲外ですので
ASCIIコードではなくUnicodeでしたので、訂正させていただきます(汗)
(調べるのにVBAのAsc関数(→ワークシート関数のASC関数とは別物)を
使ったため、それに引きずられる形で誤記してしまいました)
<追加情報>
上記Asc関数を使用して、以下のように判定することも可能かと思いますので、
参考までに:
Sub Macro1()
Dim StrChr As String
Dim IntChr As Integer
'StrChr = "\"
StrChr = "¥"
'「StrChr」の文字コードを取得
IntChr = Asc(StrChr)
'文字コードが0~255(=0000~00FF)の範囲内かどうかを判定
If IntChr >= 0 And IntChr < 256 Then
Debug.Print "半角のようです"
Else
Debug.Print "全角らしいです"
End If
End Sub
No.1
- 回答日時:
\がVBAで全角扱いなのではなく、StrConv("\",vbWide)では¥(全角)にならないようです。
(理由は分かりませんが・・・)\を含む文字列をすべて全角にするなら
Replace(StrConv(MOJI,vbWide),"\","¥")
とでもしてください。
回答ありがとうございます。
やはり\は個別に扱わなければならないようですね。
今回は文字変換ではなく、等幅フォントの文字列(IBMメインフレームから送られてくるデータをエクセルに取り込んだもの)の長さを調べるのが目的でした。
Lenでは全て1桁ですし、LenBはユニコードなので全て2桁ですので、半角文字だったら1を全角文字だったら2を返す関数を自作して使っていました。
半年ほど使って問題無かったのですが、たまたま\が発生して処理がおかしくなっていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) 【VBA】ファイルパスに半角スペースが入ると、VBAが動かない 5 2022/08/04 20:52
- Excel(エクセル) 【マクロ】フォルダを3つ、POモニター上に、決まった並べ方をしたい 4 2022/08/31 11:05
- Excel(エクセル) 【マクロ】フォルダを2つのモニターの定位置に並べたい 2 2022/09/02 01:14
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Excel(エクセル) エクセルでのデータの統一に関して リストを作成する際、元データをコピペでリストに転記しており、元デー 2 2022/08/31 15:33
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 文字に半角が含まれて...
-
英数字のみ全角から半角に変換
-
正規表現の全角、半角、大文字...
-
ACCESS:半角、全角空白スペース...
-
数字を全角で書くのは何が悪い...
-
エクセルのセル表示のユーザー...
-
いまスマホからカードの申込み...
-
コンボボックスに貼り付け文字...
-
数値から 全角数値、漢数字に変換
-
Word2007の全角文字、全角スペ...
-
住宅にカナを入力する際に丁目...
-
Accessのテキストボックスの入...
-
コマンドプロンプト 全角を含ん...
-
IEからEdgeへの移行に伴うIMEの...
-
全角英数字の必要性が理解できない
-
メモ帳の段落の揃え方
-
文字間の空白(スペース)の使...
-
Pythonでテトリスを作っている...
-
VBAでシングルクオート(8217)を...
-
LaTeX TeXShop「''」の入力方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
住宅にカナを入力する際に丁目...
-
英数字のみ全角から半角に変換
-
IEからEdgeへの移行に伴うIMEの...
-
VBA 文字に半角が含まれて...
-
全角英数字の必要性が理解できない
-
word差し込み印刷 半角カタカ...
-
エクセルの検索が正しくできな...
-
メモ帳の段落の揃え方
-
エクセルにMicrosoft Barcode C...
-
COBOL・全角判定
-
エクセルでの”々”の扱い
-
プログラミングでは、半角括弧...
-
char型全角数字から、int型半角...
-
VB.net、テキストボックス入力...
-
全角/半角キーをSendkeys関数で...
-
明細書の英数字の全角・半角に...
-
ダブルコーテーションの置換
-
いまスマホからカードの申込み...
-
[Excel VBA] ODBCによる外部デ...
-
VBで、String型のデータが、...
おすすめ情報