|
分類:[VC++]
こんばんは、てこなです。
ご指摘くださったみなさま、大変お待たせして申し訳ございません。 この文章を作成した際は整形してますが、掲示板に反映した際正しく 表示される自身がなく、その点におきましてご容赦頂ければ幸いです。 (正しくとは、段落とか etc)
まず管理者様へ 結論と致しましては「解決」ですが、まだてこなにご指摘くださった方へ 調査し可能ならば報告したいと考えておりまして、 それが報告できた(できないと判断した)際に「解決(表示)」をしたいと考えておりますがいかがでしょう か? 投稿した当初は削除命令が来るのではないか・・と、ビクビクしておりましたが、 今となって、てこなにこのような機会を与えてくださり、まことにありがたく思って おります。
ご指摘くださったみなさまへ 皆様のご指摘内容は、次の<試行錯誤>に記載してありますが、 指摘したとおり認識してくれてない!などございましたら、 よろしければ再度ご指導頂ければ幸いなのですが・・・・・、 皆様の貴重なお時間をこれ以上割いていただくのも申し訳ないようにも感じます・・ ・・。 相変わらずうまく表現できず、みなさまに伝わっているか大変不安ではありますが、 あくまで、みなさまの都合最優先で、 もし都合がよろしければご指南していただけるとうれしいです。
急いでおりませんので、お手すきの際にでもご指南していただけると幸いです。 よろしくお願い致します。
「解決」を表示させるタイミングで再度お礼申し上げたいと思っております。
<試行錯誤>
【L/Dさまご指摘につきまして】
L/Dさまのご指摘にしたがって確認したつもりですが、認識の相違などございました ら、 その都度よろしければご指摘をお願い致します。
⇒ 下記ファイル(txt)を作成し、次のように作業をしてみました。 (1レコードにカンマで区切られた2つのデータ × 4レコード)
1001011101100001100,1001011101100001100, // 現状のCSV '1001011101100001100,1001011101100001100, // 前のみシングルクォート付加 1001011101100001100,'1001011101100001100, // 後のみシングルクォート付加 '1001011101100001100,'1001011101100001100, // 前後ともに付加
ダブルクリックで開かずに、 [データ]-[外部データの取り込み]-[テキストファイルのインポート]で実行してみ ました。 テキストファイルウィザードが起動しまして、 1/3 [ データのファイル形式:カンマや〜を選択 ] 2/3 [ 区切り文字:カンマにチェック ]-[ 文字列の引用符:『'』シングル クォート選択 ] 3/3 [ 完了] 文字列の引用符の指定(2/3)において、次の観点から実行してみました。 @『'』シングルクォートを選択しない場合 <結果:セル表示> A B 1 1.00101 E+18 1.00101 E+18 2 '1001011101100001100 1.00101 E+18 3 1.00101 E+18 '1001011101100001100 4 '1001011101100001100 '1001011101100001100
・セルA1をクリックして数式バーに内容を表示させてみると、 「1001011101100001100」→「1001011101100000000」となりデータが欠落して しまってますが、セルA2では『'』シングルクォートにより、データが欠落し ていませんでした。
A『'』シングルクォートを選択する場合 <結果:セル表示> A B 1 1.00101 E+18 1.00101 E+18 2 1001011101100001100,1001011101100001100, なし 3 1.00101 E+18 1001011101100001100, 4 10,010,111,011,000,000,000,000,000,000,000,000,000, なし
・セルA1をクリックして数式バーに内容を表示させてみると、 「1001011101100001100」→「1001011101100000000」となりデータが欠落して しまってます。 ・セルA2はデータが削られていないものの、 1つ目と2つ目の間のカンマは区切り文字として認識されていないように感じました。 ・セルA4ですが、書式が自動的に通貨になってしまい・・・・・ セル8個の書式を全て確認しましたが、セルA4以外は標準でした。 セルA4の書式を標準に戻しても、1.0010111011E+37となり・・・・・ ・セルB2とセルB4は空でした。
<考察> 『'』シングルクォートを付加することで、データの欠落はなくなったように感 じていたのですが、 考慮が漏れていまして、連続するデータの場合思惑通りにいかない様に感じまし た。
【Okuminさまご指摘につきまして】
『'』シングルクォートを外すマクロ(VBA)のようですが、 てこなの認識が間違っていたらその都度ご指摘をお願い致します。
記載してくださったマクロで範囲は別途拾うとして、 『'』シングルクォートを消すことは出来ると思いますし、 やり方として、次のように感じました。
@CSVファイルをダブルクリックEXCELに展開し、マクロを記述して実行させ る。 この場合マクロになれていない方がCSVファイルの中身を参照するには、 少し手間がかかってしまうような気がしました。
A先にマクロを登録しているEXCELファイルを作成しておいて、 CSVファイルをマクロ登録済みファイルにドラッグ・・・・・できませんでし た。
B先にマクロを登録しているEXCELファイルを作成しておいて、 作成したEXCELファイルをダブルクリックして、[ファイル]-[開く]で対象CSVを開 き、 展開が終わったら、マクロを実行する。 但し、対象のCSVファイルを開く際に、テキストファイルウィザードが立ち上 がり、 区切り方法を設定しなければならなく、出来ればその辺の操作は避けたいと感じ ています。 (避けたい→てこながやる分には問題ないのですが、 てこな以外の使用者を考慮・・・・・考慮できるほどの実力がてこなにはない ような・・・・)
Okuminさまはマクロに詳しそうなので、恐縮ですがよろしければお伺いさせてくださ い。 C(コンソールアプリ程度のLV)でEXCELを操作することは出来るのでしょう か? 操作というのは、単に「cells(1,1).value = "お願いします"」や「マクロの自動記 述」、 出来れば「マクロ実行と同様の動きを行わせる」など・・・・ インターネットで検索してもなかなか望みどおりのページを見つけることが出来ませんでした。 CとEXCEL関連の参考書もいろいろ探してみましたが、見つけることが出来ませんでし た。
余談ですが、 前にマイクロソフトの技術者情報?で、「VC++6.0 MFCでEXCELを作成するには・・ ・(英語)」を 見つけることが出来たぐらいです。 (この記事がCを始めたきっかけの1つです。完全な機能を有するEXCELではなく、 セル構造と列の最大256を増やしたい。EXCELがインストールされていなくても 表示ぐらいは 出来るようなEXCELもどき?がつくれれば、どんなに業務的に楽になるか・・・・ ・って考えてました。 そのようなフリーソフトも見つけることが出来ず(インストール有はありましたが、
インストール無は見つけることが出来ませんでした)・・・・・些細な情報でも構いませんのでよろしければ ご指摘いただければ、 うれしいです) 閑話休題(とりあえずMFC関連と思いますので)
ロータス云々の話はとても興味深かったです。 周りにこういう背景を知っている方が殆どおらず、非常にためになりました。 ありがとうございます。
【中博俊さまご指摘につきまして 】
申し訳ございません。 ご気分を害されないかとても不安ですが、わからないことを放置するのがちょっと嫌 なので、 書きます。ご指摘内容で「正常な『'』」という表現が勉強不足でちょっとピンとき ていません。 皆様がご指摘してくださった内容の検証は、業務の合間などで時間を見つけて 進めることが出来るのですが、平日は調査(書店で参考書を漁ったり)する時間が取 れそうもなく、 週末日曜でもお休みが取れれば、読み漁ってこようと思いますので、 検証は少しお時間を頂ければと思い書き込ませていただきました。
【柘植さまご指摘につきまして】
「Excelファンクラブ」はてこなもよく拝見させていただいているサイトです。 特にVBA関連では大変勉強になりました。
「="」で実施してみました。思惑通りにいきました。ありがとうございます。
当初の目的が、汎用ホストの帳票を紙に出力した場合大量になってしまい、 見づらいのでEXCELで見やすく出来れば・・・でしたので、大変感謝しております。
ただ、中博俊さまがご指摘してくださっている「そのCSV使い物にならなさそう」・ ・・ というのが気になり次のような検証をして見ました。そもそも認識が違う!! とかございましたら、適宜お手すきの際にご指摘いただけると幸いです。
⇒ 次のようなCSVファイルを作成しました。
="1001011101100001100",="1001011101100001100"
そのCSVファイルをダブルクリックし、EXCELに展開しますと次のように表示され ます。 <結果:セル表示> A B 1 1001011101100001100 1001011101100001100
セルA1をクリックして数式バーを見ると、「="1001011101100001100"」となって います。
但し、そのまま保存しようとすると「〜CSV(カンマ区切り)と互換性のない機能が含まれて〜」 との警告が出て、 そのまま保存すると、次のようになってしまいます。 (機能を保存するには、「いいえ」をクリックしてから、最新のExcelのファイル形 式で保存します。 とありますが、最新のExcelファイルっていったい・・・・)
保存ファイルをテキストエディタで参照してみると、
1001011101100001100,1001011101100001100
となってしまい、このCSVファイルをダブルクリックしEXCELに展開すると次のよ うになってしまいます。 <結果:セル表示> A B 1 1 E+18 1 E+18
セルA1をクリックし、数式バーで確認してみると、 「1001011101100001100」→「1001011101100000000」となりデータが削られて しまいます。
<考察> 表示するまでは正しく見えるが、表示されているデータを修正して保存して しまうと、 CSVファイルとしては使い物にならなくなってしまう・・・・・・で認識 はよろしいのでしょうか?
【daisukyさまご指摘につきまして】
テキストファイルの作成〜のご指示通り実施し、思惑通りの表示内容になることが確 認できました。ありがとうございました。
また、「再現できなかった」とご指摘がございましたが、申し訳ございません。 てこなの方で値(桁数)はあまり影響がないような気がしまして、 ご指摘を下さる方に対し少しでも負担を減らせないかと、 簡略してしまいました。事象が出てしまったケースとは異なる記載をしておりまし た。 申し訳ございません。てこなの考えが間違っておりました。
記載ケース 事象ケース 「10000000300」 → 「1001011101100001100」 でよろしければお願い致します。
お手数おかけいたしまして、申し訳ございませんでした。
以上
|