- ベストアンサー
海外購入PCでLENB関数を機能させるには?
掲題の件ですがお力を貸していただけますと幸いです。 LENBを使って文字数をカウントしたいのですが、 海外購入パソコンのため全角認識がないのか、 ひらがなや漢字をいれても`1`とカウントしてしまいます。 きちんと半角は1、全角は2としてカウントさせたいのですが 何かいい方法はないでしょうか? このエクセルファイルは人に提出して記入してもらうもののため (提出先の人も海外購入パソコンを使用している可能性大) PCのハード側をいじるのではなく、 エクセル内の関数などで解決したいです。。。 どうぞよろしくお願いいたします。
- みんなの回答 (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
その他の回答 (2)
LENB関数は日本語版限定の機能なので… なのでやれる可能性があるとしたら、 1)LEFTあるいはRIGHT関数で端から1文字ずつ取り出す。 2)それをCODE関数に入れて文字コードを調べる。 3)CODE関数の戻り値が255以下だったら半角なので文字数+1,そうでなければ+2。 4)上記を全ての文字を調べるまで繰り返す。 という動作をするユーザー定義関数を作るくらいしか手がないんじゃないでしょうか。
お礼
ありがとうございます。 ただ上記の関数でもただしくcodeがでずでした。。。
当該PCにインストールされている Excel は英語版ですか、それとも、日本語版?
補足
英語版のexcelです。。。 やはり難しいでしょうか?
お礼
ありがとうございます。 VBAでやってみます。 ありがとうございました。