iT邦幫忙

0

excel vba 程式 從時間序列讀取各產品的資料,到另一個工作表列出各產品的最新資料、前一天、前一周、前一月、一年前資料,以及計算變動率

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20200428/201267017FzXEOo9Fs.png

各位大神請幫幫忙,謝謝

大神您好,不知道怎麼回事,只抓取第一列的資料......https://ithelp.ithome.com.tw/upload/images/20200429/20126701FjbeGGv6To.png

看更多先前的討論...收起先前的討論...
請補充三項資訊
1.你是學生還是上班族?
2.黃豆那列的數字從何而來?192.30 192.14 190.67 1 189.15 2 177.54 8
3.24-04-20 23-04-20 的日期從何而來
petercbc iT邦新手 5 級 ‧ 2020-04-28 16:45:13 檢舉
1. 上班族+學生
2. 192.30 192.14 190.67 1 189.15 2 177.54 8 這是亂key 的;主要是讀到左邊最後2020年4月24日的黃豆、小麥、玉米、稻米的資料,抓出來然後列出4月24日當天、前一天(4月23日)、前一周(7天前)、前一個月(30天前)、前一年(365天前),而且要以4月24日最新資料為基準,跟一周前的資料、一個月前的資料、一年前的資料比較,算出來4月24日跟他們比,到底是變動多少百分比。
謝謝
再請教
如果沒有該日期如何處理?
1.如果今天是 4月13日,「前一天」是 4月12日還是4月9日?
2.4/17 的前一周是4/10(沒資料), 如何處理?
petercbc iT邦新手 5 級 ‧ 2020-04-28 17:03:32 檢舉
因為資料日期是市場交易日,為了避免您提到的問題,我在想直接用4月13日往前推一個資料日期(4月9日),前一周往前推7個資料日期(4月1日),謝謝大神。
petercbc iT邦新手 5 級 ‧ 2020-04-28 17:09:24 檢舉
也就是前一天(前一筆)、前一周(前7筆)、前一個月(前30筆)、前一年(前365天筆),都以"資料筆數"來算
petercbc iT邦新手 5 級 ‧ 2020-04-29 09:50:08 檢舉
大神您好,經過測試,不知道怎麼回事,結果只抓取第一橫列的資料
改一列

```
Range("A1").Select
```
改成
```
Range("A2").Select
```
看看
petercbc iT邦新手 5 級 ‧ 2020-04-29 10:54:49 檢舉
可以了,原來如此^^,謝謝您
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-04-29 08:44:59
最佳解答

如果下圖符合你要的結果
(顏色區域為 VBA 填入資料, 無色區域需預先輸入資料/公式)
https://ithelp.ithome.com.tw/upload/images/20200429/20001787nPUlsUZ6dr.png

VBA 程式如下
自己隨意改

Sub Main()
    Dim nLastRow, nRow As Integer

    Range("A1").Select
    Selection.End(xlDown).Select
    nLastRow = ActiveCell.Row
    
    'Newest day
    nRow = nLastRow
    If nRow > 1 Then
        Range("H1").Value = Cells(nRow, 1).Value
        Range("H2").Value = Cells(nRow, 2).Value
        Range("H3").Value = Cells(nRow, 3).Value
        Range("H4").Value = Cells(nRow, 4).Value
        Range("H5").Value = Cells(nRow, 5).Value
    Else
        Exit Sub
    End If
    
    'Previous day
    nRow = nLastRow - 1
    If nRow > 1 Then
        Range("I1").Value = Cells(nRow, 1).Value
        Range("I2").Value = Cells(nRow, 2).Value
        Range("I3").Value = Cells(nRow, 3).Value
        Range("I4").Value = Cells(nRow, 4).Value
        Range("I5").Value = Cells(nRow, 5).Value
    Else
        Exit Sub
    End If
    
    '7 days ago
    nRow = nLastRow - 7
    If nRow > 1 Then
        Range("J2").Value = Cells(nRow, 2).Value
        Range("J3").Value = Cells(nRow, 3).Value
        Range("J4").Value = Cells(nRow, 4).Value
        Range("J5").Value = Cells(nRow, 5).Value
    Else
        Exit Sub
    End If
    
    '30 days ago
    nRow = nLastRow - 30
    If nRow > 1 Then
        Range("L2").Value = Cells(nRow, 2).Value
        Range("L3").Value = Cells(nRow, 3).Value
        Range("L4").Value = Cells(nRow, 4).Value
        Range("L5").Value = Cells(nRow, 5).Value
    Else
        Exit Sub
    End If
    
    '365 days ago
    nRow = nLastRow - 365
    If nRow > 1 Then
        Range("N2").Value = Cells(nRow, 2).Value
        Range("N3").Value = Cells(nRow, 3).Value
        Range("N4").Value = Cells(nRow, 4).Value
        Range("N5").Value = Cells(nRow, 5).Value
    Else
        Exit Sub
    End If
End Sub
petercbc iT邦新手 5 級 ‧ 2020-04-29 09:16:16 檢舉

謝謝您的幫忙!感激不盡

改一列

Range("A1").Select

改成

Range("A2").Select

看看

1
paicheng0111
iT邦大師 5 級 ‧ 2020-04-29 22:39:13

用INDEX+MATCH函數就可以了

我要發表回答

立即登入回答