iT邦幫忙

0

VBA 2個日期範圍查詢

https://ithelp.ithome.com.tw/upload/images/20190521/201144362t4dxdcNhQ.png

'請問我程式這樣寫卻沒反應
 Dim datestar, dateend As String  '定義2個字串變數
 lastrow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1  '最後一行
 Worksheets("異動檔資料").Activate   '指定工作表
   datestar = InputBox("要查詢開始日期的資料")  '輸入值給變數1
  For j = lastrow To 2 Step -1    '迴圈
  Val (datestar)  '把輸入的字串轉成數字
   If datestar < Cells(j, "D") Then  '判斷小於開始日期
       Rows(j).Delete    '若判斷成立就刪除
    End If
   Next      '下一個
  dateend = InputBox("要查詢結束日期的資料")   '輸入值給變數2
  For j = lastrow To 2 Step -1   '迴圈開始
  val (dateend)    '把輸入的字串轉成數字
   If Cells(j, "D") > dateend Then    '判斷大於結束日期
      Rows(j).Delete            '若判斷成立就刪除ˊ
    End If
   Next   '下一個!
假如我輸入開始日期為2019/1/5及結束日期為2019/1/20
那個第一行跟第二行的資料應該會被刪除  卻沒有刪除
我這樣寫  哪裡不符合  請高手指教  謝謝
goodnight iT邦研究生 4 級 ‧ 2019-05-21 13:43:41 檢舉
程式改這樣就可以了
Dim datestart as variant, dateend as variant
lastrow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1
Worksheets("異動檔資料").Activate '指定工作表
datestar = InputBox("要查詢開始日期的資料") '輸入值給變數1
dateend = InputBox("要查詢結束日期的資料") '輸入值給變數2

datestar = datevalue(datestar) '把輸入的字串轉成數字
dateend = datevalue(dateend) '把輸入的字串轉成數字

For j = lastrow To 2 Step -1 '迴圈
If datestar < Cells(j, "D") OR Cells(j, "D") > dateend Then '判斷小於開始日期
Rows(j).Delete '若判斷成立就刪除
End If
Next '下一個!
多謝 不過想知道為甚麼定義那行
我一開始定義成整數的變數
VBA告訴我型態錯誤
我才把他改成字串再轉數字
他沒反應是為何

1 個回答

1
paicheng0111
iT邦研究生 1 級 ‧ 2019-05-21 12:43:32
最佳解答
Dim datestart as variant, dateend as variant
 lastrow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1  
 Worksheets("異動檔資料").Activate   '指定工作表
   datestar = InputBox("要查詢開始日期的資料")  '輸入值給變數1
  For j = lastrow To 2 Step -1    '迴圈
  datestar = datevalue(datestar)  '把輸入的字串轉成數字
   If datestar < Cells(j, "D") Then  '判斷小於開始日期
       Rows(j).Delete    '若判斷成立就刪除
    End If
   Next      '下一個
  dateend = InputBox("要查詢結束日期的資料")   '輸入值給變數2
  For j = lastrow To 2 Step -1   '迴圈開始
  dateend = datevalue(dateend)    '把輸入的字串轉成數字
   If Cells(j, "D") > dateend Then    '判斷大於結束日期
      Rows(j).Delete            '若判斷成立就刪除ˊ
    End If
   Next   '下一個!
看更多先前的回應...收起先前的回應...

多謝 不過想知道為甚麼定義那行
若我一開始定義成整數的變數
VBA告訴我型態錯誤 我才把他改成字串再轉數字

paicheng0111 iT邦研究生 1 級 ‧ 2019-05-22 08:36:44 檢舉

因為Inputbox()的回傳為String型態,你用整數型態的變數去接會裝不下。

我知道了 第二個問題是我有設定字串轉數字 為何他沒辦法把日期的字串轉成日期的數字(46xxxx)的值
謝謝再指教唷

paicheng0111 iT邦研究生 1 級 ‧ 2019-05-22 13:30:37 檢舉

再次感謝

paicheng0111 iT邦研究生 1 級 ‧ 2019-05-23 22:59:07 檢舉

記得選我為最佳

我要發表回答

立即登入回答