Google E-Tablolar'daki bir sütundaki boş olmayan son hücreyi alın


140

Aşağıdaki işlevi kullanıyorum

=DAYS360(A2, A35)

sütunumdaki iki tarih arasındaki farkı hesaplamak için. Ancak sütun sürekli genişliyor ve şu anda elektronik tablomu güncellerken 'A35'i manuel olarak değiştirmem gerekiyor.

Bu sütundaki boş olmayan son hücreyi bulmanın ve ardından yukarıdaki işlevde bu parametreyi dinamik olarak ayarlamanın bir yolu (Google E-Tablolar'da) var mı?


Yanıtlar:


172

Daha güzel bir yol olabilir, ama benim bulduğum yol:

Bir sütundaki son doldurulan hücreyi bulma işlevi şudur:

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

Yani, onu mevcut fonksiyonunuzla birleştirirseniz, şöyle görünecektir:

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

1
Bir cazibe gibi çalıştığı sürece (ki işe yaradığı) bu durumda belagat konusunda gerçekten rahatsız değilim - çok teşekkürler Sam!
MichaelS

4
Bazı boş görünen hücreleri (örneğin = "" gibi boş dönen formülleri boş olmayan olarak değerlendiren ISBLANK kullanmak yerine boş dizeyle karşılaştırma yaptım. Böylece: '= dizin (filtre (A: A, A: A) <> ""), satırlar (filtre (A: A, A: A <> ""))) '
circlepi314

Ayrıca ISBLANK ile formüllerden dolayı sorunlar yaşadım. Ancak = INDEX (FILTER (F3: F; F3: F <> "")); ROWS (FİLTRE (F3: F; F3: F <> "")) formül ayrıştırma hatasıyla sonuçlanır. Neyin yanlış olduğuyla ilgili bir fikriniz var mı?
klor

Soru. A: A yerine bir importrange () varsa, aynı importrange () 4 kez yapılmadan bu nasıl yeniden yazılabilir?
Ruby

4
Boşlukları da ele alan biraz basitleştirilmiş cevap, Doug Bradshaw: =INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))(başlangıç ​​satırı A1'i değiştirebilir) tam açıklama: stackoverflow.com/a/27623407/539149
Zack Morris

82

Boş olmayan son hücreyi bulmak için kullanabilirsiniz INDEXve şu şekilde MATCHişlev görür:

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

Sanırım bu biraz daha hızlı ve daha kolay.


1
Bu daha basit ve bunu test ettim. Harika çalışıyor.
Ciaran

24
Yönteminiz, değer bir sayı ise yalnızca son hücreyi buluyor gibi görünüyor, benim yöntemim de dize türündeyse son satırı bulacaktır. Asıl soru tarihlerle ilgiliydi, bu yüzden bu işe yarardı, ancak makale hala dikkat çekerken, farkı belirtmekte fayda var. Her şey ihtiyaçlarınıza bağlı. Sadece bir sayıya ihtiyacınız varsa, bu şekilde tavsiye ederim.
Sam Plus Plus

1
Bu, sütunun sıralandığını varsayar
Andrej Adamenko

Ayrıca şu şekilde yapılabilir=DAYS360(A2;VLOOKUP(99^99;A:A;1))
vstepaniuk

56

A2: A, tarihleri ​​bitişik olarak içeriyorsa, INDEX (A2: A, COUNT (A2: A)) son tarihi döndürecektir. Son formül

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

9
Şahsen bunun kabul edilen cevap olması gerektiğini düşünüyorum. Kısa ve basit.
SwampThingTom

4
Bu en kesin cevaptır. @Poul'un yukarıdaki cevabı bu durum için işe yarasa da, gerçek verilerle gerçek son hücreyi bulmak istedim ve bu, verilerin sıralı olup olmadığına bakar.
Chuck Claunch

4
Bu harika. İkincisi, bunun kabul edilen cevap olması gerektiği önergesi.
shiri

37

Benim favorim:

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

Yani, OP'nin ihtiyacı için:

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

... Her ne kadar yukarıdaki Poul "MAX", son tarih her zaman en son olduğunda daha temiz görünüyor.
Eric Smalling

1
+1 değil, 1 demek istiyordu
Newbrict

1
Bu, soruyu yanıtlamaz - son değeri seçer, ancak boş olmayan son değeri seçmez.
kabaetler

17

Sütun, benim durumumda olduğu gibi yalnızca bitişik olarak eklenen tarihlerle genişletildiyse - son tarihi almak için yalnızca MAX işlevini kullandım.

Nihai formül şöyle olacaktır:

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

3
Genius! Basit ve etkili.
Asu

14

Soru zaten cevaplanmış olsa da, bunu yapmanın güzel bir yolu var.

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

Örneğin:

Veri ise A1:A100ve sütun A'ya biraz daha veri eklemek mümkün istiyorum, bu olabilir demek A1:A105bile ya A1:A1234Bu aralığı kullanabilirsiniz, daha sonra:

A1:A

Örneklem

Dolayısıyla, bir aralıktaki boş olmayan son değeri elde etmek için 2 işlev kullanacağız:

  • COUNTA
  • INDEX

Cevap şudur =INDEX(B3:B,COUNTA(B3:B)).

İşte açıklama:

COUNTA(range) bir aralıktaki değerlerin sayısını döndürür, bunu satır sayısını elde etmek için kullanabiliriz.

INDEX(range, row, col)konumundaki bir aralıktaki değeri döndürür rowve col( col=1belirtilmemişse)

Örnekler:

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

Yukarıdaki resim için yelpazemiz olacak B3:B. Bu yüzden aralığında kaç değerler sayacaktır B3:Btarafından COUNTA(B3:B)ilk. Sol tarafta 88 değer olduğu için üretecek 9, sağ tarafta üretecektir . Son değerin aralığın 1. sütununda olduğunu da biliyoruz, bu B3:Bnedenle colparametresi INDEX1 olmalı ve rowparametresi olmalıdır COUNTA(B3:B).

Not : Lütfen @ bloodymurderlive'ın cevabını o ilk yazdığından beri destekleyin, ben sadece burada açıklıyorum.


1
Bunu beğendim, ancak bazen sonuncusu yerine sondan sonuncu öğeyi döndürdüğü sorunları gördüm.
Eric Smalling

1
@EricSmalling, tüm satırların sonunda fazladan bir satır besleme olduğundan ve kopyalayıp yapıştırdığınızda, boş olmayan hücre olarak kabul edilebilir. Bu sorunu ortaya çıkaran herhangi bir örnek elektronik tablonuz var mı?
Ramazan Polat

En akıllı çözüm gibi görünüyor!
MemLeak

Çalışmıyor. BTW'den alıntı nereden aldın? Google sayfa belgelerinden olduğunu düşündüm.
Atul

1
@RamazanPolat: OP (Google E-Tablolar'da) sütundaki boş olmayan son hücreyi bulmanın yolunu soruyor A1:Abana A sütunundaki boş olmayan son hücre değerini vermiyor
Atul

8

İşte burada bir başkası:

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

Son denklem şu şekilde:

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

Buradaki diğer denklemler işe yarıyor, ancak bunu seviyorum çünkü satır numarasını elde etmeyi kolaylaştırıyor, ki bunu daha sık yapmam gerekiyor. Sadece satır numarası şöyle olacaktır:

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

Başlangıçta bir elektronik tablo sorununu çözmek için sadece bunu bulmaya çalıştım, ancak son girişin satır numarasını veren yararlı hiçbir şey bulamadım, bu yüzden umarım bu biri için yararlıdır.

Ayrıca bu, herhangi bir sıradaki her tür veri için çalışması ve içeriğe sahip satırlar arasında boş satırlar olması ve "" olarak değerlendirilen formüllere sahip hücreleri saymaması gibi ek bir avantaja sahiptir. Ayrıca tekrarlanan değerleri de işleyebilir. Sonuç olarak, burada max ((G: G <> "") * satır (G: G)) kullanan denkleme çok benzer, ancak peşinde olduğunuz şey buysa, satır numarasını çıkarmayı biraz kolaylaştırır .

Alternatif olarak, sayfanıza bir komut dosyası koymak istiyorsanız, bunu çok yapmayı planlıyorsanız, kendi kendinize kolaylaştırabilirsiniz. İşte o 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;
    }
  }
}

Son satırın şu anda düzenlemekte olduğunuz sayfayla aynı olmasını istiyorsanız, buraya yalnızca aşağıdakileri yazabilirsiniz:

=LASTROW()

veya o sayfadan belirli bir sütunun veya başka bir sayfadaki belirli bir sütunun son satırını istiyorsanız, aşağıdakileri yapabilirsiniz:

=LASTROW("Sheet1","A")

Ve genel olarak belirli bir sayfanın son satırı için:

=LASTROW("Sheet1")

Daha sonra gerçek verileri elde etmek için dolaylı olarak kullanabilirsiniz:

=INDIRECT("A"&LASTROW())

veya yukarıdaki komut dosyasını son iki dönüş satırında (gerçek bir sütundan gerçek değeri almak için hem sayfayı hem de sütunu yerleştirmeniz gerekeceğinden son ikisi) değiştirebilir ve değişkeni aşağıdakilerle değiştirebilirsiniz:

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

ve

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

Bu komut dosyasının bir yararı, "" olarak değerlendirilen denklemleri dahil etmek isteyip istemediğinizi seçebilmenizdir. Hiçbir bağımsız değişken eklenmezse, "" olarak değerlendirilen denklemler sayılır, ancak bir sayfa ve sütun belirtirseniz, şimdi sayılacaktır. Ayrıca, senaryonun varyasyonlarını kullanmaya istekliysen çok fazla esneklik var.

Muhtemelen aşırı öldürür, ama hepsi mümkün.


1
"Bilinmeyen işlev SON"
Berit Larsen

Soru başlığını gerçekten cevaplamak için +100 olmalıdır: Son satır, son satırdaki değer değil
Norbert van Nobelen

6

Son değeri elde etmek için bu formül ne olacak?

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

Ve bu, orijinal göreviniz için son bir formül olacaktır:

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

İlk tarihinizin G10'da olduğunu varsayalım.


5

Farklı bir rotaya gittim. Bir satır / sütuna tek tek bir şeyler ekleyeceğimi bildiğim için, önce veri içeren alanları sayarak son satırı buluyorum. Bunu bir sütunla göstereceğim:

=COUNT(A5:A34)

Diyelim ki 21 döndü. A5 4 satır aşağı, bu yüzden 4. satırdan 21. sırayı almam gerekiyor. Bunu inderect kullanarak yapabilirim, şöyle:

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

Veri içeren satırların miktarını bulmak ve bana dizin değiştirici olarak kullandığım bir sayı döndürüyor.


1
Boş hücreler olamayacağını unutmayın. Ayrıca, COUNTA daha fazla senaryoya
uymalıdır

4

bir satır için:

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

bir sütun için:

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

1
Mükemmel cevap. Teşekkür ederim.
Nick

2

Bu, sürekli genişleyen bir sütundaki son değeri almak için bulduğum en basit çözüm gibi görünüyor:

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

2

Bu benim için çalışıyor. Google sayfasında A sütununun son değerini alın:

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

(Varsa aradaki boş satırları da atlar)


1

A sütunundaki en son tarih ile A2 hücresindeki tarih arasındaki farkı hesaplayın.

=MAX(A2:A)-A2

1

Bu, son hücrenin içeriğini verecektir:

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

Bu, son hücrenin adresini verecektir:

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

Bu, son hücrenin satırını verecektir:

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

Belki bir senaryoyu tercih edersin. Bu komut dosyası, yukarıda başka biri tarafından yayınlanan büyük komut dosyasından çok daha kısadır:

Komut dosyası düzenleyicisine gidin ve bu komut dosyasını kaydedin:

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

Bu yapılırsa, bunu bir hücreye girmeniz yeterlidir:

=getLastRow(A:A)

0

Bir amatörün bunu yapma şekli, "= BİRLEŞTİR (" A ", SAYISAL (A1: A9999))" şeklindedir; burada A1, sütundaki ilk hücredir ve A9999, bu sütunun aşağısında herhangi bir girdi olmasını beklediğimden daha aşağıdadır. Ortaya çıkan bu A #, gerektiği gibi DOLAYLI işlevi ile kullanılabilir.


Afedersiniz. Bu yalnızca sütundaki tüm girişler benzersizse çalışır.
Conrad Lindes

1
StackOverflow, Conrad'a katkınız için minnettar olsam da cevabınızda bazı sorunlar var. İlk olarak, tarihlerin benzersiz olduğunu belirtmedi, bu nedenle countunique () yerine count () kullanmalısınız. İkincisi, diğer yanıtlarda görebileceğiniz gibi, dolaylı () ve birleştirme kullanmak index () işlevinin mevcut işlevini çoğaltır. Üçüncüsü, A1: A9999 yerine, neden A1: A kullanılmasın?
sondra.kinsey

0

Son boş olmayan satır numarasını bulmak için (aralarında boşluk bırakarak) aşağıdaki sütunu aramak için kullandım A.

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.