2016-02-07 36 views
1

好的,一個用於那裏的Gnumeric大師。我認爲這個問題沒有問題,因爲有很多Excel公式可以處理,儘管事實上我不確定這應該被認爲是編程本身。如何從包含(部分)日常數據的工作表中獲取最終月度數據

我有一個雙張工作簿,其中第一個包含了一年的每一天一條線,並且具有一列過去一年積累了一定值:

Date   TimesMyDogHasBittenMe Cumulative 
---------- --------------------- ---------- 
2016-01-01      4   4 
2016-01-02      1   5 
: 
2016-01-31      7   92 
2016-02-01      3   95 
: 

其實,如果你知道我的狗,你知道她無能爲力,什麼,,但我不得不快速思考一些櫃檯。

另一片需要有每個月的最終累計值:

Month MonthlyBites 
----- ------------ 
Jan    92 
: 

所以現在的問題是,我該如何提取每個給定月份的最後行中的第一個工作表,並將其放置在其次,請牢記以下幾點。

  1. 如果只有給定月份部分數據,該月的最後一天進入的是一個我需要(在隨後的將是所有的空白)。例如,截至今天(2月7日),第一張工作表中的最後一行填充行是2月6日,因爲狗還沒有完成今天的(神話)攻擊性行爲。

  2. 同樣3月有沒有數據,因爲顯然我們還沒有開始。對於這種情況,第二張紙上的月份條目應該是空白的。

  3. 我不能總結一個月中每個單獨日期的值以在第二張紙上創建一行。雖然看起來我想要的數字在積累,但它不僅僅是一個簡單的補充。我真的需要從日常表格中提取特定的累加器行。

我一直在使用vlookup嘗試,但,而能找到一列中的第一個空白單元格,它並沒有給我的最後一個非空白單元格。我也無法弄清楚如何按月分組。

之類的事情,我後:

=lastif("a2:c999","c","c!= '' and month('a') = 1") 

其中:

  • 第一個參數是查找區域;
  • 秒是要提取的列;和
  • 三是條件(非空白,月份是一月)。

回答

1

好的,這是我最終做到的。這有點複雜,所以我仍然接受其他解決方案。最初,我添加了Python插件並編寫了一些定製的代碼來執行此操作,但似乎存在問題,因爲如果沒有使用F9進行手動更新操作,它將不會更新。

因此,我在彙總表中創建了幾列(另一個是詳細信息表),一個用於保存月份編號,一個用於保存月份的最後一天,最後用於保存其中的行我發現迄今在源表:

Month Month# LatestDate Row Cumulative 
----- ------ ---------- --- ---------- 
Jan   1  31/1/16  36   92 
Feb   2  29/2/16  57   95 
Mar   3  31/3/16  57 

月份數是一個簡單的遞增值,但你能從月份名稱計算,如果必要的 - 我選擇了最簡單的方法。

在本月的最後日期是公式:

=date(year(detail!$A$2),Bn+1,1)-1 

其中detail!$A$2是在細節單的第一天電池(僅用於獲得本年度 - 我每年爲一個單獨的電子表格) 。在這種情況下的n是上面給出的數據的行。此公式將獲得下個月的第一天,並減去一個以獲得所需月份的最後一天。

行使用查找功能在詳細數據檔位保持日期:

=match(Cn,detail!$A$2:$A$999,1) 

使用match的優點是,它會找到確切值或最高值小於或等於它。因此,如果3月份的詳細信息表中沒有日期,它會爲您提供2月份最後一個數據行。

現在,它變得有點複雜。 Gnumeric有一個indirect函數,當給定表示單元格的字符串時,將返回該單元格的內容。

因此=evaluate("A3")相當於=A3。如果我們想要動態構建一個單元格地址,然後引用該單元格的內容,那麼在該特定情況下不太有用,但至關重要。因此,對於Cumulative細胞中的表達是:

=if(month(indirect(concatenate("detail!a",fixed(Dn,0,TRUE))))=Bn, 
    indirect(concatenate("detail!c",fixed(Dn,0,TRUE))), 
    "") 

在語句中的條件檢查該產品被發現其一個月來比較,我們正在尋找的月行日期的單元格。如果它們不同,那麼當月就沒有詳細信息了(例如之前提到的2月/ 3月的情況,如果查找3月底時發現的最後日期實際上是2月份,那麼3月份沒有數據)。

在這種情況下,單元格被設置爲空字符串。

否則,我們從給定的詳細信息行中提取相關列並在彙總表中使用該列。

所以,這不是世界上最漂亮的代碼,但肯定是有效的(,包括不需要手動重新計算)。

相關問題