İçindekiler
Bu eğitimde, formüller ve Ayıkla aracı kullanılarak Excel'deki çeşitli metin dizelerinden nasıl sayı çıkarılacağı gösterilmektedir.
Belirli uzunluktaki bir metin dizesinin bir kısmını çıkarmak söz konusu olduğunda, Excel görevi hızlı bir şekilde yerine getirmek için üç Alt Dize işlevi (Sol, Sağ ve Orta) sağlar. Alfasayısal bir dizeden sayıları çıkarmak söz konusu olduğunda, Microsoft Excel... hiçbir şey sağlamaz.
Excel'de bir dizeden bir sayı elde etmek için biraz ustalık, biraz sabır ve iç içe geçmiş bir sürü farklı işlev gerekir. Ya da Extract aracını çalıştırabilir ve işi bir fare tıklamasıyla halledebilirsiniz. Aşağıda her iki yöntemle ilgili tüm ayrıntıları bulacaksınız.
Metin dizesinin sonundan sayı nasıl çıkarılır
Metinden sonra sayının geldiği alfanümerik dizelerden oluşan bir sütununuz olduğunda, bunu elde etmek için aşağıdaki formülü kullanabilirsiniz.
DOĞRU( hücre , LEN( hücre ) - MAX(IF(ISNUMBER(MID( hücre , ROW(INDIRECT("1:"&LEN( hücre )), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( hücre ))), 0)))Formülün mantığı üzerinde biraz sonra duracağız. Şimdilik, basitçe hücre orijinal dizeyi içeren hücreye (bizim durumumuzda A2) bir referansla girin ve formülü aynı satırdaki herhangi bir boş hücreye, örneğin B2'ye girin:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0))
Bu formül yalnızca sondan itibaren sayı alır. Bir dizenin başında veya ortasında da sayı varsa, bunlar yok sayılır:
Çıkarma işlemi, Metin işlevleri kategorisine ait olan RIGHT işlevi ile gerçekleştirilir. Bu işlevin çıktısı her zaman Metin . Bizim durumumuzda, sonuç bir sayısal alt dize Bu da Excel açısından sayı değil metindir.
Eğer sonucun bir sayı (daha sonraki hesaplamalarda kullanabileceğiniz), ardından formülü VALUE işlevine sarın veya sonucu değiştirmeyen bir aritmetik işlem gerçekleştirin, örneğin 1 ile çarpın veya 0 ekleyin. Tek bir sayı içermeyen dizelerdeki hataları yakalamak için IFERROR işlevini kullanın. Örneğin:
=IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")
veya
=IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0)) +0, "")
Not: Dinamik Dizi Excel'de (Office 365 ve 2021), formülü her zamanki gibi Enter tuşuyla girersiniz. Excel 2019 ve önceki sürümlerde yalnızca dizi formülü olarak çalışır, bu nedenle tamamlamak için Ctrl + Shift + Enter tuşlarına basmayı unutmayın.
Bu formül nasıl çalışır?
Alfasayısal bir dizeden sayı çıkarmak için bilmeniz gereken ilk şey, çıkarma işlemine nereden başlayacağınızdır. Bir dizedeki sayısal olmayan son karakterin konumu, bu zor formülün yardımıyla belirlenir:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0))
Mantığı anlamak için, bunu içeriden inceleyelim:
ROW(INDIRECT("1:"&LEN(A2))) kombinasyonu, kaynak dizedeki (A2) toplam karakter sayısına karşılık gelen bir sayı dizisi oluşturur ve bu sıralı sayıları MID'ye başlangıç sayıları olarak sunarız:
MID(A2, {1;2;3;4;5;6;7;8}, 1)
MID fonksiyonu A2'den her bir karakteri çeker ve bunları bir dizi olarak döndürür:
{"0";"5";"-";"E";"C";"-";"0";"1"}
MID bir metin fonksiyonu olduğundan, çıktısı her zaman metindir (fark edebileceğiniz gibi, tüm karakterler tırnak işaretleri içine alınmıştır). Sayısal olanları sayıya dönüştürmek için, diziyi 1 ile çarparız (çift olumsuzlama --MID() aynı etkiye sahip olacaktır). Bu işlemin sonucu, sayılardan ve sayısal olmayan karakterleri temsil eden #VALUE! hatalarından oluşan bir dizidir:
ISNUMBER({0;5;#DEĞER!;#DEĞER!;#DEĞER!;#DEĞER!;0;1})
ISNUMBER fonksiyonu dizinin her bir elemanını değerlendirir ve kararını Boolean değerleri şeklinde verir - sayılar için TRUE, diğer her şey için FALSE:
{TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE}
Bu dizi, IF fonksiyonunun mantıksal testine gider ve burada dizinin her bir elemanı FALSE ile karşılaştırılır:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0)
Her FALSE (sayısal olmayan değer) için, başka bir ROW(INDIRECT()) işlevi dizideki göreli konumunu döndürür. Her TRUE (sayısal değer) için bir sıfır döndürülür. Elde edilen dizi aşağıdaki gibi görünür:
{0;0;3;4;5;6;0;0}
MAX fonksiyonu yukarıdaki dizideki en yüksek sayıyı bulur, bu sayı dizideki son sayısal olmayan değerin konumudur (bizim durumumuzda 6). Basitçe, bu konumu LEN tarafından döndürülen dizinin toplam uzunluğundan çıkarın ve dizinin sağ tarafından kaç karakter çıkarılacağını bildirmek için sonucu RIGHT'a aktarın:
RIGHT(A2, LEN(A2) - 6)
Tamamdır!
Metin dizesinin başından sayı nasıl çıkarılır
Metnin sayıdan sonra göründüğü kayıtlarla çalışıyorsanız, bu genel formülü kullanarak bir dizenin başlangıcından sayıyı ayıklayabilirsiniz:
SOL( hücre , MATCH(FALSE, ISNUMBER(MID( hücre , ROW(INDIRECT("1:"&LEN( hücre )+1)), 1) *1), 0) -1)A2'deki orijinal dizeyle, sayıyı elde etmek için aşağıdaki formülü kullanın:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
Ortada veya sonda kaç hane olursa olsun, yalnızca başlangıç numarası çıkarılır:
Not: Excel 365 ve Excel 2021'de, dinamik diziler için destek nedeniyle, normal bir formül iyi çalışır. Excel 2019 ve önceki sürümlerde, bunu açıkça bir formül yapmak için Ctrl + Shift + Enter tuşlarına basmalısınız. dizi formülü .
Bu formül nasıl çalışır?
Burada, kaynak dizedeki toplam karakter sayısı artı 1'e eşit bir sayı dizisi oluşturmak için yine ROW, INDIRECT ve LEN fonksiyonlarının kombinasyonunu kullanırız (bu ek karakterin rolü biraz sonra anlaşılacaktır).
ROW(INDIRECT("1:"&LEN(A2)+1))
MID ve ISNUMBER önceki örnekte olduğu gibi aynı işi yapar - MID tek tek karakterleri çeker ve ISNUMBER bunları mantıksal değerlere dönüştürür. Ortaya çıkan TRUE ve FALSE dizisi MATCH fonksiyonuna bir arama dizisi olarak gider:
MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)
MATCH, ilk FALSE'ın göreli konumunu hesaplar ve bize dizedeki ilk sayısal olmayan karakterin konumunu verir (A2'de 3). Önceki sayıları çıkarmak için, ilk metin karakterinin konumundan 1'i çıkarırız ve farkı num_chars LEFT fonksiyonunun argümanı:
SOL(A2, 3-1)
Şimdi, ROW(INDIRECT()+1)) tarafından oluşturulan dizideki "fazladan" bir karaktere geri dönelim. Bildiğiniz gibi, bu dizi MID işlevi için başlangıç noktalarını sağlar. +1 olmadan, MID tam olarak orijinal dizede olduğu kadar karakter çıkarır. Dize yalnızca sayılar içeriyorsa, ISNUMBER yalnızca DOĞRU'ları döndürürken, MATCH en az bir YANLIŞ'a ihtiyaç duyar. Bunu sağlamak için bir tane eklerizMID işlevinin boş dizeye dönüştüreceği dizenin toplam uzunluğuna daha fazla karakter ekler. Örneğin, B7'de, MID bu diziyi döndürür:
{"1"; "2"; "3"; "4";""}
Not: RIGHT fonksiyonunda olduğu gibi, LEFT de bir sayısal alt dize Sonucu sayısal bir dize yerine sayı olarak elde etmek için, formülü VALUE işlevine yerleştirin veya ilk örnekte gösterildiği gibi sonucu 1 ile çarpın.
Bir dizede herhangi bir konumdan sayı nasıl alınır
Göreviniz bir dizenin herhangi bir yerinden sayı çıkarmayı gerektiriyorsa, MrExcel forumunda yayınlanan aşağıdaki akıllara durgunluk veren formülü kullanabilirsiniz:
=SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)) * ROW(INDIRECT("1:"&LEN(A2)), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)
Burada A2 orijinal metin dizesidir.
Bu formülü açıklamak ayrı bir makale gerektirecektir, bu nedenle gerçekten çalıştığından emin olmak için çalışma sayfanıza kopyalayabilirsiniz :)
Ancak sonuçları incelediğinizde önemsiz bir dezavantaj fark edebilirsiniz - kaynak dize bir sayı içermiyorsa, formül yukarıdaki ekran görüntüsünde 6. satırda olduğu gibi sıfır döndürür. Bunu düzeltmek için formülü, mantıksal testi kaynak dizenin herhangi bir sayı içerip içermediğini kontrol eden IF deyimine sarabilirsiniz. Eğer içeriyorsa, formül sayıyı çıkarır, aksi takdirde boş birDize:
=IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")
Aşağıdaki ekran görüntüsünde gösterildiği gibi, geliştirilmiş formül güzel bir şekilde çalışıyor (bu iyileştirme için Excel gurumuz Alex'e tebrikler):
Önceki tüm örneklerden farklı olarak, bu formülün sonucu sayı Bundan emin olmak için B sütunundaki sağa hizalanmış değerlere ve kesilmiş baştaki sıfırlara dikkat edin.
İpucu: Excel 365 - Excel 2019'da TEXTJOIN işlevi yardımıyla çok daha basit bir çözüm vardır. Lütfen metni kaldırma ve sayıları tutma bölümüne bakın.
Ultimate Suite ile metin dizesinden numarayı çıkarın
Az önce gördüğünüz gibi, bir metin dizesinden sayı çekmek için önemsiz bir Excel formülü yoktur. Formülleri anlamakta veya veri kümeleriniz için ince ayar yapmakta zorluk çekiyorsanız, Excel'de dizeden sayı almanın bu basit yolunu beğenebilirsiniz.
Excel şeridinize eklenen Ultimate Suite ile herhangi bir alfanümerik dizeden numarayı bu şekilde hızlı bir şekilde alabilirsiniz:
- Şuraya git Ablebits Verileri tab> Metin grubunu seçin ve Özüt :
- Kaynak dizeleri içeren tüm hücreleri seçin.
- Ayıklama aracının bölmesinde Numaraları çıkarın radyo düğmesi.
- Sonuçların formül veya değer olmasını isteyip istemediğinize bağlı olarak Formül olarak ekle kutusunu seçin veya seçili bırakmayın (varsayılan).
Benim tavsiyem, kaynak dizelerde herhangi bir değişiklik yapıldığında çıkarılan sayıların otomatik olarak güncellenmesini istiyorsanız bu kutuyu seçmenizdir. Sonuçların orijinal dizelerden bağımsız olmasını istiyorsanız (örneğin, kaynak verileri daha sonra kaldırmayı planlıyorsanız), bu kutuyu seçmeyin.
- Tıklayınız Sonuçları Ekleyin Düğme. Bitti!
Önceki örnekte olduğu gibi, çıkarma işleminin sonuçları şunlardır sayılar Bu da onlarla sayma, toplama, ortalama alma veya başka hesaplamalar yapma özgürlüğüne sahip olduğunuz anlamına gelir.
Bu örnekte, sonuçları şu şekilde eklemeyi seçtik değerler ve eklenti tam olarak istenileni yaptı:
Eğer Formül olarak ekle onay kutusu seçildiğinde, bir formül Hangisi olduğunu merak ediyor musunuz? Ultimate Suite'in deneme sürümünü indirin ve kendiniz görün :)
Mevcut indirmeler
Excel Extract Number - örnek çalışma kitabı (.xlsx dosyası)
Ultimate Suite - deneme sürümü (.exe dosyası)