Board logo

標題: [發問] 請問能否指定某欄位只抓最新欄位的數據? [打印本頁]

作者: 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
然後將下面這段程式碼貼在模組中。
  1. Function RowLastData(SheetName As String, PT As Range)
  2.     RowLastData= Sheets(SheetName).Cells(Cells.Rows.Count, PT.Column).End(xlUp)
  3. 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」
更改後如下。
  1. Function RowLastData(SheetName As String, PT As Range)
  2.     Application.Volatile
  3.     RowLastData = Sheets(SheetName).Cells(Cells.Rows.Count, PT.Column).End(xlUp)
  4. 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的函式是不是這樣設定會更準確?
  1. =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/)