プロが教えるわが家の防犯対策術!

VBでExcelを読み込こむ処理をしているのですが、指定の行から最終行までの各データを取得できる書き方を教えて頂きたくご質問しました。

■現在のコード(取得時)
dtCmd.CommandText = "SELECT * FROM [" & SheetName & "$A3:V3377] "

dtCmd・・・OledbCommand
SheetName ・・・シート名

上記でも読み込みは出来るのですが、これだとA3:V3377の範囲しか取得できず
もし範囲外のデータが来たときは、当然ですが読み込みできません。

これをどんな数のデータが来ても、ちゃんと最終行までを判断し、読み込んでくれるようにしたいです。

お手数ですがよろしくお願いいたします。

A 回答 (6件)

>Excelの読み込み時は、VBAと書き方は変わらないですかね??



先にも記載しましたが同じように書くとトラブルの原因にもなりかねません。
基本違うものと考えた方が良いとは思います。(それでもVC#で書くよりはVBAに近いかもですけど)
    • good
    • 0

Office(のHDD)がぶっ飛んで再起不能状態なので検証は出来ませんが。



CSVファイルなどに変換は不可能なのでしょうか?
可能ならその部分はVBAでサンプルも見つかるでしょうしこっちが楽だと思います。
    • good
    • 0
この回答へのお礼

なるほどですね。

それがCSVに変換できないデータでして...

Excelの読み込み時は、VBAと書き方は変わらないですかね??

お礼日時:2020/08/26 17:00

ならば6000行固定でも宜しいのでは?


ほぼ出来上がっての質問なら、一度お試しを
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ちょっとデバックしてた際に、致命的な設計バグが見つかったので、DataTableに格納する方法は今回は避けたいと思います。

Excelを読み込む際に、1行ずつ読んで、空白時が見つかったらそこで処理を辞めるという方法に切り替えようと思ったのですが、そちらの方法で何かアドバイスを頂くことは可能でしょうか?

急で申し訳ありません...

お礼日時:2020/08/26 16:20

No.2です。



シートの最終行を取得するにはExcelブックを開いてって事になりますが、それならそもそもの ADODB 等による接続~データ取得って必要なくなるのでは?
それに書き方については特に閉じた後の変数の解放が重要になるかもですが、そこは宣言と合わせてVBAで作成する物とはレベルが違うんじゃないかと初級者は感じました。
まぁ、古いバージョンでやってたので今のバージョンでは楽に出来るって事での話でしょうけど。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

目星ですが、だいたい4000~5000行くらいで、1万行はいかないと思います。

あとDataTableに格納する方法を取ってますので、接続~データ取得は処理は外せないかなと思っています...

お礼日時:2020/08/26 11:17

ところでExcel側にあるデータ行数っておおよその目星は立たないのでしょうか?


例えば1万行とか10万行とか。

別に指定した範囲より実際のデータ行数が少なかったとしても取り込みには問題にならないと思うのですが。
仮になったとしても WHERE句でとあるフィールドが空白でない場合とか指定しておけば宜しいのではないかと。
    • good
    • 0

シートの最後の行から上に検索して、データを見つけた行を最終行とする。



  1,048,576行目から上にデータが存在するセルを検索。

これ、とてもポピュラーな方法ですので、インターネット上を検索すると具体的なコードまで知ることができます。
試しに検索すると良いでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

調べてみると、結構VBAでの記事が多く出てくるのですが、書き方は同じなのでしょうか?

お礼日時:2020/08/25 16:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A