Lấy ô không trống cuối cùng trong một cột trong Google Sheets


139

Tôi sử dụng chức năng sau

=DAYS360(A2, A35)

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

Có cách nào (trong Google Sheets) để 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?


Câu trả lời:


172

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

Hàm để tìm ô được điề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ó với 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 ) ) ) ) ))

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

4
Cuối cùng tôi đã so sánh với chuỗi rỗng thay vì sử dụng ISBLANK, xử lý một số ô trông trống rỗng (ví dụ: các công thức trả về trống như = "" là không trống. Do đó: '= index (bộ lọc (A: A, A: A <> ""), hàng (bộ lọc (A: A, A: A <> ""))) '
circlepi314

Tôi cũng gặp vấn đề với ISBLANK vì các công thức. Nhưng sử dụng = INDEX (LỌC (F3: F; F3: F <> "")); ROWS (LỌC (F3: F; F3: F <> "")) kết quả lỗi phân tích công thức. Bất cứ ý tưởng gì là sai?
klor

Câu hỏi. Nếu thay vì A: A, có một chữ nhập (), làm thế nào để viết lại mà không thực hiện cùng một lần nhập () 4 lần?
Ruby

4
Câu trả lời đơn giản hơn một chút cũng xử lý các khoảng trống, bởi Doug Bradshaw: =INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))(có thể thay đổi hàng bắt đầu A1) mô tả đầy đủ tại: stackoverflow.com/a/27623407/539149
Zack Morris

82

Để tìm ô không trống cuối cùng, bạn có thể sử dụng INDEXvà các MATCHhàm như thế này:

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

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


1
Đ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.
Ciara

24
Phương thức của bạn dường như chỉ tìm ô cuối cùng nếu giá trị là một số, phương thức của tôi sẽ tìm hàng cuối cùng nếu cũng thuộc kiểu chuỗi. Câu hỏi ban đầu là về ngày tháng, vì vậy điều này sẽ hoạt động, nhưng xem như bài báo vẫn được chú ý, nó đáng chú ý sự khác biệt. Tất cả phụ thuộc vào nhu cầu của bạn. Nếu bạn chỉ cần một số tôi khuyên bạn nên theo cách này.
Sam Plus Plus

1
Điều này giả định cột được sắp xếp
Andrej Adamenko

Cũng có thể được thực hiện như=DAYS360(A2;VLOOKUP(99^99;A:A;1))
vstepaniuk

55

Nếu A2: A chứa các 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)))

9
Cá nhân tôi nghĩ rằng đây nên là câu trả lời được chấp nhận. Súc tích và đơn giản.
SwampT BreathTom

4
Đây là câu trả lời chính xác nhất. Mặc dù câu trả lời của @Poul ở trên hoạt động trong trường hợp này, tôi muốn tìm ô thực tế cuối cùng với dữ liệu thực tế và điều này giúp nó biết liệu dữ liệu có theo thứ tự hay không.
Chuck Claunch

4
Đây là hoàn hảo. Thứ hai chuyển động mà nó phải là câu trả lời được chấp nhận.
shiri

37

Sở 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))

... mặc dù "MAX" một Poul được đăng ở trên trông gọn gàng hơn trong trường hợp khi ngày cuối cùng luôn luôn là mới nhất.
Eric Smalling

1
Ý anh là +1 không, 1
Newbrict

1
Điều này không trả lời câu hỏi - nó chọn giá trị cuối cùng, nhưng không phải giá trị không trống cuối cùng.
NateS

17

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

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

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

3
Thiên tài! Đơn giản và hiệu quả.
Asu

14

Mặc dù câu hỏi đã được trả lời, nhưng 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 nằm trong A1:A100và bạn muốn có thể thêm một số dữ liệu vào cột A, giả sử nó có thể A1:A105hoặc thậm chí A1:A1234sau này, bạn có thể sử dụng phạm vi này:

A1:A

Mẫu vật

Vì vậy, để có được giá trị không trống cuối cùng trong một phạm vi, chúng tôi sẽ sử dụng 2 hàm:

  • QUỐC GIA
  • MỤC LỤC

Câu trả lời là =INDEX(B3:B,COUNTA(B3:B)).

Đây là lời giải thích:

COUNTA(range) trả về số lượng giá trị trong một phạm vi, chúng ta có thể sử dụng số này để lấy số lượng hàng.

INDEX(range, row, col)trả về giá trị trong một phạm vi tại vị trí rowcol( col=1nếu không được chỉ định)

Ví dụ:

INDEX(A1:C5,1,1) = A1
INDEX(A1:C5,1) = A1 # implicitly states that col = 1
INDEX(A1:C5,1,2) = A2
INDEX(A1:C5,2,1) = B1
INDEX(A1:C5,2,2) = B2
INDEX(A1:C5,3,1) = C1
INDEX(A1:C5,3,2) = C2

Đối với hình ảnh trên, phạm vi của chúng tôi sẽ được B3:B. Vì vậy, chúng tôi sẽ đếm bao nhiêu giá trị đang có trong phạm vi B3:Bbằng cách COUNTA(B3:B)đầu tiên. Ở phía bên trái, nó sẽ tạo ra 8vì có 8 giá trị trong khi nó sẽ tạo ra 9ở phía bên phải. Chúng ta cũng biết rằng giá trị cuối cùng nằm trong cột thứ 1 của phạm vi B3:Bnên coltham số INDEXphải là 1 và rowtham số phải là COUNTA(B3:B).

PS : vui lòng upvote câu trả lời của @ Bloodymurderlive kể từ khi anh ấy viết nó trước, tôi chỉ giải thích nó ở đây.


1
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 thay vì mục cuối cùng.
Eric Smalling

1
@EricSmalling điều đó có thể xảy ra bởi vì bạn có thêm một dòng cấp dữ liệu ở 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 phơi bày vấn đề này?
Ramazan Polat

Trông giống như giải pháp thông minh nhất!
MemLeak

Nó không hoạt động. Nơi mà bạn nhận được báo giá từ btw? Tôi nghĩ rằng nó từ tài liệu Google sheet.
Atul

1
@RamazanPolat: OP đang hỏi cách (trong Google Sheets) để tìm ô không trống cuối cùng trong cột A1:A không cho tôi giá trị ô không trống cuối cùng trong cột A
Atul

8

Đâ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à:

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

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

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

Ban đầu tôi đã cố gắng tìm ra điều này để giải quyết vấn đề về bảng tính, nhưng không thể tìm thấy bất cứ điều gì hữu ích chỉ đưa ra số hàng của mục cuối cùng, vì vậy hy vọng điều này hữu ích cho ai đó.

Ngoài ra, điều này có thêm lợi thế là nó hoạt động cho mọi loại dữ liệu theo bất kỳ thứ tự nào và bạn có thể có các hàng trống ở giữa các hàng có nội dung và nó không tính các ô có công thức đánh giá là "". Nó cũng có thể xử lý các giá trị lặp đi lặp lại. Nhìn chung, 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 việc rút số hàng dễ dàng hơn một chút nếu đó là những gì bạn theo sau .

Ngoài ra, nếu bạn muốn đặt một tập lệnh vào trang tính của mình, bạn có thể tự làm nó dễ dàng nếu bạn có kế hoạch thực hiện việc này rất nhiều. Đây là 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;
    }
  }
}

Tại đây, bạn chỉ có thể nhập vào phần sau nếu bạn muốn hàng cuối cùng trên cùng trang tính mà bạn hiệ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ừ trang tính đó hoặc của một cột cụ thể từ một trang tính khác, bạn có thể thực hiện như sau:

=LASTROW("Sheet1","A")

Và cho hàng cuối cùng của một tờ cụ thể nói chung:

=LASTROW("Sheet1")

Sau đó, để có được 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ể sửa đổi tập lệnh trên ở hai dòng trả về cuối cùng (hai dòng cuối cùng vì bạn sẽ phải đặt cả trang tính và cột để nhận giá trị thực từ một cột thực tế) và thay thế biến bằng 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, các phương trình đánh giá thành "" sẽ được tính, nhưng nếu bạn chỉ định một trang tính và cột thì bây giờ chúng sẽ được tính. 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ẽ là quá mức cần thiết, nhưng tất cả đều có thể.


1
"Chức năng không xác định LASTROW"
Berit Larsen

Phải là +100 khi thực sự trả lời tiêu đề câu hỏi: Hàng cuối cùng, không phải giá trị ở hàng cuối cùng
Norbert van Nobelen

6

Điều gì về công thức này để có đượ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 cuối cùng 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.


5

Tôi đã đi một con đường khác. Vì tôi biết tôi sẽ thêm một cái gì đó vào một hàng / cột từng cái một, tôi tìm ra hàng cuối cùng bằng cách trước tiên đếm các trường có dữ liệu. Tôi sẽ chứng minh điều này bằng một cột:

=COUNT(A5:A34)

Vì vậy, giả sử đã trả về 21. A5 là 4 hàng xuống, vì vậy tôi cần có được vị trí thứ 21 từ hàng thứ 4 trở xuống. Tôi có thể làm điều này bằng cách sử dụng inderect, như vậy:

=INDIRECT("A"&COUNT(A5:A34)+4)

Đó là tìm số lượng hàng có dữ liệu và trả lại cho tôi một số tôi đang sử dụng làm công cụ sửa đổi chỉ mục.


1
Lưu ý rằng không thể có các ô trống. Ngoài ra, COUNTA nên phù hợp với nhiều kịch bản hơn
Z. Khullah

4

cho một hàng:

=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))

cho một cột:

=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))

1
Câu trả lời tuyệt vời. Cảm ơn bạn.
Nick

2

Đây có vẻ như là giải pháp đơn giản nhất mà tôi đã tìm thấy để lấy giá trị cuối cùng trong một cột không ngừng mở rộng:

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

2

Điều này làm việc cho tôi. Nhận giá trị cuối cùng của cột A trong trang tính của Google:

=index(A:A,max(row(A:A)*(A:A<>"")))

(Nó cũng bỏ qua các hàng trống ở giữa nếu có)


1

Tính hiệu số giữa ngày mới nhất trong cột A với ngày trong ô A2.

=MAX(A2:A)-A2

1

Điều này sẽ cung cấp cho nội dung của ô cuối cùng:

=indirect("A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>""))))

Điều này sẽ cung cấp địa chỉ của ô cuối cùng:

="A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))

Điều này sẽ đưa ra hàng của ô cuối cùng:

=max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))

Có lẽ bạn thích một kịch bản. Kịch bản này ngắn hơn so với kịch bản lớn được đăng bởi người khác:

Chuyển đến trình chỉnh sửa tập lệnh và lưu tập lệnh này:

function getLastRow(range){
  while(range.length>0 && range[range.length-1][0]=='') range.pop();
  return range.length;
}

Một cái này được thực hiện, bạn chỉ cần nhập cái này vào một ô:

=getLastRow(A:A)

0

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


Lấy làm tiếc. Điều này chỉ hoạt động nếu tất cả các mục trong cột là duy nhất.
Conrad Lindes

1
Mặc dù 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 là duy nhất, vì vậy bạn nên sử dụng Count (), thay vì Countunique (). Thứ hai, sử dụng gián tiếp () và ghép nối trùng lặp chức năng hiện có của index (), 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 sử dụng A1: A?
sondra.kinsey

0

Để tìm số hàng không trống cuối cùng (cho phép khoảng trống giữa chúng) tôi đã sử dụng bên dưới để tìm kiếm cột A.

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.