したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

CSVからXLS

1秦野の中年男性:2004/01/23(金) 09:21
いつも低レベルな質問で恐縮です。

FBASICV6.3では保存も読み込みも,CSVファイルでしか出来ない。

XLSファイルは使えないと聞きましたが、何かいい方法はありませんか

2iwakifarm:2004/01/23(金) 20:40
エクセルでcsv保存すれば、F-BASICでも読むことができます。
またexcel上でコピーすると、クリップボードからf-basicで
取り入れできます。

3ニャン子:2004/01/23(金) 22:55
こんばんわ、HDクラッシュで復旧中のニャン子です。

F-BasicでXLSファイルの操作を行う事についてですが、これは結論から言うと
無理です。仕事上、VBを使っていますがVBでもOLE Automation
という技術を使いExcelモジュールに直接リンクして操作する為、VBといえ
ども単体では出来ず実際にはExcelObjectというOLEを使用します。

で、どうしてもF-Basicから直接操作したい場合はiwakifarmさんの言われる通り
CSVファイルやクリップボードなどを経由してF-Basicに取り込みまたは書き込み
を行うか、特殊な方法としてF-Basicで書き出したデータをExcelVBAを経由して
読み込みを行い細かい指定が出来る様にするかの何れかとなります。

但し、ExcelVBAとインタフェースをとる場合は共通のデータフォーマットで
Excelのどのシートのどのレンジに対し何の操作を行うかという細かい定義を決め
た上で互いのプログラムを作成する必要があります。

この事をオブジェクト、プロパティ、メソッドで定義していきますが、F-Basic
にはこの何れも持ち得ない為、一定の関数を作成しそのシーケンスに従い個々の
オブジェクト、プロパティ、メソッドに対する操作が必要と思われます。

その他、間接的にExcelを操作する手段としてVBを経由する方法もありま
すが、これは現実的ではありませんしVBからExcelを操作する場合は
Excel側のバージョンにも左右されます。
(Excelの5.0、97、2000は全て異なるオブジェクトとなる為、簡単
には共通化する事が出来ません)

・・・ここまでするのだったら、ExcelVBAで直接プログラムを作った方が早いかも
知れませんが・・・

4ニャン子:2004/01/23(金) 23:46
再びニャン子です。

そういえば、DDE通信による操作が出来たか否か分かりませんがChigayaさんの
HPのサンプルも参考にされては如何でしょうか?

5秦野の中年男性:2004/01/24(土) 15:29
いろいろありがとうございます。
実はFbasicでデータを.csvファイルで保存することは出来たのです。
test.csvで作成したファイルを***.xlsでリンクを掛けたいのです。
たとえばFbasicで作った計算結果(test.csvのセルA2)を***.xlsのC8にリンク
させるようとすると、最初はちゃんとリンクして喜んでいると保存し再生する
とリンク先が無いとのエラーがでます。
別に複雑な式、書式等を.xlsファイルから取り込のではなく、本当に単純なtext
をリンクしただけなのですが。
現在test.csvを「名前を付けて保存」の際.xls関数で保存を選んで保存し、この
test.xlsにリンクを張っているにが現実です。
せめて***.xlsに自動的にリンクを張れる方法はありませんかる
案外エクセルの操作で可能かもしれませんが。

6ニャン子:2004/01/24(土) 16:48
ニャン子です。これはあくまでイカサマ的な対処でしかありませんが、
保存する際にExcelVBAを利用し「名前をつけて保存」、「上書き保存」、
または終了時に発生する「xxxxの変更を保存しますか」で発生するイベントを
利用し、Excel形式のファイルを保存する直前にCSVを保存するという方法も
あります。これにより保存したXLSのファイルともうひとつ、同様のCSV
データを作る事となります。

プログラム例)
<pre>
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim x As Integer
Dim y As Integer
Dim MaxRow As Integer
Dim MaxCol As Integer
Dim wkStr As String
Dim SheetObj As Worksheet
Dim FileNo As Integer
Dim FileName As String

Set SheetObj = Worksheets("Sheet1") ' 保存するシートの名前

FileName = "c:\My Documents\Test.Csv" ' 保存するCSVのファイル名
MaxRow = 50 ' 保存するシートの範囲(最大行数)
MaxCol = 10 ' 保存するシートの範囲(最大桁数)

FileNo = FreeFile
Open FileName For Output As #FileNo

For y = 1 To MaxRow
wkStr = ""
For x = 1 To MaxCol
If Not (wkStr = "") Then wkStr = wkStr & ","

wkStr = wkStr & Chr(34) & Trim(SheetObj.Cells(y, x).Text) & Chr(34)
Next
Print #FileNo, wkStr
Next

Close #FileNo

End Sub
</pre>

ただ、注意してほしい事はこのイベントがメニュー選択時や終了時にファイル名
や保存するか否かが確定する以前に発生します。この他、WorkBook_BeforeClose
というExcelが終了する直前に発生するものもありますが現実的な対処では
ありません。

上記のプログラムはExcelのメニュー「ツール」−>「マクロ」のサブメニュー
「Visual Basic Editor」を選び、プロジェクトブラウザが表示されたら
プロジェクトウィンドウの「ThisWorkBook」を選択し、上記プログラムを書き
込んでください。

7iwakifarm:2004/01/25(日) 01:15
excelでリンクを貼る場合csv(f-basicで直接書き出した場合)は
無理です。一度、excelでcsvファイルを読み込み、
xls形式で保存すれば、リンクが切れることがないと思います。
区切りはタブ区切りにすれば、セル毎に数値や文字列が入るはずです。
また、csvファイル(excelで開く)とxlsファイルを開き、=を入れて、
excelで開いたcsvシートに移り、マウスでセルを指定すればOKです。
OLEアイテムを使用すれば出来そうですが、ちょっとこの方法は
やったことがないので不明です。
いずれにせよニャン子さんが述べている直接f-basicで制御することは
不可能です。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板