iT邦幫忙

0

急~求助 Excel 特定時間抓取資料

https://ithelp.ithome.com.tw/upload/images/20181207/20102953xZt3aYnaSx.jpg
請問:不同工作表格,特定日期抓取資料
像圖上有無可能讓工作表2的A2和A4設定時間後,回傳設定時間的資料表格裡面的A和B欄位
等於工作表2的B欄位會回傳3,4,5,C欄回傳C,D,E答案

小魚 iT邦高手 1 級 ‧ 2018-12-08 08:10:56 檢舉
VBA可以做到,
因為你的數量不固定,
應該不能單純用Excel函數.
speoial iT邦新手 5 級 ‧ 2018-12-08 08:35:00 檢舉
但是我不會vba

2 個回答

3
來杯拿鐵
iT邦新手 5 級 ‧ 2018-12-08 18:30:52
最佳解答

誠如小魚所言,方法有二。

一、公式解
參考:How To Extract All Records Between Two Dates In Excel?
https://ithelp.ithome.com.tw/upload/images/20181208/20091910rC3unE5KDI.jpg

簡單版(去掉除錯功能)
N4=INDEX($H$4:$H$11,SMALL(IF(($J$4:$J$11>=$M$4)*($J$4:$J$11<=$M$5),ROW($J$4:$J$11)-ROW($J$4)+1),ROWS(M$4:M4)))

說明
函數解說是省略版,建議查官方文本
INDEX(資料來源[序號]範圍,SMALL(IF((資料來源[日期]範圍>=開始日)\*(資料來源[日期]範圍<=結束日),ROW(輸出列數)-ROW(輸出資料第一列)+1),ROWS(輸出資料[日期]第一列:該列)))

'INDEX(資料範圍,列數)取資料第n列
INDEX(資料來源[序號]範圍,
'SMALL(資料範圍,數字)取第N小的值
SMALL(
IF(
(資料來源[日期]範圍>=開始日)*(資料來源[日期]範圍<=結束日),
ROW(資料來源[日期]範圍)-ROW(資料來源[日期]第一列)+1
)
,ROWS(資料來源[日期]第一列:該列)
)
)

二、VBA

Sub getrecord()
'宣告
    Dim allt, outin As Integer
    Dim st, out, std, endd As Range
    outin = 0
    Set st = Application.Range("H4") '請設定資料來源[日期]第一格
    Set out = Application.Range("Q4") '請設定輸出來源左上第一格
    
     Set std = Application.Range("M4") '請設定開始日
    Set endd = Application.Range("M5") '請設定結束日
    allt = st.End(xlDown).Row()
    
'清除output
    If (out) Then
        Range(out, Cells(out.End(xlDown).Row(), out.Column() + 1)).Select
        Selection.Clear
    End If

'outpput
    For ti = st.Row() To allt
     comp = Cells(ti, 10).Value
         If ((comp >= std) * (comp <= endd)) Then
             Debug.Print (Cells(ti, 10))
             outin = outin + 1
             Cells(ti, 8).Copy Cells(3 + outin, out.Column())
              Cells(ti, 9).Copy Cells(3 + outin, out.Column() + 1)
                         
         End If
    Next ti
        
End Sub


speoial iT邦新手 5 級 ‧ 2018-12-08 23:55:44 檢舉

感謝

不客氣

我要發表回答

立即登入回答