54

tôi sử dụng hàm sauLấy tế bào không trống cuối cùng trong một cột trong Google Sheets

=DAYS360(A2, A35) 

để tính toán sự khác biệt giữa hai thời điểm trong cột của tôi. Tuy nhiên, cột này đã từng mở rộng và hiện tại tôi phải thay đổi 'A35' theo cách thủ công khi tôi cập nhật bảng tính của mình.

Có cách nào (trong Google Trang tính) để tìm ô không trống cuối cùng trong cột này và sau đó tự động đặt tham số đó trong hàm ở trên không?

+2

Câu hỏi tương tự: http://stackoverflow.com/questions/4169914/selecting-the-last-value-of-a-column/13356890 –

Trả lời

79

Có thể có một cách hùng hồn hơn, nhưng đây là cách tôi đến với:

Các chức năng để tìm ra tế bào dân cuối cùng trong một cột là:

=INDEX(FILTER(A:A ; NOT(ISBLANK(A:A))) ; ROWS(FILTER(A:A ; NOT(ISBLANK(A:A))))) 

Vì vậy, nếu bạn kết hợp nó có chức năng hiện tại của bạn nó sẽ trông như thế này:

=DAYS360(A2,INDEX(FILTER(A:A ; NOT(ISBLANK(A:A))) ; ROWS(FILTER(A:A ; NOT(ISBLANK(A:A)))))) 
+0

Tôi không thực sự bận tâm về sự hùng biện trong trường hợp này miễn là nó hoạt động như một sự quyến rũ (mà nó làm) - cảm ơn rất nhiều Sam! – MichaelS

+2

Tôi đã kết thúc so sánh với chuỗi rỗng thay vì sử dụng ISBLANK, xử lý một số ô trống (ví dụ: công thức trống trả về như = "" không trống. Vì vậy: '= index (filter (A: A, A: A <> ""), hàng (bộ lọc (A: A, A: A <> ""))) ' – circlepi314

41

Để tìm các tế bào không trống cuối cùng bạn có thể sử dụng INDEXMATCH chức năng như thế này:

=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1))) 

Tôi nghĩ rằng điều này nhanh hơn và dễ dàng hơn một chút.

+0

Điều này đơn giản hơn và tôi đã thử nghiệm điều này. Công trình tuyệt vời. – Ciaran

+12

Phương pháp của bạn dường như chỉ tìm thấy ô cuối cùng nếu Giá trị là một số, phương pháp của tôi sẽ tìm thấy hàng cuối cùng nếu cũng là kiểu chuỗi Câu hỏi ban đầu là về ngày tháng, do đó, điều này sẽ hiệu quả, nhưng khi bài viết vẫn được chú ý, điều đáng chú ý là sự khác biệt. Nếu bạn chỉ cần một số tôi khuyên bạn nên theo cách này –

+2

Đây là một biến thể khác http://stackoverflow.com/a/13871043/44620 –

2

gì về công thức này để nhận được giá trị cuối cùng:

=index(G:G;max((G:G<>"")*row(G:G))) 

Và đây sẽ là một công thức thức cho nhiệm vụ ban đầu của bạn:

=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G)))) 

Giả sử rằng ngày đầu tiên của bạn là trong G10.

23

Nếu A2: A chứa ngày liền kề thì INDEX (A2: A, COUNT (A2: A)) sẽ trả về ngày cuối cùng. Công thức cuối cùng là

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A))) 
+6

Cá nhân tôi nghĩ th phải là câu trả lời được chấp nhận. Ngắn gọn và đơn giản. – SwampThingTom

+0

Đây là câu trả lời chính xác nhất. Trong khi câu trả lời của @Poul ở trên hoạt động cho trường hợp này, tôi muốn tìm tế bào cuối cùng thực tế với dữ liệu thực tế và điều này cho dù dữ liệu có theo thứ tự hay không. –

-1

Cách một người nghiệp dư thì nó là "= CONCATENATE (" A "COUNTUNIQUE (A1: A9999))", trong đó A1 là ô đầu tiên trong cột, và A9999 là xa hơn xuống cột đó hơn tôi mong đợi để có bất kỳ mục nhập nào. A # kết quả này có thể được sử dụng với hàm INDIRECT khi cần thiết.

+0

Xin lỗi. Điều này chỉ hoạt động nếu tất cả các mục trong cột là duy nhất. –

+0

Trong khi tôi đánh giá cao sự đóng góp của bạn cho StackOverflow, Conrad, câu trả lời của bạn có một số vấn đề. Đầu tiên, anh ta không xác định rằng ngày tháng là duy nhất, vì vậy bạn nên sử dụng count(), thay vì countunique(). Thứ hai, sử dụng hàm gián tiếp() và ghép nối các hàm trùng lặp hiện có của chỉ mục(), như bạn có thể thấy trong các câu trả lời khác. Thứ ba, thay vì A1: A9999, tại sao không chỉ sử dụng A1: A? –

10

Nếu cột chỉ mở rộng thêm một ngày liền kề như trong trường hợp của tôi - tôi chỉ sử dụng hàm MAX để có ngày cuối cùng.

Công thức cuối cùng sẽ là:

=DAYS360(A2; MAX(A2:A)) 
+2

Genius! Đơn giản và hiệu quả. – Asu

3

Mặc dù câu hỏi đã được trả lời, có một cách hùng hồn để làm điều đó.

Use just the column name to denote last non-empty row of that column. 

Ví dụ:

Nếu dữ liệu của bạn trong A1:A100 và bạn muốn để có thể thêm một số dữ liệu hơn để cột A, nói nó có thể được A1:A105 hoặc thậm chí A1:A1234 sau đó, bạn có thể sử dụng phạm vi này :

A1:A 
+0

Tôi thích điều này, nhưng đã thấy các vấn đề đôi khi nó trả về mục tiếp theo so với mục cuối cùng. –

+0

@EricSmalling có thể xảy ra vì bạn có thêm một dòng cấp ở cuối tất cả các hàng và khi bạn sao chép dán nó, nó có thể được coi là ô không trống. Bạn có bất kỳ bảng tính mẫu nào phơi bày vấn đề này không? –

5

ưa thích của tôi là:

=INDEX(A2:A,COUNTA(A2:A),1) 

Vì vậy, đối với nhu cầu của OP:

=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1)) 
+0

... mặc dù "MAX" một bài đăng Poul ở trên là tìm kiếm rõ ràng hơn trong trường hợp ngày cuối cùng luôn là mới nhất. –

+0

Không có điểm nào thêm ', 1' vào cuối, phải không? –

0

Dưới đây là một số khác:

=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))) 

Với phương trình cuối cùng là đây:

=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))) 

Các phương trình khác trên đây làm việc, nhưng tôi thích điều này một vì nó làm cho số hàng dễ dàng, mà tôi thấy tôi cần phải làm thường xuyên hơn. Chỉ số hàng sẽ là như thế này:

=max(arrayformula(if(A:A<>"",row(A:A),""))) 

tôi ban đầu đã cố gắng để tìm thấy chỉ này để giải quyết một vấn đề bảng tính, nhưng không thể tìm thấy bất cứ điều gì hữu ích mà chỉ cho số lượng hàng mục cuối cùng, vì vậy hy vọng này rất hữu ích cho ai đó. Ngoài ra, điều này có thêm lợi thế là nó hoạt động cho bất kỳ loại dữ liệu nào theo thứ tự bất kỳ và bạn có thể có hàng trống giữa các hàng có nội dung và không tính các ô có công thức đánh giá "". Nó cũng có thể xử lý các giá trị lặp lại. Tất cả trong tất cả nó rất giống với phương trình sử dụng max ((G: G <> "") * hàng (G: G)) ở đây, nhưng làm cho kéo ra số hàng dễ dàng hơn một chút nếu đó là những gì bạn đang sau .

Hoặc, nếu bạn muốn đặt một tập lệnh trên trang tính, bạn có thể dễ dàng tự làm nếu bạn dự định thực hiện việc này rất nhiều.Dưới đây là rằng scirpt:

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; 
    } 
    } 
} 

Ở đây bạn có thể chỉ cần gõ vào sau đây nếu bạn muốn hàng cuối cùng trên cùng của bảng mà bạn đang chỉnh sửa:

=LASTROW() 

hoặc nếu bạn muốn hàng cuối cùng của một cột cụ thể từ bảng đó, hoặc của một cột cụ thể từ bảng khác, bạn có thể làm như sau:

=LASTROW("Sheet1","A") 

Và đối với những dòng cuối cùng của một tờ đặc biệt nói chung:

=LASTROW("Sheet1") 

Sau đó, để có được những dữ liệu thực tế bạn có thể sử dụng gián tiếp:

=INDIRECT("A"&LASTROW()) 

hoặc bạn có thể thay đổi kịch bản trên tại hai dòng trở lại cuối cùng (người cuối cùng hai vì bạn sẽ phải đặt cả bảng và cột để có được giá trị thực tế từ một cột thực tế), và thay thế các biến như sau:

return sheet.getRange(column + final).getValue(); 

return sheet.getRange(column + lastRow).getValue(); 

Một lợi ích của tập lệnh này là bạn có thể chọn nếu bạn muốn bao gồm các phương trình đánh giá thành "". Nếu không có đối số nào được thêm vào phương trình đánh giá "" sẽ được tính, nhưng nếu bạn chỉ định một trang tính và cột thì giờ đây chúng sẽ được đếm. Ngoài ra, có rất nhiều tính linh hoạt nếu bạn sẵn sàng sử dụng các biến thể của tập lệnh.

Có lẽ quá mức cần thiết, nhưng tất cả có thể.

Các vấn đề liên quan