Boş girişleri koruyarak, "Bölünmüş" ayrılmış dize


10

Bazı verileri işlemek için Google E-Tablolar'daki (yeni sürüm) SPLITve JOINişlevlerini kullanmaya çalışıyorum ve SPLITboş girişleri korumadığım için sorunla karşılaşıyorum .

Veri kaynağı şu şekilde ayarlanmıştır:

   |  A    B    C    D
-----------------------
1  |  q    5    r    2
2  |  s         t    4
3  |  u    8    v
4  |  w    3    x    6

(Bu veri kümesindeki boş girişler, ölçümünden farklı olan "ölçüm yok" u gösterir 0)

Sütunlarda Ave C, formülü kullanarak istediğim sonucu alıyorum:

=SPLIT(JOIN("~",A1:A4,C1:C4),"~")

Bu, beklendiği gibi q s u w r t v x, her birinin kendi hücresine giden bir satır oluşturur .

Ancak, bu yöntem sütunlarda Bve D. JOINbeklendiği gibi çalışır, çıktı verir:

5~~8~3~2~4~~6

Sahne SPLITbu çıkışı üzerine, ancak, bir problemde sonuçları: Ben başbaşa kaldım 5 8 3 2 4 6arasındaki boş hücreleri olmadan 5ve 8ya aralarında 4ve 6çiftleri yukarı kırılır (örneğin anlamına gelir sve vhücreleri boşaltmak karşılık gelmelidir, ancak bunun yerine wve xdo). Sorun , aralarında boş girişi olan iki sınırlayıcı olarak değil, tek bir sınırlayıcı olarak SPLITyorumlanmasıdır ~~.

Bu tür senaryoda boş girişlerin nasıl korunacağını bilen var mı?

İstenen çıktı şu şekilde görünecektir:

q  s  u  w  r  t  v  x
5     8  3  2  4     6

Bu boş alanlardaki bir boşluk sorunu çözer mi?
ale

"" Yazmak boş girişin korunmasına neden olur (teşekkürler, @AlE.!), Ancak yine de tüm bu girişlere manuel olarak "" yazmak hem çok zaman alıcı hem de hataya açık.
LiberalArtist

Elektronik tablo formülleri benim forte'um değil. IF()Boş alanları otomatik olarak alanlara dönüştürmek için bir şey yapılabilir .
ale

1
Güncelleyin'i:. @ Ale fikri beni kullanarak hemen vadede yapılması hesaplama olsun izin vermedi =ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))ile sütun bir kukla dizi yapmak için "" o zaman için kullanılan boş hücrelere, içinde SPLITve JOIN. Yine de birisinin daha şık bir çözümü olduğunu umuyorum: bu, belgeme bir sürü ekstra şey ekliyor ve veri kümesine daha fazla ölçüm eklendiğinden, birkaç farklı yerde satır numaralarını güncellemem gerekiyor. (En azından şimdilik verileri
ezmeme

Yanıtlar:


3

Aşağıdaki çözümü deneyin.

formül

=ARRAYFORMULA(TRIM(SPLIT(JOIN(" ,", A1:A4,C1:C4), ",")))

Açıklaması

Zaten bize gösterdi SPLITfonksiyon boş hücreler, bu nedenle ayırıcı olarak bu dizeyi tercih yok sayar: " ,". JOINFonksiyonun ara sonucu şuna benzer:
resim açıklamasını buraya girin

Ben ayırıcı seçebilirsiniz SPLITfonksiyonu bu olduğu: ",". SPLITFonksiyonun ara sonucu şuna benzer:
resim açıklamasını buraya girin

Ancak şimdi, ekstra eklenen beyaz boşluklarla uğraşmak zorundayız. Bu nedenle TRIM, tüm izleyen veya önde gelen beyaz boşlukları (ile birlikte ARRAYFORMULA) kaldırmak için işlevi kullandım . LENHer ara sonucun değerlerini karşılaştırın .

Sonuç

resim açıklamasını buraya girin

Misal

Sizin için bir örnek dosya oluşturdum: Boş hücreleri korumak için SPLIT


2

Aşağıdaki çözümü deneyin.

kod

function myJoin() { 
  var output = []; 
  for(var i = 0, iLen = arguments.length; i < iLen; i++) {
    for(var r = 0, rLen = arguments[i].length; r < rLen; r++) {
      output.push(arguments[i][r][0]);
    }    
  }
  return [output];
}

kullanım

resim açıklamasını buraya girin

İşleve istediğiniz kadar çok aralık ekleyin; bunlar işlenecektir. Bu küçük komut dosyasını e-tablonuzun komut dosyası düzenleyicisine ekleyin (Araçlar> Komut Dosyası düzenleyicisi; Kaydet düğmesine basın).

Misal

Sizin için bir örnek dosya oluşturdum: Boş hücreleri korumak için SPLIT


2

Kısa cevap

Aşağıdaki formül istenen sonucu döndürür.

=Transpose({A1:B4;C1:D4})

Genişletilmiş cevap

Bu cevap, seçilen yaklaşımın nasıl işe yaratılacağını tartışmak yerine istenen sonucu elde etmenin bir yolunu sağlamaya odaklanmıştır.

XY Sorunu

OP X almak istiyor ve Y'nin bu sonucu döndürmesi gerektiğini düşünüyor. Bu yaklaşım sorunlu çünkü Y'nin bazı uyarıları var. Bu bir belediye başkanı problemi olabilir, çünkü OP, X'i elde etmenin bir yolunu sormak yerine Y'yi nasıl çalıştıracağını soruyor, ancak çok büyük değil çünkü bağlam ve istenen sonuç sağlandı.

Çözüm

Google E-Tablolar, çok değerli sonuçları son kullanıcılar açısından çok basit bir şekilde işleyebilir. Öte yandan, son kullanıcıların dizileri tanımlamasına izin vermek için özel bir gösterimin kullanılmasına izin verir.

Yukarıdaki özellikler, SPLIT () ve JOIN () işlevlerini kullanmadan ve bunlara özgü uyarılar olmadan beklenen sonucu elde etmeyi mümkün kılar.

Formül açıklaması

{A1:B4;C1:D4}

İki 2 X 4 dizisi / aralığı tarafından oluşturulan 2 X 8 dizisidir. Noktalı virgül ( ;), e-tablonun ondalık ayırıcısının bir nokta ( .) olduğunu varsayar . Ondalık ayırıcı virgülse, ters eğik çizgi ( \) ile değiştirin.

=Transpose({A1:B4;C1:D4})

2 X 8 dizisini 8 X 2 dizisine dönüştürür.

Bu yöntemin avantajlarından biri, boş hücrelerin özel olarak işlenmesini gerektirmemesidir. Diğer avantajları, çok kompakt bir formül olması ve adaptasyonunun çok kolay olmasıdır.

Referanslar


1

Eğer ayırıcıya katılır ve temelde bir önceki alana sahip bir virgül "," yaparsanız, tekrar böldüğünüzde o alanı otomatik olarak korur:

=SPLIT(JOIN(" ,",A1:A4),",")
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.