Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
外部ファイルに外字が含まれるか判定は可能でしょうか。VBに限らず
投稿日時: 21/10/14 13:45:16
投稿者: QooApp

いつもお世話になっております。今回もよろしくお願いします。
 
方法についてはVBに限定せずに進めたいと思います。
 
CSVファイルのデータの中に外字文字が含まれております。
 
ExcelやAdobe Indesignなどにそのままインポートすると文字化けするため、よろしくないです。
 
CSVの住所データに外字が含まれている場合が最も問題になっており、文字化けしたテキストを含む状態で住所検索を行うことになってしまいます。
 
その結果、外字化けした住所と外字回避した同一の住所で所在が異なることになるという不具合が発生しており、とりあえずCSVでもCSVじゃないファイルでもいいので外字が含まれるかどうかを判定する妙案はございますでしょうか。

回答
投稿日時: 21/10/14 14:32:33
投稿者: Suzu

『外字』をどう定義しますか?
 

引用:
ExcelやAdobe Indesignなどにそのままインポートすると文字化けするため

 
これを、外字の為と断言する事は出来ません。
・機種依存文字
・システム外字
・ユーザー定義外字
・フォントの違いによる問題
・文字コードの違いにによる問題
  (CSVとの事ですので他にも大量のデータがありそちらは問題ないのでしょうから
   可能性は低いです)
 
これらの可能性があります。
 
 
問題のデータが Windows にて作成されたデータである前提であれば
 問題の文字の文字コードが 0x00〜0xff の 文字なのかの確認をしてみてください。
 
逆に言えば、文字コードを調べていけば外字かどうかは判断できます。
Cell(r,c).Value LIKE "*[" & Chr(&HF040) & "-" & Chr(&HF9FC) & "]*" にて ユーザー定義外字
かは判断できると思います。
 
 
バージョン情報がないので何ともですが、
サロゲート文字やら ISV/IVD あたりが含まれていると 面倒ですね。。

回答
投稿日時: 21/10/14 15:19:04
投稿者: WinArrow
投稿者のウェブサイトに移動

CSVファイルを作成する場合、
文字コードをシフトJIS(ANSI)以外(UTF-8など)で保存していませんか?

投稿日時: 21/10/14 17:17:08
投稿者: QooApp

すみません返信遅れました。
Suzu様
WinArrow様
 
私もまだ内容を詳細に聞かされていないのでまだ正式なルールなど把握しきれておりませんが
 
顧客ユーザーがおそらくwebの入力フォームに入力したモノと思われます。
 
基本的な外字の判断基準ですが、難しい書き方のほうの「高」などの常用外漢字類です。
 
仰る通りの機種依存関係の文字類も含みます。
 
クッソ古いワープロ機だと書ける文字とかもありました。
まさかワープロを会社で見る事になるとは思いませんでした。
 
地域名・氏名に含まれる外字がエラーの原因のようです。(聞きかじり)
 
客側ユーザーがなぜそのような外字を入力できたのか不思議ですが、
その結果、住所検索に不具合が発生しているらしく、状況把握に手間取っています。
 
現状、文字コード変換はかかっていないので他の普通の入力は読めます。
 
やはり1文字ずつ、文字コードの調査をするしかなさそうでしょうか。
10万件程度あるので1文字ずつ外字か比較するとやはり時間かかりそうですね。

投稿日時: 21/10/14 17:19:22
投稿者: QooApp

技術的な作業漏れを気にするならやはり1文字ずつ比較する方で考えてみようと思います。
しばらくレス解放したまま追記わかり次第追記します。

回答
投稿日時: 21/10/14 18:29:04
投稿者: WinArrow
投稿者のウェブサイトに移動

QooApp さんの引用:
技術的な作業漏れを気にするならやはり1文字ずつ比較する方で考えてみようと思います。
しばらくレス解放したまま追記わかり次第追記します。

 
>機種依存
ではなく、
環境依存文字
と表示されるはずです。
 
OS、Excelのバージョンを示してください。
OSのバージョンによっては、対応していない環境依存文字があります。
 
「高」と「?」(はしご高)の件
両方とも
シフトJISでCSVに保存しても文字化けは起こりません。
 
因みに、このような文字(異体字という)を認識するのは、変換表を使えば、対応可能(1文字ごと)です。
しかし地名、人名の場合、変換してはいけないのではないでしょうか?

投稿日時: 21/10/15 11:18:45
投稿者: QooApp

CSVを一時的にわかりやすく表示するためにExcelを使用しておりますが、メインの処理に含まれないため今までExcelに言及は避けておりました。
 
一応ですが2013版、OSはWin10Proです。
ただ、遺物のワープロなどは私も一度見た切りで型番不明です。
曰く、一部の表示できていない文字が社内唯一表示できる機械だとか。
 
異体字という言い方ができず、言い方があやふやになっておりました。すみません。
だいたいの文字は異体字関連と思います。
 
自分にこの問題が割り当てられそうに無さそうな雰囲気になってきたので保留にしようか考えております。

回答
投稿日時: 21/10/15 12:51:31
投稿者: WinArrow
投稿者のウェブサイトに移動

話がよくわからないと頃があります。
 
>メイン処理
と表現されていますが、
 
この板は、ExcelVBAです。
処理するアプリケーションがExcelならば、よいが、
別のアプリケーションの話をExcelで論じても、解決するとは思いません。
 
CSVを作成しているのは、どのコンピュータのそんなアプリなんでしょうか?
 
また、今回、問題となっているコンピュータは?
そのアプリケーションは?
 
対象の文字は、文字化けになってるのでしょうか?
 
 

投稿日時: 21/10/15 13:21:55
投稿者: QooApp

メイン処理は2つあり、
1つはInDesignの自動組版です。
CSVのデータを流し込むと自動で設定箇所にCSVから切り出した値を嵌め込んで印刷処理まで行います。
 
2つ目が住所部分のデータから緯度経度情報を取得する処理です。
こちらはC++のプログラムで処理されていますが、読み込んだCSVで文字が正しく認識されない部分があります。
 
CSVの情報を読み込んで化けるかどうかわかれば現状なんでもよさそうとしか言えず、
ExcelVB(ないしWordVB)やそれ以外の方法も含めて漠然と考えています。
 
InDesignの化けは対応表から外字フォントをインポートできるので問題ないです。
緯度経度の取得処理の際に、例えば「高町」「(異字体の)高町」という地名で処理した場合に別の場所を指し示すエラーとなります。
「□」というような代替文字で表示され、つぶれてしまう文字もあります。同様に住所検索で検索しきれていません。
 
右往左往しておりますが、異字体やそもそも読み込めてない文字をVBで検知できそうかなという質問です。
 
CSVの生成処理はすみません私も現在不明でして、多分どこかのサーバからエクスポート処理をしていると思いますが現在不明です。
ExcelVBの質問板に書き込んだ件は申し訳ございません。

回答
投稿日時: 21/10/15 15:15:35
投稿者: WinArrow
投稿者のウェブサイトに移動

処理したら、化ける・・・
 
データに問題があるか
プログラムに問題があるかを
切り分けないと、話が進まないと思います。
 
手始めに
「CSVがどのようになっているか」を
調査してみましょう。
 
フリーソフトを活用してみる
https://tipstour.net/free-soft/20165
 
これで、どのような文字コードで作成されたかわかると思います。
 
※「高」はOK、「?」はNG
というようなことから推測すると、プログラム側に問題があるように思います。
 
CSVをメモ帳で開いてみて、両方が目視できるならば、プログラム側かな?
 
 

投稿日時: 21/10/15 16:44:52
投稿者: QooApp

WinArrow様
 
ありがとうございます。承知しました。
いったん全体把握してきます。
 
再度やばそうな場合は正しい板にてご相談させていただきます。
ありがとうございました。