dポイントプレゼントキャンペーン実施中!

掲題の件ですがお力を貸していただけますと幸いです。

LENBを使って文字数をカウントしたいのですが、
海外購入パソコンのため全角認識がないのか、
ひらがなや漢字をいれても`1`とカウントしてしまいます。

きちんと半角は1、全角は2としてカウントさせたいのですが
何かいい方法はないでしょうか?

このエクセルファイルは人に提出して記入してもらうもののため
(提出先の人も海外購入パソコンを使用している可能性大)
PCのハード側をいじるのではなく、
エクセル内の関数などで解決したいです。。。

どうぞよろしくお願いいたします。

A 回答 (3件)

>ひらがなや漢字をいれても`1`とカウントしてしまいます。



VBAを使うしか手はないと思いますが……。
VBAでも、一般のコード、InstrConv で、Ascii に戻す、vbFromUnicode オプションが利きません。もともと、英語バージョンも、ローカルバージョンですから、たぶん、CODE関数でも取れないはずです。「1」と出ているのは、単に、ワークシート上で「?」になった文字を数えているだけだと思います。ちょうと、以前の#1のmike_gさんのご質問の裏返しのようなものではないでしょうか?

今回の質問は、時々、VBカテゴリなどで出る質問と同質だと思いますが、バイナリにして文字長を数えます。VBAは、本来、Unicodeだけですから、Unicodeの上位桁・下位桁のチェックをすればよいわけです。ワークシート関数では、そういうことは出来ないと思います。VBAは、禁止だとすれば、今回は無理だと思います。

'標準モジュールに貼り付けてください。
Public Function fLenB(arg As Variant)
 Dim buf As String
 Dim b() As Byte
 Dim i As Long, cnt As Long
 If TypeName(arg) = "Range" Then
  buf = arg.Value
 Else
  buf = arg
 End If
 b = buf
 For i = LBound(b) To UBound(b)
  If b(i) > 0 Then
   cnt = cnt + 1
  End If
 Next i
 fLenB = cnt
End Function
    • good
    • 0
この回答へのお礼

ありがとうございます。
VBAでやってみます。

ありがとうございました。

お礼日時:2011/01/22 11:32

LENB関数は日本語版限定の機能なので…



なのでやれる可能性があるとしたら、

1)LEFTあるいはRIGHT関数で端から1文字ずつ取り出す。
2)それをCODE関数に入れて文字コードを調べる。
3)CODE関数の戻り値が255以下だったら半角なので文字数+1,そうでなければ+2。
4)上記を全ての文字を調べるまで繰り返す。

という動作をするユーザー定義関数を作るくらいしか手がないんじゃないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ただ上記の関数でもただしくcodeがでずでした。。。

お礼日時:2011/01/22 11:31

当該PCにインストールされている Excel は英語版ですか、それとも、日本語版?

この回答への補足

英語版のexcelです。。。
やはり難しいでしょうか?

補足日時:2011/01/21 13:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!