こんにちは。CSVファイル(1レコード9項目、平均50レコード)を何らかのオブジェクトに格納し、各レコードの項目を編集・一括更新を行う方法はないか、現在模索しております。以前のスレッドではOLEのエンジンを使用してCSVファイルを模擬的にDBとしてデータグリッドに表示させる方法を確認し、試行しましたが、編集できない&レコード読み飛ばしができないなど、不都合があったため、改めて質問させていただきました。一番思いつくのは、テキストボックスを2次元に並べて、コマンドボタンで一括保存などがありますが、コントロール数やオブジェクト数にも配慮した方法がありましたら、お教えください。
No.7ベストアンサー
- 回答日時:
>VBソフト側では表示のみで、編集を市販のアプリケーションに頼るのはちょっとかっこ悪いですよね・・・
あまり気にしませんが…
費用対効果もありますし、苦労してVBで作っても、ユーザーから"EXCELの方が使いやすい"と言われればそれはそれでかっこ悪い気もします。
ERPでも、EXCELへの出力/入力はありますよ。
修正内容・修正頻度などにもよると思うので一概にはいえませんが、
修正が一点一様であればEXCEL+VBA
修正がパターンかできるならACCESSや、VB+DBGRID
修正が毎回同じならVBで自動化
とか
EXCEL側をVBAで作りこむというのも選択肢としてあっても言いと思います。
[CSV読み込みボタン]で読み込んで、ヘッダーはVBAでセット。
異常値のチェックもVBAで仕込む。
[CSV書き出しボタン]で書き込み。
書き込み後VBアプリの起動というのもできます。
VBから、[EXCELで修正するボタン]で
・CSVデータ作成
・EXCELの起動
・EXCEL起動時にCSVを自動読み込み
とか連携をするとかっこ悪くはないと思います。
とりあえず、そんな考えもありますよ、ということで。
palmmyさん、具体的な運用を提示いただき、大変ありがとうございます。正直言って、"VBAがあったかぁ"という心境です・・・VBソフトをインストールするパソコンにはOffice製品は入ってないのですが、ユーザ個々の端末では使用されているかもしれません。仰るとおり、一つの選択肢(ユーザへの提案)として、熟慮してみたいと思います。ありがとうございました。
No.8
- 回答日時:
#5です。
お礼に書かれていた質問についての解答です。
ストアドプロシージャはオラクルでは組むことができますが、MSアクセスでは残念ながら無理です。
ストアドとはPL/SQLで、ある程度のブロックを関数化したようなものです。
Cと同じ位の実行速度が出ますので、処理速度も速いです。
一度作ってしまえば他のPGでも流用ができるので重宝します。
tak2003さん、説明ありがとうございます。ストアドってAPIみたいですね。オラクルで組むんですかぁ・・・大規模システムなどで発行する共通関数などに使われてそうですね。ちょっと敷居が高いやり方ですが、関連サイトを調べてみます。ありがとうございます。
No.6
- 回答日時:
>OLEを使用する、ということでしょうか?
いえ、VBではなくACCESSやEXCELでCSVを読んで、そこで修正しCSVにもどしては?というご提案です。
ユーザーが使用するアプリでデータの修正を任意に行なうのであればVBにこだわることも無いのかな、と思ったので。
palmmyさん、再度ご回答ありがとうございます。実は現時点で(1)Excel上での編集・保存(2)VBソフト上での編集・保存の2通りの方法を要求されていて、(1)は先頭レコードをヘッダ代わりにして各カラム(項目)の説明(入力値の範囲など)を記述しすることで、実機以外でのデータ編集方法がユーザレベルで理解可能にしてあります。しかし、やはり使い勝手を考えると、編集対象のCSVファイルは上記のVBソフトで運用するので、VBソフト側では表示のみで、編集を市販のアプリケーションに頼るのはちょっとかっこ悪いですよね・・・
No.5
- 回答日時:
CSVファイルを一度DBに落としてDBで問い合わせや削除などを行なった方が楽だと思います。
以前に組んだシステムでは、
CSVから直接データを1件ずつ取ろうとしていたのですが、2000件を超えたあたりから時間がめちゃくちゃ掛かる事に気がついて、DBで一括管理に変わりました。
CSVファイルを必要な分だけ先にDBに読ませて、加工後にCSV出力する方がいいんではないでしょうか?
1件ずつファイルを読んで加工して出力を繰り返したら、プログレスバーが止まってしまいます。
VBよりもSQLの方が簡単で高速なので、(ストアドなど)
お勧めです。
データグリッドはOCXを使ったので苦労はあまりなかったですよ。(画面制御でフォーカスが悪戯される不具合はありました。)
tak2003さん、再度ご回答感謝いたします。データグリッドにこだわった場合、仰るとおりCSVファイルを一括読出し->mdbへレコード格納->mdbをデータグリッドへ連結がベストなようですね。表示する項目に、CSV内部は0-3の数値で、意味が"しない""する"などになっている箇所があり、グリッドのヘッダにこの数値説明を記述し、編集可能とする方法も考えてます。余談になってしまいますが、Accessでストアドを持つことは可能なんでしょうか?ストアドそのものの知識も乏しいので、どういうことができるのか分かりません・・・
No.4
- 回答日時:
こんばんは
ぼくがよくやる方法をひとつ。
テキストボックスを2次元に並べてはそのままですが、50行も並べるとコントロールの数だけでたいへんなことになってしまいます。
一度に表示するのを仮に10行としたら、9×10のテキストボックスを並べて、横にスクロールバーを10行分の高さで配置しておきます。
CSVのデータは2次元配列なり構造体なりに入れてあげます。レコードの移動削除を考えると構造体の方があとあと楽ですよね。ここでは仮に[Array(49)]とします。
実際にデータをテキストボックスに表示する方法-----------
レコードが10を超えたら、レコード数-10をスクロールバーのMaxプロパティに入れてあげます。
テキストボックスに表示するのは専用のプロシージャ(仮に[hyouji]とします)で行い、引数が[3]なら[Array(3)]から1行目に表示、以下10行目まで繰り返します。
スクロールバーのチェンジイベントで、[hyouji] プロシージャにスクロールバーのValueを渡してあげれば、見えていなかったデータを表示します。
※注意点---------------------------------------
●データを表示するのに配列の存在しないインデックスを指定しないよう適宜対応してください。
●テキストボックスの位置を動かすわけではないので、スクロール時の動作感は、いまいちです。
※利点------------------------------------------
●コーディングが割りと簡単です。
●標準コントロールだけでできます。
freezemoonさん、ご回答ありがとうございます。名案ですね!実はCSVファイルレコードの項目に、0から3までの値を"する"、"しない"などの選択肢に使ってコンボ化したかったので、コントロール配列数が10くらいで収まれば、これも可能になりそうです。注意書きも大変助かります。スクロール時の見映えのみ気にしなければ、何とかいけそうです。
No.3
- 回答日時:
50行9列程度なら
フレキシブルグリッドが使えると思います。(VB6の場合)
CSVファイルをOpenして1行ずつ読込、
Spritで各項目に分けてグリッドに格納します。
編集はTextBoxを使った裏技で行います。(詳細は検索してください)
編集が終了したら同じファイル名で上書きします。
Hayashi Trekさん、ご回答ありがとうございます。実は現状でフレキシブルグリッドに読み取り専用で表示させています。恐らくクリックされたセルをテキストに転送するのですね?ロジックも非常に簡単にできそうなので、切り札としてとっておこうとおもいます。
No.1
- 回答日時:
DBは持っているのでしょうか?
とりあえずDBにデータを蓄積してSQLで管理するのが、
いいと思います。
その後、DBから構造体でデータを取ってきて、そのままCSVに出力したら良いのではないでしょうか?
tak2003さん、ごかいとうありがとうございます。DBはACCESSしかありません・・・しかも表示の元ネタはかならずCSVファイルでなければいけません・・・CSVファイルの内容を表示する過程で、一度MDBファイルに落としてグリッドへ関連付けるやり方も考えています。この場合、速度面では劣ってしまうのでしょうか?実はCSVファイルをリストから選択し、リアルタイムで各ファイル内容の表示切替を行っています(意外と肝心なことをお伝えしてませんでした)恐らくここで表示ラグがあるかも・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- その他(Microsoft Office) VBA CSV出力について 3 2023/04/19 14:14
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Word(ワード) PCで作ったwordをスマホで編集しようとすると「このファイルは読み取り専用です。」と表示される。 3 2023/05/30 14:51
- 画像編集・動画編集・音楽編集 inkscapeで作成した図の保存の仕方とその保存したファイルの編集の仕方 1 2022/09/22 09:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ReadLineでの読み出し行を指定する
-
ExcelをCSV書き出す場合のシー...
-
Perlの変数に文字数制限(容量...
-
VBAで巨大なファイルの途中から...
-
VBAでCSVファイルを途中行まで...
-
エクセルマクロについて CSVフ...
-
Perl Vlookupみたいに
-
エクセルVBA コードが同じでも...
-
csvファイル改行コードの置換に...
-
複数のCSVを読み込み、一つにま...
-
他のサーバーにあるファイルの...
-
VBAでCSVファイルの特定行を書...
-
perlで、後ろの行を読んで、前...
-
ファイルとデータベースについて
-
cgiで表示するhtmlページ内でバ...
-
fopenでディレクトリ内の全ファ...
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
教えて!perlから.exeファイル...
-
MySQLに画像を格納してperlで取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
VBAで巨大なファイルの途中から...
-
ReadLineでの読み出し行を指定する
-
perlで、後ろの行を読んで、前...
-
JavaでCSVファイルを高速に読む...
-
MATLAB グローバル変数の宣言
-
perlにて2つのファイル比較
-
C言語でのファイルのデータ更...
-
拡張子 ”log” と ” dat” の違い
-
ADOによるCSVファイルからのデ...
-
VB6.0でDB接続する際に切断時の...
-
2つのCSVファイルをマッチング
-
Perlの変数に文字数制限(容量...
-
perlで容量の大きいCSVファイル...
-
データファイルをプロットする(...
-
Perl Vlookupみたいに
おすすめ情報