[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/08/04(Fri) 15:12
投稿者名:上村
Eメール:
URL :
タイトル:
Excelデータ取込むとNullが表示される
初めて投稿させていただく上村と申します。
私はVB(VB6、WindowsXP、Excel2003)を、最近使い始めた初心者です。
以前、F-BASICは少し使ったことがあります・・・。
今回、掲示板を拝見して是非、使ってみようと思いトライしてみたのですが、
なぜかうまく取込むことが出来ません。もし、誰か分かる方がおられましたら教えて下さい。
【質問】
カテゴリ別サンプル一覧から、
”DAOを使ってExcelデータを読み込みテキストボックスに表示・他”を一部変更して処理して
みようと思いました。そしたら、Excelのデータ上には、きちんと値が表示されているのに
なぜか、Null(.Fields(17)(18)両方とも)が表示されてしまいます。(下記プログラム参照)
 MyData = MyData & .Fields(16) & vbTab & .Fields(17) & vbTab & .Fields(18) & vbCrLf
ただ、上記プログラム内の ”.Fields(17)” は、他のシートからデータを取込んでます。
※Excel上での.Fields(17)は、”アイウC”が表示されてます。

但し、他のやり方でデータを取込むときちんと取込めます。例えば、
 MYEXCEL.Worksheets("1").Range("A17").Value
このやり方だと非常に不便なので、是非、質問のやり方で取込める方法を知ってる方が
おられましたら、教えて下さい。
よろしくお願いします。

投稿時間:2006/08/04(Fri) 15:52
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excelデータ取込むとNullが表示される
> カテゴリ別サンプル一覧から、
> ”DAOを使ってExcelデータを読み込みテキストボックスに表示・他”を一部変更して処理して
どこをどのように変更したのですか?

> みようと思いました。そしたら、Excelのデータ上には、きちんと値が表示されているのに
> なぜか、Null(.Fields(17)(18)両方とも)が表示されてしまいます。(下記プログラム参照)
どのようなデータですか? 同一列上に文字列データと数値データが混在していませんか?

>  MyData = MyData & .Fields(16) & vbTab & .Fields(17) & vbTab & .Fields(18) & vbCrLf
> ただ、上記プログラム内の ”.Fields(17)” は、他のシートからデータを取込んでます。
> ※Excel上での.Fields(17)は、”アイウC”が表示されてます。
どのようなデータをどのように取得しているのか解らないと何とも...。

元々のサンプルのデータと方法では確認されたのでしょうか?

投稿時間:2006/08/04(Fri) 16:10
投稿者名:上村
Eメール:
URL :
タイトル:
Re^2: Excelデータ取込むとNullが表示される
花ちゃんさん、さっそくの返事ありがとうございます。
確かに、説明不足で申し訳ございませんでした。
うまく説明できないかもしれませんが、回答したいと思います。


> > ”DAOを使ってExcelデータを読み込みテキストボックスに表示・他”を一部変更して処理して
> どこをどのように変更したのですか?

 xlFileName = App.Path & "\Sample.xls" ⇒ xlFileName = "D:\vb_6\Sample\" & "1.xls"
  xlSheetName = "Sheet1" & "$" ⇒ xlSheetName = "記録書" & "$"

> > なぜか、Null(.Fields(17)(18)両方とも)が表示されてしまいます。(下記プログラム参照)
> どのようなデータですか? 同一列上に文字列データと数値データが混在していませんか?

 同一列上には、文字列、数値、空白が混在しています。


> どのようなデータをどのように取得しているのか解らないと何とも...。

    Dim MYEXCEL As Object
    Dim DTX(50) as string
    Set MYEXCEL = CreateObject("excel.application")
    MYEXCEL.Workbooks.Open "D:\VB_6\SAMPLE\1.xls"

    DTX(0)=MYEXCEL.Worksheets("記録書").Range("E5").Value
  debug.pring "DT=";DTX(0)

    MYEXCEL.Application.DisplayAlerts = False
    MYEXCEL.Application.Quit
    このような方法で取得するとデータを取込めるのですが・・・。
  ※デバッグに文字列が表示される


> 元々のサンプルのデータと方法では確認されたのでしょうか?

 サンプルに関しては、記載の通りテキストボックス等も準備して確認しました。
 これに関しては、バッチリうまく出来ました。
 それで、一部(ファイル名、セル位置等は変更した)を変更して処理してみました。
 そしたら、うまく取込める箇所もあるけど、Nullが表示されてしまう箇所も多々ありました。
 もし、私のプログラムが間違ってる、書き方が違うと思ったら教えて下さい。

  Dim DB     As DAO.Database
  Dim RS     As DAO.Recordset
  Dim xlFileName As String
  Dim xlSheetName As String
  Dim MyData   As String

  '読込用のExcelファイル(パスを間違えないように)
  xlFileName = "D:\vb_6\sample\" & "1.xls"
  xlSheetName = "記録書" & "$"
  'データベース(xlFileName)のオープン(HDR=NO で項目を読込まない)
  Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=NO;")
  'Recordsetオブジェクトのオープン
  Set RS = DB.OpenRecordset(xlSheetName)
  '末尾レコードまでのデータを読込
  Do Until RS.EOF
    With RS
    'A列・B列・C列のデータを取得
      MyData = MyData & .Fields(17) & vbTab & .Fields(18) & _
                     vbTab & .Fields(19) & vbCrLf
      .MoveNext     '次のレコードに移動
    End With
  Loop
  '取得したデータをテキストボックスに表示
  Text1.Text = MyData
  RS.Close
  DB.Close
  Set RS = Nothing
  Set DB = Nothing

投稿時間:2006/08/04(Fri) 16:38
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Excelデータ取込むとNullが表示される
>  同一列上には、文字列、数値、空白が混在しています。
だったら、そのように表示されます。
文字列に数値が混じっていたら数値のデータは空白で表示されます。


下部の注意書きにかいてあった http://hanatyan.sakura.ne.jp/vbhlp/daoexcel.htm を
見て下さると解るかと思うのですが下部の部分を変更して色々試して見て下さい。
>   Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=NO;")

    Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=YES;IMEX=1")
又は
   Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=NO;IMEX=1")

投稿時間:2006/08/04(Fri) 18:04
投稿者名:上村
Eメール:
URL :
タイトル:
ありがとうございます
花ちゃんさん、回答ありがとうございました。
さっそくやってみます。

来週になるかと思いますが、また結果を報告します。

投稿時間:2006/08/07(Mon) 09:16
投稿者名:上村
Eメール:
URL :
タイトル:
出来ました
花ちゃんさんへ

アドバイス、ありがとうございました。
実践したみたところ、うまく取込むことが出来ました。
私の注意不足で、詳しく読まずに処理してしまったことを深く反省致します。
今後は、注意深く読んでからトライし、それでも対応できない場合は質問させて
頂きたいと思いますので、今後ともよきアドバイスの程、お願い致します。
当たり前のことですが、自分で徹底的に調べてから質問するように心がけますので
よろしくお願いします。