Excel VBA 質問スレ Part57

■ このスレッドは過去ログ倉庫に格納されています
2018/09/10(月) 21:42:39.57ID:K1uuwFLt
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part56
http://mevius.5ch.net/test/read.cgi/tech/1534976724/
2018/10/05(金) 22:05:56.09ID:uERkBuVa
質問です。

テキストファイルの中身をセルに出力する処理をやっているのですが、一部のテキストファイルの文字が正常に出力されません。(縦線 " | "のみが出力される)
ただし、判定によってセルの色を変えているのですが、その機能は生きているので、読み込み自体はできているみたいです。
また、全部のファイルで不具合があるわけではなく、特定のファイルの特定のレコードにのみ起こるっぽいです…

補足すると、テキストファイル自体はメインフレームの伝送機能で送ってます。これが原因に関係あるのかはわかりませんが…

詳細聞かれたらお答えしますので、解決にご協力頂ければと思います。
2018/10/05(金) 22:07:25.21ID:uERkBuVa
565です。
本題を載せ忘れていました。
原因、改善方法がわかる方いましたら、ご返答願います。
2018/10/05(金) 22:15:30.06ID:vSWfZutq
俺はインデントもしっかりでEnd Ifも先に書く派だな、他の言語での閉じ括弧みたいなもんだし
568デフォルトの名無しさん
垢版 |
2018/10/05(金) 22:17:06.45ID:KYi5h4An
>>565
その特定のレコードを教えて
2018/10/05(金) 22:27:19.79ID:XVCqdvbX
>>564
俺はブロックを先に区切らずにダラダラ書いていく方が効率悪いように見えるんだけど、End Ifを先に書かない方が速度上がるの?
本当だったらそうしてみようかな
2018/10/05(金) 22:27:20.22ID:vSWfZutq
>>565
コンピュータのベンダーや年式が違えば文字コード字形の割り当てが違うことも多い

手順
・テキストファイルの文字エンコード、記述形式を正確に把握する
・化けた部分前後数行のみのテストデータを作る
・ウォッチウィンドウを活用して原因を探る
2018/10/05(金) 22:30:53.32ID:uERkBuVa
>>568
INPUTはJCL(COBOLアプリを動かすためのスクリプト言語)をテキストファイルに落としたものです。

特定のレコードなのですが、テキストファイルを確認しても、他の出力されているレコードと見た目は全く変わりません。(スペース、データの末尾にも問題なし)
にも関わらず決まったレコードのみに不具合が発生します。

マクロが手元にないため画像は載せられませんが、
JCLについては、画像検索して出てきたものとほぼ同じですので参照頂ければと思います。
2018/10/05(金) 22:37:26.08ID:uERkBuVa
>>570
やはり文字コードがきな臭いですかね
shift-jis になる仕様のはずなのと、他レコードは大丈夫なため問題ないと判断していたのですが、
vba上でも文字コードを明示してあげる必要がありそうですね
2018/10/05(金) 22:59:15.65ID:MhNSlq6Z
メインフレームなぁ・・・最後に触ったの20年近く前で、びっくりするほど覚えてねぇ。

ちょっと気になるんだが、正常に出力されない時に表示される縦線は、
元のテキストファイルにデータとかデリミタとして含まれている文字なのか?
それとも変換できなかった文字が縦線に置き換わっているのか?
2018/10/05(金) 23:11:22.13ID:VkzGqctC
>>556
なんかコピペしたときにend ifが抜けてた
2018/10/05(金) 23:23:40.27ID:lz8xFasJ
>>573
縦線はデリミタではなく、元のレコードにも存在しない文字です。
処理としては、テキストファイルのレコードをそのままセルに出力するだけなのですが…
読み込んだ時点では問題なく、出力したときに縦線に置き換わってる感じですねー
576デフォルトの名無しさん
垢版 |
2018/10/05(金) 23:39:05.08ID:JjUc2WZB
>>574
馬鹿は死ねよ
2018/10/05(金) 23:53:59.29ID:E7eIsq4P
>>575
ファイルからレコードを読み込んだら、イミディエイトウィンドウにも出力しておく
データをセルに書き込んだあと、もう一度セルから読み出して縦線になってたら中断するようなコードを書く
中断したらイミディエイトウィンドウの内容を確認

どこで化けたか、1つずつ追跡するしかないです
意外なところでミスをしていたり、仕様だったり、落とし穴があるもんです
2018/10/06(土) 00:57:54.07ID:F9JdDpiN
>>575
1.入力するテキストファイルに「ろくでもない見えない文字」が含まれている(たとえば制御文字)
 →普通のテキストエディタでは見えないことが多いのでバイナリエディタで確認する
2.テキストファイルのレコードを読み取りセルに出力する処理のどこかに問題がある
 →特定のレコードで発生するということは、特定の文字列のパターンか、特定のレコード数でのみ発生している可能性もある
こんな月並みなことしか考えつかないな。
個人的には、文字化けだったとしたら全部縦線に置き換わるのはおかしいと思うが(化けた文字が一切見受けられず縦線だけってのが妙に気になる)
2018/10/06(土) 04:51:40.31ID:tnNc0I+3
とりあえず、どんなコードで読み取って表示してるか出さんと話にならんわ
2018/10/06(土) 07:12:44.67ID:GeqHzxmy
実はテキストファイルのエンコードがutf8とかだったりして
2018/10/06(土) 07:49:00.01ID:4qqF7BWz
メインフレームだからEBCDICだろ変換前はEBCDICの変換は面倒い
2018/10/06(土) 07:55:07.00ID:omtH0luh
EOTとかVTの類の制御文字な気がする
2018/10/06(土) 13:50:07.16ID:tnNc0I+3
>>561
SHIFT-JISのはずって言ってるし、ホスト側に大抵変換ツールあるだろ


文字コードや制御文字の可能性よりプログラムのバグの方が確率高い気がするなぁ
まあコード出せばどっちの問題かはだいたい判別できるはず
化けるデータのダンプでもいいけどな
2018/10/07(日) 13:12:34.96ID:DYNz6D7I
色々と意見ありがとうございます。
コードが掲示できなくて申し訳ないですが、
文字コードについてはホストの変換機能があるはずなので、プログラム上のバグとみてデバックしてみます。
2018/10/07(日) 15:35:18.94ID:RZXmBbwE
>>567
>>569
正解。

でも、頭の使い方を知らない人にとっては理解し難いんだろう。
頭を使う作業と単純作業を分けるのが自然になってる人はEndIfを先に書く。
他にもEndWithやNextも先に書くな。

Ifまで書いて条件をどこからかコピペするのに気付いた時はIf a Then...EndIfまで書いてからaと差し替えるとか。
あるいはaの差し替えは中身書いた後の時もあるな。
2018/10/07(日) 15:38:24.87ID:RZXmBbwE
>>577
文字化けはイミディエイトでは分からない場合も多い。
こういう時はデバック用にバイナリで出力するものを作っとくべきだね。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況