Dapatkan sel non-kosong terakhir di kolom di Google Sheets

140

Saya menggunakan fungsi berikut

=DAYS360(A2, A35)

untuk menghitung perbedaan antara dua tanggal di kolom saya. Namun, kolom ini terus berkembang dan saat ini saya harus mengubah 'A35' secara manual saat saya memperbarui spreadsheet saya.

Apakah ada cara (di Google Sheets) untuk menemukan sel tidak kosong terakhir di kolom ini dan kemudian secara dinamis mengatur parameter itu di fungsi di atas?

Michael
sumber
2
Pertanyaan serupa: stackoverflow.com/questions/4169914/…
Jon Schneider

Jawaban:

172

Mungkin ada cara yang lebih fasih, tetapi ini adalah cara saya datang dengan:

Fungsi untuk menemukan sel terisi terakhir dalam kolom adalah:

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

Jadi jika Anda menggabungkannya dengan fungsi Anda saat ini akan terlihat seperti ini:

=DAYS360(A2,INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) ))
Sam Plus Plus
sumber
1
Saya tidak benar-benar peduli tentang kefasihan dalam hal ini selama itu bekerja seperti pesona (yang memang) - terima kasih banyak Sam!
MichaelS
4
Saya akhirnya membandingkan dengan string kosong daripada menggunakan ISBLANK, yang memperlakukan beberapa sel yang tampak kosong (mis. Rumus pengembalian kosong seperti = "" sebagai tidak kosong. Jadi: '= indeks (filter (A: A, A: A <> ""), baris (filter (A: A, A: A <> ""))) '
circlepi314
Saya juga punya masalah dengan ISBLANK karena formula. Tetapi menggunakan = INDEX (FILTER (F3: F; F3: F <> "")); ROWS (FILTER (F3: F; F3: F <> "")) menghasilkan kesalahan parse rumus. Apakah ada yang salah?
klor
Pertanyaan. Jika alih-alih A: A, ada importrange (), bagaimana ini bisa ditulis ulang tanpa melakukan importrange yang sama () 4 kali?
Ruby
4
Jawaban yang sedikit disederhanakan yang juga menangani blank, oleh Doug Bradshaw: =INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))(dapat mengubah mulai baris A1) uraian lengkap di: stackoverflow.com/a/27623407/539149
Zack Morris
82

Untuk menemukan sel non-kosong terakhir yang dapat Anda gunakan INDEXdan MATCHfungsinya seperti ini:

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

Saya pikir ini sedikit lebih cepat dan lebih mudah.

xxxbence
sumber
1
Ini lebih sederhana dan saya sudah menguji ini. Bagus sekali.
Ciaran
24
Metode Anda tampaknya hanya menemukan sel terakhir jika nilainya angka, metode saya akan menemukan baris terakhir jika juga dari tipe string. Pertanyaan aslinya adalah tentang kencan, jadi ini akan berhasil, tetapi mengingat artikel itu masih menarik perhatian, perlu dicatat perbedaannya. Itu semua tergantung kebutuhan Anda. Jika Anda hanya memerlukan nomor, saya merekomendasikan cara ini.
Sam Plus Plus
1
Ini mengasumsikan kolom diurutkan
Andrej Adamenko
Juga bisa dilakukan sebagai=DAYS360(A2;VLOOKUP(99^99;A:A;1))
vstepaniuk
56

Jika A2: A berisi tanggal yang berdekatan maka INDEX (A2: A, COUNT (A2: A)) akan mengembalikan tanggal terakhir. Rumus terakhirnya adalah

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
Rubén
sumber
9
Secara pribadi saya pikir ini harus menjadi jawaban yang diterima. Ringkas dan sederhana.
SwampThingTom
4
Ini jawaban yang paling tepat. Sementara jawaban @Poul di atas berfungsi untuk kasus ini, saya ingin menemukan sel terakhir yang sebenarnya dengan data aktual dan ini membuatnya apakah data dalam urutan atau tidak.
Chuck Claunch
4
Ini sempurna. Kedua, mosi yang seharusnya menjadi jawaban yang diterima.
shiri
37

Favorit saya adalah:

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

Jadi, untuk kebutuhan OP:

=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
Eric Smalling
sumber
... meskipun "MAX" yang diposting Poul di atas tampak lebih bersih jika tanggal terakhir selalu yang terbaru.
Eric Smalling
1
Maksudnya +1 bukan, 1
Newbrict
1
Ini tidak menjawab pertanyaan - ia mengambil nilai terakhir, tetapi bukan nilai terakhir yang tidak kosong.
NateS
17

Jika kolom diperluas hanya dengan menambahkan tanggal yang berdekatan seperti dalam kasus saya - saya hanya menggunakan fungsi MAX untuk mendapatkan tanggal terakhir.

Formula akhir adalah:

=DAYS360(A2; MAX(A2:A)) 
Poul
sumber
3
Jenius! Sederhana dan efektif.
Asu
14

Meskipun pertanyaan sudah dijawab, ada cara fasih untuk melakukannya.

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

Sebagai contoh:

Jika data Anda ada A1:A100dan Anda ingin dapat menambahkan lebih banyak data ke kolom A, katakan itu bisa A1:A105atau bahkan A1:A1234lebih baru, Anda dapat menggunakan rentang ini:

A1:A

Sampel

Jadi untuk mendapatkan nilai non-kosong terakhir dalam rentang, kami akan menggunakan 2 fungsi:

  • COUNTA
  • INDEKS

Jawabannya adalah =INDEX(B3:B,COUNTA(B3:B)).

Berikut penjelasannya:

COUNTA(range) mengembalikan jumlah nilai dalam rentang, kita bisa menggunakan ini untuk mendapatkan jumlah baris.

INDEX(range, row, col)mengembalikan nilai dalam rentang di posisi rowdan col( col=1jika tidak ditentukan)

Contoh:

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

Untuk gambar di atas, jangkauan kami akan menjadi B3:B. Jadi kita akan menghitung berapa banyak nilai yang ada dalam jangkauan B3:Boleh yang COUNTA(B3:B)pertama. Di sisi kiri, ia akan menghasilkan 8karena ada 8 nilai sementara itu akan menghasilkan 9di sisi kanan. Kita juga tahu bahwa nilai terakhir ada di kolom 1 rentang B3:Bsehingga colparameter INDEXharus 1 dan rowparameter harus COUNTA(B3:B).

PS : tolong upvote jawaban @ bloodymurderlive sejak dia menulis dulu, saya jelaskan di sini.

Ramazan Polat
sumber
1
Saya suka ini, tetapi telah melihat masalah di mana terkadang mengembalikan item berikutnya bukan yang terakhir.
Eric Smalling
1
@EricSmalling yang mungkin terjadi karena Anda memiliki satu umpan baris tambahan di akhir semua baris dan ketika Anda menyalinnya, itu mungkin dianggap sebagai sel yang tidak kosong. Apakah Anda memiliki sampel spreadsheet yang mengekspos masalah ini?
Ramazan Polat
Sepertinya solusi paling cerdas!
MemLeak
Itu tidak bekerja. Di mana Anda mendapatkan penawaran dari btw? Saya pikir ini dari dokumentasi lembar Google.
Atul
1
@RamazanPolat: OP meminta cara (di Google Sheets) untuk menemukan sel tidak kosong terakhir di kolom A1:A tidak memberi saya nilai sel tidak kosong terakhir di kolom A
Atul
8

Ini satu lagi:

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

Dengan persamaan terakhir adalah ini:

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

Persamaan lain di sini berfungsi, tetapi saya suka yang ini karena itu membuat mendapatkan nomor baris mudah, yang saya temukan perlu saya lakukan lebih sering. Hanya nomor barisnya akan seperti ini:

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

Saya awalnya mencoba menemukan ini untuk menyelesaikan masalah spreadsheet, tetapi tidak dapat menemukan sesuatu yang berguna yang hanya memberikan nomor baris entri terakhir, jadi semoga ini bermanfaat bagi seseorang.

Juga, ini memiliki keuntungan tambahan yang berfungsi untuk semua jenis data dalam urutan apa pun, dan Anda dapat memiliki baris kosong di antara baris dengan konten, dan itu tidak menghitung sel dengan rumus yang mengevaluasi ke "". Itu juga bisa menangani nilai berulang. Semua itu sangat mirip dengan persamaan yang menggunakan maks ((G: G <> "") * baris (G: G)) di sini, tetapi membuat menarik nomor baris sedikit lebih mudah jika itu yang Anda cari .

Atau, jika Anda ingin meletakkan skrip di lembar Anda, Anda dapat membuatnya mudah pada diri sendiri jika Anda berencana untuk melakukan ini banyak. Inilah tipuan itu:

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

Di sini Anda bisa mengetikkan yang berikut ini jika Anda ingin baris terakhir pada lembar yang sama yang sedang Anda edit:

=LASTROW()

atau jika Anda ingin baris terakhir dari kolom tertentu dari lembar itu, atau dari kolom tertentu dari lembar lain Anda dapat melakukan hal berikut:

=LASTROW("Sheet1","A")

Dan untuk baris terakhir dari lembar tertentu secara umum:

=LASTROW("Sheet1")

Kemudian untuk mendapatkan data aktual Anda bisa menggunakan tidak langsung:

=INDIRECT("A"&LASTROW())

atau Anda dapat memodifikasi skrip di atas pada dua baris kembali terakhir (dua terakhir karena Anda harus meletakkan lembar dan kolom untuk mendapatkan nilai aktual dari kolom aktual), dan ganti variabel dengan yang berikut:

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

dan

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

Salah satu manfaat skrip ini adalah Anda dapat memilih jika Anda ingin menyertakan persamaan yang mengevaluasi ke "". Jika tidak ada argumen yang ditambahkan, persamaan yang mengevaluasi "" akan dihitung, tetapi jika Anda menentukan lembar dan kolom sekarang akan dihitung. Selain itu, ada banyak fleksibilitas jika Anda bersedia menggunakan variasi skrip.

Mungkin berlebihan, tapi semuanya mungkin.

Mearg
sumber
1
"Fungsi tidak dikenal LASTROW"
Berit Larsen
Harus +100 untuk benar-benar menjawab tajuk pertanyaan: Baris terakhir, bukan nilai di baris terakhir
Norbert van Nobelen
6

Bagaimana dengan rumus ini untuk mendapatkan nilai terakhir:

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

Dan ini akan menjadi formula terakhir untuk tugas awal Anda:

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

Misalkan tanggal awal Anda berada di G10.

Andrew Anderson
sumber
5

Saya menempuh rute yang berbeda. Karena saya tahu saya akan menambahkan sesuatu ke baris / kolom satu per satu, saya mencari tahu baris terakhir dengan terlebih dahulu menghitung bidang yang memiliki data. Saya akan menunjukkan ini dengan kolom:

=COUNT(A5:A34)

Jadi, katakanlah yang dikembalikan 21. A5 adalah 4 baris ke bawah, jadi saya perlu mendapatkan posisi ke-21 dari baris ke-4 ke bawah. Saya dapat melakukan ini menggunakan inderect, seperti:

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

Ini menemukan jumlah baris dengan data, dan mengembalikan saya nomor yang saya gunakan sebagai pengubah indeks.

Tamir Nadav
sumber
1
Perhatikan bahwa tidak boleh ada sel kosong. Juga, COUNTA harus
memuat
4

untuk satu baris:

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

untuk kolom:

=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))
pemain0
sumber
1
Jawaban yang sangat bagus. Terima kasih.
Nick
2

Ini sepertinya solusi paling sederhana yang saya temukan untuk mengambil nilai terakhir di kolom yang terus berkembang:

=INDEX(A:A,COUNTA(A:A),1)
darah lebih hidup
sumber
2

Ini bekerja untuk saya. Dapatkan nilai terakhir dari kolom A di Google sheet:

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

(Ini juga melewatkan baris kosong di antara jika ada)

Atul
sumber
1

Hitung perbedaan antara tanggal terakhir di kolom A dengan tanggal di sel A2.

=MAX(A2:A)-A2
Burung bahagia
sumber
1

Ini akan memberikan isi sel terakhir:

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

Ini akan memberikan alamat sel terakhir:

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

Ini akan memberikan baris sel terakhir:

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

Mungkin Anda lebih suka skrip. Skrip ini jauh lebih pendek daripada skrip besar yang diposting di atas oleh orang lain:

Buka editor skrip dan simpan skrip ini:

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

Satu ini selesai Anda hanya perlu memasukkan ini dalam sel:

=getLastRow(A:A)
michaeldon
sumber
0

Cara seorang amatir melakukannya adalah "= CONCATENATE (" A ", COUNTUNIQUE (A1: A9999))", di mana A1 adalah sel pertama dalam kolom, dan A9999 lebih jauh ke bawah kolom daripada yang pernah saya harapkan memiliki entri. A # yang dihasilkan ini dapat digunakan dengan fungsi INDIRECT sesuai kebutuhan.

Conrad Lindes
sumber
Maaf. Ini hanya berfungsi jika semua entri dalam kolom adalah unik.
Conrad Lindes
1
Sementara saya menghargai kontribusi Anda untuk StackOverflow, Conrad, jawaban Anda memiliki beberapa masalah. Pertama, dia tidak menentukan bahwa tanggal itu unik, jadi Anda harus menggunakan count (), bukannya countunique (). Kedua, menggunakan tidak langsung () dan menyatukan duplikat fungsi indeks yang ada (), seperti yang Anda lihat di jawaban lain. Ketiga, alih-alih A1: A9999, mengapa tidak menggunakan A1: A?
sondra.kinsey
0

Untuk menemukan nomor baris kosong yang terakhir (memungkinkan kosong di antaranya) saya gunakan di bawah ini untuk mencari kolom A.

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
pengguna34612
sumber