tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルRECORDCOUNTについて
記事No15887
投稿日: 2014/04/17(Thu) 12:25
投稿者小村
いつもお世話になっております。
相変わらず初心者の小村です。
今回、VB6でエクセルのシートからレコード件数を取得しようと
色々と閲覧しながら作ってみたのですが、正しい数を取得することが
出来ません。ちなみに、エクセルのシートには、最大行数(65536行)と
K列まですべてにおいて罫線が書かれていて、その中にデータも記入
されています。(エクセルは2010、VB6.0、Windows7)
どうしたら、正しいレコード件数を取得出来るのでしょうか?

    Dim DB As DAO.Database
    Dim rs As DAO.Recordset
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True                                            'Excelを表示
    xlFileName = "D:\BOOK.XLS"      'Excelファイル名
    xlSheetName = "Sheet1" & "$" 'Excelシート名
    Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=NO;IMEX=1")
    Set rs = DB.OpenRecordset(xlSheetName)

    Debug.Print "件数="; rs.RecordCount: Stop

|-------|-------|--------|------|
| 項目1| 項目2 | 項目3 |項目4|
|-------|-------|--------|------|
| AAA   | 1111  |22222   |100   |
|-------|-------|--------|------|
| BBB   | 2222  |33333   |300   |
|-------|-------|--------|------|
|       |       |        |      |
|-------|-------|--------|------|
|       |       |        |      |
|-------|-------|--------|------|

上記のような罫線交じりのリストのデータを取得すると
なぜか732とか、わけのわからないレコード件数が取得されてしまう。
出来れば、上記のデータだと、レコード件数は2と表示して欲しい。
どうしたら、正しいレコード件数を取得できるのでしょうか?

[ツリー表示へ]
タイトルRe: RECORDCOUNTについて
記事No15888
投稿日: 2014/04/17(Thu) 15:11
投稿者YK
> いつもお世話になっております。
> 相変わらず初心者の小村です。
> 今回、VB6でエクセルのシートからレコード件数を取得しようと
> 色々と閲覧しながら作ってみたのですが、正しい数を取得することが
> 出来ません。ちなみに、エクセルのシートには、最大行数(65536行)と
> K列まですべてにおいて罫線が書かれていて、その中にデータも記入
> されています。(エクセルは2010、VB6.0、Windows7)
> どうしたら、正しいレコード件数を取得出来るのでしょうか?

こんにちは。
これはエクセルの問題です。
試しに下記コードを追加してみて下さい。

    Debug.Print "件数="; rs.RecordCount 'Stop を外す
    rs.Close
    DB.Close
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    Set xlBook = xlApp.Workbooks.Open(xlFileName)
    Debug.Print xlBook.Worksheets(Left(xlSheetName, Len(xlSheetName) - 1)).UsedRange.Rows.Count
End Sub

件数と同じ数値が表示されると思いますが。又、計算だけでなく使用済み(空白)の行もカウント
されることがあります。

該当シートをシートコピー(新規エクセルに値のみで)してそのエクセルを利用する
なんて方法があります。

[ツリー表示へ]
タイトルRe^2: RECORDCOUNTについて
記事No15889
投稿日: 2014/04/17(Thu) 15:41
投稿者小村
YK様、さっそくのアドバイス、ありがとうございます。
フォームに追加して試してみましたが、やはり結果は同じでした。
罫線がない場合は、問題なくレコード件数が表示されるのですが、
このままのレイアウト(罫線あり)ではダメなのでしょうか?

該当シートをシートコピーという方法はよくわからないので、
少し調べてみたいと思います。
自分でも調べてみますが、何かアドバイスがあれば少し教えて
頂けると嬉しいかな・・・。
今後とも、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: RECORDCOUNTについて
記事No15890
投稿日: 2014/04/17(Thu) 19:56
投稿者YK
こんにちは。
シートコピーしなくていいですね。
こんな感じで

Sub testA()
    Dim DB          As DAO.Database
    Dim rs          As DAO.Recordset
    Dim xlApp       As Excel.Application
    Dim xlBook      As Excel.Workbook
    Dim xlSheet     As Excel.Worksheet
    Dim xlFileName  As String
    Dim xlSheetName As String
    Dim xlSht       As Excel.Worksheet
    Dim clm         As Long
    Dim row         As Long
    Dim sA          As String
    
    'Excelを表示
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    xlFileName = "D:\Excel\TEST11\DAO_test.xls"        'Excelファイル名
    xlSheetName = "Sheet1"   'Excelシート名
    Set xlBook = xlApp.Workbooks.Open(xlFileName)
    Set xlSht = xlBook.Worksheets(xlSheetName)
    With xlSht
        clm = .Cells(1, .Columns.Count).End(xlToLeft).Column
        row = .Range("A" & .Rows.Count).End(xlUp).row
        sA = "$" & .Range(.Cells(1, 1), .Cells(row, clm)).Address(False, False)
    End With
    
    Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=YES;IMEX=1")
    Set rs = DB.OpenRecordset(xlSht.Name & sA, , dbOpenTable)
                                          'dbOpenDynaset ,dbOpenSnapshot
    Debug.Print "件数="; rs.RecordCount
    xlApp.Quit
    rs.Close
    DB.Close
End Sub

[ツリー表示へ]
タイトルRe^4: RECORDCOUNTについて
記事No15891
投稿日: 2014/04/18(Fri) 08:21
投稿者小村
YKさん、返事が遅くなってすみません。
ヒントどころか、完璧なソースまで作って頂き、感謝感謝です。
ちなみにこれは、エクセルのデータの最終行(桁)を調べていると
解釈すればいいのでしょうか?
まだまだ、勉強不足で100%理解出来ていませんが、このソースを
一部アレンジしたりして勉強していきたいと思います。
本当にありがとうございました。

[ツリー表示へ]