我用下面的函數獲取一列中的最後一個非空單元格在谷歌表
=DAYS360(A2, A35)
計算在我的專欄兩個日期之間的差異。然而,這個專欄不斷擴展,我現在必須在更新電子表格時手動更改'A35'。
有沒有辦法(在Google表格中)找到此列中最後一個非空單元格,然後在上述函數中動態設置該參數?
我用下面的函數獲取一列中的最後一個非空單元格在谷歌表
=DAYS360(A2, A35)
計算在我的專欄兩個日期之間的差異。然而,這個專欄不斷擴展,我現在必須在更新電子表格時手動更改'A35'。
有沒有辦法(在Google表格中)找到此列中最後一個非空單元格,然後在上述函數中動態設置該參數?
有可能是一個更雄辯的方式,但是這是我想出了辦法:
功能找到一列中的最後一個人口稠密的細胞是:
=INDEX(FILTER(A:A ; NOT(ISBLANK(A:A))) ; ROWS(FILTER(A:A ; NOT(ISBLANK(A:A)))))
所以,如果你把它與您當前的功能也應該是這樣的:
=DAYS360(A2,INDEX(FILTER(A:A ; NOT(ISBLANK(A:A))) ; ROWS(FILTER(A:A ; NOT(ISBLANK(A:A))))))
在這種情況下,我並不是很在乎口才,只要它工作起來就像一個魅力(它的確如此) - 非常感謝Sam! – MichaelS
我最終與空字符串進行比較,而不是使用ISBLANK,它處理一些空單元格(例如空白返回的公式,例如=「」,因爲非空白。因此:'= index(filter(A:A,A: A <>「」),rows(filter(A:A,A:A <>「」)))' – circlepi314
這更簡單了,我測試過了,效果很好 – Ciaran
你的方法似乎只找到最後一個單元格if該值是一個數字,我的方法將找到最後一行,如果它也是字符串類型的。 最初的問題是關於日期,所以這將工作,但看到作爲文章仍然受到關注,值得注意的區別。這一切都取決於你的需求,如果你只是需要一個號碼,我推薦這種方式。 –
這是另一個變種http://stackoverflow.com/a/13871043/44620 –
什麼這個公式得到的最後一個值:
=index(G:G;max((G:G<>"")*row(G:G)))
,這將是您的原始任務的最終公式:
=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))
假設您最初的日期是G10。
如果A2:A包含連續的日期,那麼INDEX(A2:A,COUNT(A2:A))將返回最後一個日期。最終的公式是
=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
我個人認爲日應該是被接受的答案。簡潔而簡單。 – SwampThingTom
這是最準確的答案。雖然@Poul上面的答案適用於這種情況,但我想用實際數據找到實際的最後一個單元格,並且無論數據是否按順序都可以得到它。 –
業餘做它是這樣的「= CONCATENATE(」 A「 COUNTUNIQUE(A1:A9999))」,其中A1是在列中的第一單元,和A9999是越往下該專欄比我曾預料會有任何條目。由此產生的A#可以根據需要與INDIRECT功能一起使用。
對不起。這僅適用於列中的所有條目都是唯一的。 –
雖然我很欣賞你對StackOverflow,Conrad的貢獻,但你的答案有一些問題。首先,他沒有指定日期是唯一的,所以你應該使用count()而不是countunique()。其次,使用indirect()和concatenate可以複製index()的現有功能,如其他答案中所見。第三,而不是A1:A9999,爲什麼不使用A1:A? –
雖然問題已經回答了,有一個雄辯的方式來做到這一點。
Use just the column name to denote last non-empty row of that column.
例如:
如果你的數據在A1:A100
並希望能夠更多的數據添加到A列,說這可能是A1:A105
甚至A1:A1234
以後,你可以使用這個範圍:
A1:A
我喜歡這個,但是看到了它有時會返回倒數第二項而不是最後一項的問題。 –
@EricSmalling可能發生的原因是您在所有行的末尾添加了一個換行符,並且在複製粘貼時可能會將其視爲非空單元格。你有任何樣本電子表格暴露這個問題嗎? –
我最喜歡的是:
=INDEX(A2:A,COUNTA(A2:A),1)
因此,對於OP的需要:
=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
......儘管最後一個日期總是最新的情況下,上面貼出Poul的「MAX」更清晰。 –
最後加上',1'沒有意義嗎? –
這裏的另一個問題:
=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))
與最終的公式是這樣的:
=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))))
在這裏的其他方程的工作,但我喜歡這個一個因爲它使得獲得行號容易,我發現我需要更頻繁地做。剛行號會是這樣:
=max(arrayformula(if(A:A<>"",row(A:A),"")))
我本來試圖找到這只是解決了電子表格的問題,但找不到任何有用的東西,只是給了最後一個條目的行數,所以希望這對某人有幫助。
此外,它具有額外的優勢,即它可以以任意順序適用於任何類型的數據,並且可以在具有內容的行之間具有空白行,並且不會計算具有評估爲「」的公式的單元格。它也可以處理重複的值。總而言之,這與使用max((G:G <>「」)* row(G:G))的公式非常相似,但是如果這是您之後的操作,則可以更輕鬆地拉出行號。
或者,如果你想在你的工作表上放置一個腳本,你可以使自己容易,如果你打算這麼做。下面是scirpt:
=LASTROW()
,或者如果你想:
function lastRow(sheet,column) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (column == null) {
if (sheet != null) {
var sheet = ss.getSheetByName(sheet);
} else {
var sheet = ss.getActiveSheet();
}
return sheet.getLastRow();
} else {
var sheet = ss.getSheetByName(sheet);
var lastRow = sheet.getLastRow();
var array = sheet.getRange(column + 1 + ':' + column + lastRow).getValues();
for (i=0;i<array.length;i++) {
if (array[i] != '') {
var final = i + 1;
}
}
if (final != null) {
return final;
} else {
return 0;
}
}
}
在這裏,如果你想在同一個片的最後一排,你目前正在編輯您只需鍵入以下特定列從表,或從另一個表的特定列,你可以做的最後一行如下:
=LASTROW("Sheet1","A")
和特定紙張一般的最後一行:
=LASTROW("Sheet1")
然後獲得實際的數據,您既可以使用間接的:
=INDIRECT("A"&LASTROW())
,或者你可以在最後兩條線(最後兩個修改上面的腳本,因爲你將不得不把兩個片材和柱獲得與實際的列中的實際值),並與替換變量如下:
return sheet.getRange(column + final).getValue();
和
return sheet.getRange(column + lastRow).getValue();
此腳本的一個好處是,您可以選擇是否要包含評估爲「」的方程式。如果未添加任何參數,則評估爲「」的方程式將被計算在內,但是如果您指定了一個表格和一列,則它們將被計數。而且,如果您願意使用腳本的變體,則會有很大的靈活性。
可能過度殺傷,但一切皆有可能。
相似問題:http://stackoverflow.com/questions/4169914/selecting-the-last-value-of-a-column/13356890 –