- ベストアンサー
\はエクセルでは全角?
半角文字の\はエクセル(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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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%E5%8F%B7
その他の回答 (2)
- DexMachina
- ベストアンサー率73% (1287/1744)
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
お礼
追加情報ありがとうございました。
- Masa2072
- ベストアンサー率51% (94/182)
\がVBAで全角扱いなのではなく、StrConv("\",vbWide)では¥(全角)にならないようです。(理由は分かりませんが・・・) \を含む文字列をすべて全角にするなら Replace(StrConv(MOJI,vbWide),"\","¥") とでもしてください。
お礼
回答ありがとうございます。 やはり\は個別に扱わなければならないようですね。 今回は文字変換ではなく、等幅フォントの文字列(IBMメインフレームから送られてくるデータをエクセルに取り込んだもの)の長さを調べるのが目的でした。 Lenでは全て1桁ですし、LenBはユニコードなので全て2桁ですので、半角文字だったら1を全角文字だったら2を返す関数を自作して使っていました。 半年ほど使って問題無かったのですが、たまたま\が発生して処理がおかしくなっていました。
お礼
回答ありがとうございます。 このWikipediaでこんなに大きく扱われているとは驚きました。 全く知りませんでしたが、大きな問題だったのですね。 これらの文字を扱う場合、慎重に行う必要がありますね。