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

VBAで以下のコードを使い、「T_MAS」テーブルから「IDNO」, 「STATUS」, 「DATE」のフィールドをエクセルシートに取り込んでいます。
これは私の前任者が作成したもので、それに私が「DATE」のフィールドも追加するために作っている作りかけです。


Public Sub DB読込()
Dim i%, SQL$, vRow%
Dim vL&, vS$

SQL = "SELECT IDNO, STATUS, DATE"
SQL = SQL & " FROM T_MAS"


Call DbOpen

With Sheet2
vRow = 2
.Range(.Cells(vRow, 4), .Cells(vRow + 15000, 5)).ClearContents
.Range(.Cells(vRow, 4), .Cells(vRow + 15000, 5)).ClearContents

Set Rs.ActiveConnection = Conn
Rs.Open SQL, Conn
For i = 1 To 2 Step 0
If Rs.EOF Then Exit For
vL = IIf(IsNull(Rs![IDNO].Value), 0, Rs![IDNO].Value)
.Cells(vRow, 4) = vL
vS = IIf(IsNull(Rs![Status].Value), 0, Rs![Status].Value)
.Cells(vRow, 5) = vS
vT = IIf(IsNull(Rs![DATE].Value), "", Rs![DATE].Value)
.Cells(vRow, 6) = vT
Rs.MoveNext
vRow = vRow + 1
If vRow > 100 Then Exit For
Next i
Rs.Close
Set Rs = Nothing
End With

Call DbClose

End Sub


「IDNO」は6桁の数字です。
「STATUS」は1~9の数字です。
「DATE」は2023/02/21といった日付です。
DbOpenとDbCloseは別コードを使用しています。


①これらに2つ条件を付けたいのです。
「DATE」は2021年から2023年までの間
「STATUS」は数字の3に絞ったものを読み込みたいです。

2データ量は数万になりますがそのまま読み込むとオーバーフローになります。
If vRow > 100 Then Exit For を挿入していますが、実際は全てのデータが必要です。
このオーバーフローを出さない対策もしたいです。

お詳しい方教えてください、宜しくお願い致します。

A 回答 (1件)

2の方は、


vRow%



vRow&

変数の宣言の型を変更する。
https://pulogu.net/blog/020-computer/excel-vba/e …

ところで
.Range(.Cells(vRow, 4), .Cells(vRow + 15000, 5)).ClearContents
.Range(.Cells(vRow, 4), .Cells(vRow + 15000, 5)).ClearContents
何故同じ物が?
もしかして
.Range(.Cells(vRow, 4), .Cells(vRow + 15000, 6)).ClearContents
3列に対して行ないたいならセルを左上,右下で指定すれば1行で済みます。
ただし連続している場合ですけど。
    • good
    • 0
この回答へのお礼

ありがとうございます!
2の部分が解決できました、他の部分も自力で何とか形になりました。
ちなみに同じものはコピペミスです、、すいません。

お礼日時:2023/02/26 09:41

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