Saya memiliki spreadsheet dengan beberapa nilai di kolom G. Beberapa sel kosong di antaranya, dan saya perlu memasukkan nilai terakhir dari kolom itu ke sel lain.
Sesuatu seperti:
=LAST(G2:G9999)
kecuali itu LAST
bukan fungsi.
sumber
Saya memiliki spreadsheet dengan beberapa nilai di kolom G. Beberapa sel kosong di antaranya, dan saya perlu memasukkan nilai terakhir dari kolom itu ke sel lain.
Sesuatu seperti:
=LAST(G2:G9999)
kecuali itu LAST
bukan fungsi.
Jadi solusi ini mengambil string sebagai parameternya. Ini menemukan berapa banyak baris di lembar. Itu mendapatkan semua nilai di kolom yang ditentukan. Ini mengulang nilai-nilai dari akhir ke awal sampai menemukan nilai yang bukan string kosong. Akhirnya nilainya kembali.
Naskah:
function lastValue(column) {
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();
for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
return values[lastRow - 1];
}
Pemakaian:
=lastValue("G")
EDIT:
Menanggapi komentar yang meminta fungsi untuk memperbarui secara otomatis:
Cara terbaik yang bisa saya temukan adalah menggunakan ini dengan kode di atas:
function onEdit(event) {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}
Tidak lagi diperlukan untuk menggunakan fungsi dalam sel seperti status bagian Penggunaan . Alih-alih Anda melakukan hard coding pada sel yang ingin Anda perbarui dan kolom yang ingin Anda lacak. Ada kemungkinan bahwa ada cara yang lebih fasih untuk menerapkan ini (mudah-mudahan salah satu yang tidak memiliki kode keras), tetapi ini adalah yang terbaik yang dapat saya temukan untuk saat ini.
Perhatikan bahwa jika Anda menggunakan fungsi dalam sel seperti yang dinyatakan sebelumnya, itu akan diperbarui saat dimuat ulang. Mungkin ada cara untuk menghubungkan onEdit()
dan memaksa fungsi sel untuk memperbarui. Saya tidak bisa menemukannya di dokumentasi.
Tools -> Scripts -> Script editor...
Jawaban serupa untuk jawaban caligari , tetapi kita dapat merapikannya hanya dengan menentukan rentang kolom lengkap:
sumber
FILTER()
rentang ed, mirip dengan jawaban @ Geta .COUNT(G2:G)
mengembalikan 0. Sebaliknya gunakanCOUNTA(G2:G)
itu hanya menghitung jumlah nilai dalam kumpulan data.COUNTA
hanya berguna jika dikombinasikan denganINDEX
untuk mendapatkan nilai terakhir jika tidak ada satu pun yang kosong di antara nilai-nilai Anda.COUNTA
.COUNT
hanya menghitung nilai numerik: ini akan mengembalikan 0 jika diberikan misalnya sel teks.Sebenarnya saya menemukan solusi yang lebih sederhana di sini:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=id
Ini terlihat seperti ini:
sumber
ROW
mengembalikan nomor baris, sehinggaFILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )
mengembalikan larik dari semua nomor baris yang tidak kosong (bukan nilainya), misalnya [1,2, 3, 7, 12, 14]. KemudianMAX
beri kami nomor baris terakhir. DetikFILTER
kemudian diterapkan untuk menyaring semua baris di mana nomor baris tidak cocok dengan nilai dariMAX
(yaitu nilai dari baris tidak kosong terakhir).Fungsi LAST () tidak diterapkan saat ini untuk memilih sel terakhir dalam suatu rentang. Namun, mengikuti contoh Anda:
kita bisa mendapatkan sel terakhir menggunakan beberapa fungsi INDEX () dan COUNT () dengan cara ini:
Ada contoh langsung di spreedsheet di mana saya telah menemukan (dan memecahkan) masalah yang sama (lembar
Orzamentos
, selI5
). Perhatikan bahwa ini bekerja dengan sempurna bahkan mengacu pada lembar lain di dalam dokumen.sumber
COUNTA
dalam kasus itu jika Anda yakin tidak ada satu pun yang kosong di antara nilai-nilai dalam kolom. Lihat komentar saya untuk jawaban dohmoose.:G
menunjukkan elemen terakhir? Apakah ini didokumentasikan?Ringkasan:
Rincian:
Saya telah memeriksa dan mencoba beberapa jawaban, dan inilah yang saya temukan: Solusi paling sederhana (lihat jawaban Dohmoose ) berfungsi jika tidak ada yang kosong:
Jika Anda memiliki kekosongan, itu gagal.
Anda dapat menangani satu kosong hanya dengan mengubah dari
COUNT
menjadiCOUNTA
(Lihat jawaban pengguna3280071 ):Namun, ini akan gagal untuk beberapa kombinasi kosong. (
1 blank 1 blank 1
gagal untuk saya.)Kode berikut berfungsi (Lihat jawaban Nader dan komentar jason ):
tetapi membutuhkan pemikiran tentang apakah Anda ingin menggunakan
COLUMNS
atauROWS
untuk rentang tertentu.Namun, jika
COLUMNS
diganti denganCOUNT
saya sepertinya mendapatkan implementasi yang andal dan kosong dariLAST
:Dan karena
COUNTA
memiliki filter bawaan, kita dapat menyederhanakan lebih lanjut menggunakanIni agak sederhana, dan benar. Dan Anda tidak perlu khawatir apakah akan menghitung baris atau kolom. Dan tidak seperti solusi skrip, ini secara otomatis diperbarui dengan perubahan pada spreadsheet.
Dan jika Anda ingin mendapatkan nilai terakhir berturut-turut, cukup ubah rentang datanya:
sumber
Untuk mengembalikan nilai terakhir dari kolom nilai teks, Anda perlu menggunakan COUNTA, jadi Anda memerlukan rumus ini:
sumber
COUNTA
digabungkan denganINDEX
tidak akan mengembalikan nilai terakhir di kolom.coba ini:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
Misalkan kolom tempat Anda mencari nilai terakhir adalah B.
Dan ya, ini berfungsi dengan kosong.
sumber
Sepertinya Google Apps Script sekarang mendukung rentang sebagai parameter fungsi. Solusi ini menerima kisaran:
Lihat juga diskusi di forum bantuan Skrip Google Apps: Bagaimana cara memaksa rumus untuk menghitung ulang?
sumber
Saya melihat jawaban sebelumnya dan sepertinya mereka bekerja terlalu keras. Mungkin dukungan scripting telah meningkat. Menurut saya fungsinya diekspresikan seperti ini:
Dalam spreadsheet saya, saya kemudian menggunakan:
Dalam fungsinya, saya mendapatkan array nilai dengan satu per sel yang direferensikan dan ini hanya mengulang dari akhir array ke belakang sampai menemukan nilai yang tidak kosong atau kehabisan elemen. Referensi sheet harus diinterpretasikan sebelum data diteruskan ke fungsi. Juga tidak cukup mewah untuk menangani multi-dimensi. Pertanyaannya memang menanyakan sel terakhir dalam satu kolom, jadi sepertinya cocok. Ini mungkin akan mati jika Anda kehabisan data juga.
Jarak tempuh Anda mungkin berbeda, tetapi ini berhasil untuk saya.
sumber
tidak ada pengkodean yang sulit.
sumber
Yang ini berhasil untuk saya:
sumber
Ini mendapatkan nilai terakhir dan menangani nilai kosong:
sumber
=INDEX( FILTER( 88:88 , NOT(ISBLANK(88:88))) , columns( FILTER( 88:88 , NOT(ISBLANK(88:88)) ) ) )
=INDEX( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row())))) , columns( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row()))) ) ) )
Di kolom dengan kosong, Anda bisa mendapatkan nilai terakhir dengan
sumber
Jawabannya
tidak berfungsi dengan benar di LibreOffice. Namun, dengan sedikit perubahan, ini berfungsi dengan sempurna.
Ini selalu berfungsi hanya jika rentang sebenarnya lebih kecil dari
(G2:G10000)
sumber
Apakah menjawab pertanyaan awal dengan jawaban yang benar-benar di luar topik dapat diterima :) Anda dapat menulis rumus di spreadsheet untuk melakukan ini. Mungkin jelek? tetapi efektif dalam pengoperasian normal spreadsheet.
Ini ditawarkan sebagai pemikiran untuk berbagai pertanyaan di bidang skrip yang dapat disampaikan dengan andal dengan rumus array yang memiliki keuntungan sering bekerja dengan cara yang sama di excel dan openoffice.
sumber
sumber
Saya bermain dengan kode yang diberikan oleh @tinfini, dan berpikir orang mungkin mendapat manfaat dari apa yang menurut saya merupakan solusi yang sedikit lebih elegan (perhatikan saya tidak berpikir skrip bekerja dengan cara yang sama ketika dia membuat jawaban asli) ...
Dalam penggunaannya akan terlihat seperti ini:
sumber
Mengenai komentar @ Jon_Schneider, jika kolom ada sel kosong gunakan saja COUNTA ()
sumber
Saya menemukan cara lain mungkin itu akan membantu Anda
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
-akan kembali baris terakhirInfo lebih lanjut dari anab di sini: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI
sumber
Menemukan sedikit variasi yang berfungsi untuk menghilangkan kekosongan dari bagian bawah tabel. = indeks (G2: G, COUNTIF (G2: G, "<>"))
sumber
Saya terkejut tidak ada yang pernah memberikan jawaban ini sebelumnya. Tetapi ini harus menjadi yang terpendek dan bahkan berfungsi di excel:
G2:G<>""
membuat array 1 / true (1) dan 1 / false (0). SejakLOOKUP
melakukan pendekatan top-down untuk menemukan2
dan Karena tidak akan pernah menemukan 2, ia muncul ke baris terakhir yang tidak kosong dan memberikan posisinya.Cara lain untuk melakukan ini, seperti yang mungkin telah disebutkan orang lain, adalah:
Menemukan
MAX
imumROW
dari baris yang tidak kosong dan mengumpankannya keINDEX
Dalam array interupsi kosong nol, Menggunakan
INDIRECT
RC
notasi denganCOUNTBLANK
adalah opsi lain. Jika V4: V6 ditempati dengan entri, maka,V18 :
akan memberikan posisi V6.
sumber
untuk mendapatkan nilai terakhir dari kolom Anda juga dapat menggunakan
MAX
fungsi denganIF
fungsisumber