• ベストアンサー

海外購入PCでLENB関数を機能させるには?

掲題の件ですがお力を貸していただけますと幸いです。 LENBを使って文字数をカウントしたいのですが、 海外購入パソコンのため全角認識がないのか、 ひらがなや漢字をいれても`1`とカウントしてしまいます。 きちんと半角は1、全角は2としてカウントさせたいのですが 何かいい方法はないでしょうか? このエクセルファイルは人に提出して記入してもらうもののため (提出先の人も海外購入パソコンを使用している可能性大) PCのハード側をいじるのではなく、 エクセル内の関数などで解決したいです。。。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

asdfghtrewq
質問者

お礼

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

その他の回答 (2)

noname#194317
noname#194317
回答No.2

LENB関数は日本語版限定の機能なので… なのでやれる可能性があるとしたら、 1)LEFTあるいはRIGHT関数で端から1文字ずつ取り出す。 2)それをCODE関数に入れて文字コードを調べる。 3)CODE関数の戻り値が255以下だったら半角なので文字数+1,そうでなければ+2。 4)上記を全ての文字を調べるまで繰り返す。 という動作をするユーザー定義関数を作るくらいしか手がないんじゃないでしょうか。

asdfghtrewq
質問者

お礼

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

noname#204879
noname#204879
回答No.1

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

asdfghtrewq
質問者

補足

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

関連するQ&A