- ベストアンサー
VB6 ADOでアクセスの時刻をエクセルに渡したい。
アクセスに時刻のフィールドがあります。全部埋まっているわけではなくて、空白のセルもあります。これをレコードセットに格納してエクセルに貼り付けるのですが、rst.Fields.Append "時刻", adVarChar の様に文字列型に指定して貼り付けるとエクセルの方で時刻として認識してくれません。予め書式を時刻にしておいてもだめです。またadDBTime の様な時刻型を使うと時刻はうまくいくのですが、空白("")が格納できません。どうしたらよいのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以下のサイトなどを参考にしてください _____________________________________________________________ @IT > Windows Server Insider > 基礎解説 > チェック式WSH入門 第5回 http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh05/cformwsh05_05.html _____________________________________________________________ ほか Google で キーワード 「Null "" Empty 」 「」内を指定して検索すれば たくさんのサイトが見つかると思います。 以上
その他の回答 (2)
- NOBNNN
- ベストアンサー率50% (93/186)
No1 の追記 ACCESSのテーブルの値で時刻が空、つまりNull の場合は Nz関数を用います。 Nz(時刻項目) で Null が Empty になります。 さらにスペースも考慮するなら Trim(Nz(時刻項目)) でOKです。 ただし Nz関数はAccess のクラスですので VB6 で使用するには 参照設定の追加(Microsoft Access 9.0 Object Liblry) を行ってください。 もし、上記以外の方法で Null を排除するなら Isnull関数 で 時刻項目の文字列の内容を判定してEmpty 設定してください。 例) If Isnull(時刻項目) then Range("A1").value = empty else endif 以上を考慮してプログラムを作成してください。
お礼
回答ありがとうございます。"" の代わりにEmpty を使ったらうまくいきました。Null, "", Empty これらの違いがよく分からないです。 ところで、大変申し訳ないのですが方針転換することにしました。 エクセルに書き込む方はレコードセットを使わないでfor~next を使い、直接(Row,Col)を指定して書いていく事にしました。この方が遙かに細かい編集加工できますので。こうするとスピードはかなりおちますが、せいぜい数十行しかないので問題ないです。
- NOBNNN
- ベストアンサー率50% (93/186)
文章だけではプログラムの提示がないと内容がわかりません。 なるべく理解しやすいような掲示をするようにしましょう。 ______________________________ 実験プログラムを書いてみましたので以下を参考にしてください。 用意するもの MS Access 、MS Excel 以下の内容でテーブルを作成してください。 テーブル名: テーブル1 項目名 Id : オートナンバー型 時刻 : 日付時刻型 データはあらかじめ次に用に入力してください。 ID 時刻 1 2006/04/02 22:55:53 2 2007/04/11 22:56:08 フォームは以下のように作成してください。 フォーム名:フォーム1 ボタンを追加してください。 ボタンの名前は「実行ボタン」 ______________________________________________________________ プログラム(Access VBA) 以下のコードを フォーム1のVBAに貼り付けてください。 Option Compare Database Private Sub 実行ボタン_Click() Dim db As database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("select * from テーブル1", dbOpenDynaset) Dim xlApp As New Excel.Application Dim XLbook As New Excel.Workbook Dim XLsheet As New Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set XLbook = xlApp.Workbooks.Add Set XLsheet = XLbook.Worksheets(1) XLsheet.Range("A1").Select 'エクセルを表示します。(表示しなくてもOK) xlApp.Visible = True For i = 0 To rs.Fields.Count - 1 Debug.Print rs.Fields.Item(i).Name Next rs.MoveFirst For i = 1 To rs.RecordCount With XLsheet .Cells(i, 1).Value = rs.Fields.Item(0) .Cells(i, 2).Value = Format(rs.Fields.Item(1), "yyyy/mm/dd hh:mm:dd") End With rs.MoveNext Next XLsheet.Columns("A:B").EntireColumn.AutoFit End Sub ____________________________ 上記のプログラム中で Format関数を用いているのですが これをFormat関数なしで実行すると おそらく date型のそのまま の値ではいります。 一端、Format関数で文字列に整形してから貼り付けてください。 それから セルに "" 空文字を入れる場合は Empty 関数を用います XLSHEET.Range("A1").value = empty でOKです。 質問の回答として妥当かどうかわかりませんが もし、間違っているようでしたら具体例ほか プログラムを掲示してください。 実際のプログラムではなく サンプルとして例を書いてください。 以上
お礼
ありがとうございました。参考のサイト分かり易かったです。