標題:
[發問]
請問能否指定某欄位只抓最新欄位的數據?
[打印本頁]
作者:
997531
時間:
2015-1-29 11:05
標題:
請問能否指定某欄位只抓最新欄位的數據?
請問能否指定某欄位只抓最新欄位的數據?
例如:讓 I2 因A:A日期的變動,而跟著H:H的數量自動更新?
[attach]20149[/attach]
作者:
p212
時間:
2015-1-29 11:17
回復
1#
997531
儲存格I2輸入
=OFFSET($H$1,COUNT($H:$H),)
請參考!
作者:
997531
時間:
2015-1-29 13:13
回復
2#
p212
非常感謝!
對我這種沒學過Excel的新手來說,
這個論壇真是一個很棒的地方。
能讓我學到很多新的公式!
作者:
997531
時間:
2018-8-8 18:47
首先,
先感謝P212大大當初提出的公式,
這三年來應用的很方便。
甚至已把公式改為由工[作表二]讀取[工作表一]
=OFFSET(庫存!$H$2,COUNT(庫存!$H:$H),)
但是...
現在遇到新的問題。
現在要在表二讀取表一裡F欄[出貨數量]的最新一列,
但是因為中間有空白儲存格的關係,
所以會造成上面的公式產生錯誤。
請問各位大大有其他的解法嗎?
作者:
a5007185
時間:
2018-8-8 21:32
有範本嗎?!
作者:
997531
時間:
2018-8-9 09:35
回復
5#
a5007185
[attach]29182[/attach]
上面這個是範本
目前遇到的問題是,
在[庫存表]這工作表沒辦法用=OFFSET公式,
去讀取[登記表]裡的"進貨"及"領用"數量。
作者:
a5007185
時間:
2018-8-9 11:34
回復
6#
997531
目前我想到的最佳解必須開啟巨集,
首先你先按下列步驟開啟開發者模式,
https://ppt.cc/fU3nhx
然後將下面這段程式碼貼在模組中。
Function RowLastData(SheetName As String, PT As Range)
RowLastData= Sheets(SheetName).Cells(Cells.Rows.Count, PT.Column).End(xlUp)
End Function
複製代碼
[attach]29184[/attach]
這個是自創函數,
主要功能是回傳該儲存格所屬的欄位中最後一筆的資料
RowLastData(工作表名稱,儲存格)
例1:RowLastData("登記表",登記表!F3)="10800"
即代表在「登記表」這個工作表中,與「登記表!F3」相同的欄位「F」最後一筆的資料是「10800」
例2:RowLastData("庫存表",登記表!D3)="A20"
即代表在「庫存表」這個工作表中,與「登記表!D3」相同的欄位「D」最後一筆的資料是「A20」
[attach]29185[/attach]
作者:
997531
時間:
2018-8-9 13:44
回復
7#
a5007185
剛剛下了您修改過的版本試了一下,
我發現不會跟著登記表變更數量耶???
是我操作有問題,
還是這巨集只能抓特定的儲存格?
作者:
a5007185
時間:
2018-8-9 14:12
回復
8#
997531
請將VBA函數增加這行「Application.Volatile」
更改後如下。
Function RowLastData(SheetName As String, PT As Range)
Application.Volatile
RowLastData = Sheets(SheetName).Cells(Cells.Rows.Count, PT.Column).End(xlUp)
End Function
複製代碼
詳細請參考這篇文章
http://club.excelhome.net/thread-176669-1-1.html
作者:
准提部林
時間:
2018-8-9 14:13
B3:
=IFERROR(LOOKUP(9E+307,OFFSET(登記表!$A:$A,,MATCH(A3,登記表!$1:$1,))),0)
B15:
=IFERROR(LOOKUP(9E+307,OFFSET(登記表!$A:$A,,MATCH(A15,登記表!$1:$1,)+1)),0)
E15:
=IFERROR(LOOKUP(9E+307,OFFSET(登記表!$A:$A,,MATCH(D15,登記表!$1:$1,)+2)),0)
作者:
a5007185
時間:
2018-8-9 16:18
回復
10#
准提部林
准提大大,
謝謝你回饋的意見,
想跟你請教一下「9E+307」這是什麼意思?有什麼用意?
謝謝!
作者:
准提部林
時間:
2018-8-9 16:29
本帖最後由 准提部林 於 2018-8-9 16:31 編輯
回復
11#
a5007185
極大數, 比工作表中任一數值都要來得大就可以,
這樣肯定會去抓最後一個[位置]的數值(不一定是最大數值)
若範圍中沒有任何數字, 會回N/A, 所以要用IFERROR屏敝錯誤值
作者:
a5007185
時間:
2018-8-9 16:48
回復
12#
准提部林
實在太感謝你了!
又學到了一課!
如果 LOOKUP 函數找不到 lookup_value,
就會比對 lookup_vector 中小於或等於 lookup_value 的最大值,
所以設一個極大的lookup_value。
https://support.office.com/zh-tw/article/lookup-%E5%87%BD%E6%95%B8-446d94af-663b-451d-8251-369d5e3864cb
另外確認一下 B3的函式是不是這樣設定會更準確?
=IFERROR(LOOKUP(9E+307,OFFSET(登記表!$A:$A,,MATCH(A3,登記表!$1:$1,)+3)),0)
複製代碼
作者:
准提部林
時間:
2018-8-9 17:21
回復
13#
a5007185
如果是抓H欄[庫存]就沒錯+3~~
作者:
997531
時間:
2018-8-10 20:10
回復
14#
准提部林
先謝謝兩位大大的幫忙,
目前還在做各種測試中。
本來是想做些變化,
可惜基礎真的太差...
花了快2個多小時才發現,
原來我把A02後面加上廠商名稱,
所以導致錯誤...
而從下午4點多卡到現在,
又是另一個問題了。
主管問我怎麼沒在"庫存表"顯示"登記表"裡E欄異動當日的數量...
目前套用之前學過的公式不是顯示[10800]就是顯示錯誤,
最新日期7月31日那右列的[0]就是顯示不出來。
作者:
准提部林
時間:
2018-8-10 20:27
回復
15#
997531
抓D欄[取後一個日期], 對應E欄值:
=IFERROR(LOOKUP(9E+307,OFFSET(登記表!$A:$A,,MATCH(A3,登記表!$1:$1,)-1,,2)),0)
作者:
997531
時間:
2018-8-10 20:45
回復
16#
准提部林
感謝准提部林大大,
老實說我爬文跟測試弄了4個多小時了。
雖然很不想靠別人,
而是自己來弄明白函數作用。
奈何程度真的太低,
最後還是要依賴大大為我解答。
真的非常感激!
PS:趕緊來去做其他的練習跟變換。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)