İçindekiler
Bu eğitimde, yerel formülleri ve özel işlevleri kullanarak Excel'de metni sayılardan nasıl ayıracağınızı öğreneceksiniz. Ayrıca metin ve sayıları iki ayrı sütuna nasıl ayıracağınızı da öğreneceksiniz.
Şunu hayal edin: analiz için ham veri alıyorsunuz ve sayıların bir sütunda metinle karıştırıldığını görüyorsunuz. Çoğu durumda, daha yakından inceleme için bunları ayrı sütunlarda bulundurmak kesinlikle daha uygun olacaktır.
Homojen verilerle çalışıyorsanız, aynı konumdan aynı sayıda karakteri çıkarmak için muhtemelen LEFT, RIGHT ve MID işlevlerini kullanabilirsiniz. Ancak bu, laboratuvar testleri için ideal bir senaryodur. Gerçek hayatta, sayıların metinden önce, metinden sonra veya metin arasında geldiği farklı verilerle uğraşmanız muhtemeldir. Aşağıdaki örnekler tam olarak bunun için çözümler sunardava.
Excel hücrelerindeki metinleri kaldırma ve sayıları tutma
Çözüm Excel 365, Excel 2021 ve Excel 2019'da çalışır
Microsoft Excel 2019, önceki sürümlerde bulunmayan birkaç yeni işlev sundu ve biz de sayı içeren bir hücreden metin karakterlerini çıkarmak için bu işlevlerden biri olan TEXTJOIN'i kullanacağız.
Genel formül şöyledir:
TEXTJOIN("", TRUE, IFERROR(MID( hücre , ROW(INDIRECT( "1:"&LEN( hücre ))), 1) *1, ""))Excel 365 ve 2021'de bu da çalışacaktır:
TEXTJOIN("", TRUE, IFERROR(MID( hücre , SEQUENCE(LEN( hücre )), 1) *1, ""))İlk bakışta formüller biraz korkutucu görünebilir, ancak işe yarıyorlar :)
Örneğin, A2'deki sayılardan metin kaldırmak için, B2'ye aşağıdaki formüllerden birini girin ve ardından bunu gerektiği kadar hücreye kopyalayın.
Excel 365 - 2019'da:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2)), 1) *1, ""))
Excel 2019'da Ctrl + Shift + Enter ile dizi formülü olarak girilmelidir. Dinamik dizi Excel'de Enter tuşuyla tamamlanan normal bir formül olarak çalışır.
Excel 365 ve 2021'de:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, "")
Sonuç olarak, bir hücreden tüm metin karakterleri kaldırılır ve sayılar tutulur:
Bu formül nasıl çalışır?
Mantığı daha iyi anlamak için formülü içeriden incelemeye başlayalım:
Kaynak dizedeki toplam karakter sayısına karşılık gelen bir sayı dizisi oluşturmak için ROW(INDIRECT("1:"&LEN(string)) veya SEQUENCE(LEN(string)) kullanırsınız ve ardından bu sıralı sayıları başlangıç sayıları olarak MID işlevine beslersiniz. B2'de formülün bu kısmı aşağıdaki gibi görünür:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
MID fonksiyonu A2'deki her karakteri ilk karakterden başlayarak çıkarır ve bir dizi olarak döndürür:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Bu dizi 1 ile çarpılır. Sayısal değerler hiçbir değişiklik olmadan kalır, sayısal olmayan bir karakterin çarpılması ise #VALUE! hatası ile sonuçlanır:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
IFERROR işlevi bu hataları ele alır ve bunları boş dizelerle değiştirir:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Bu son dizi, dizideki boş olmayan değerleri birleştiren TEXTJOIN işlevine sunulur ( ignore_empty argümanı TRUE olarak ayarlanır) sınırlayıcı için boş bir dize ("") kullanarak:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
İpucu: Excel 2016 - 2007 için de bir çözüm var, ancak formül çok daha karmaşık. Bu öğreticide bulabilirsiniz: Excel'de sayılar nasıl çıkarılır.
Sayılardan metin kaldırmak için özel işlev
Çözüm tüm Excel sürümleri için çalışır
Excel'in eski bir sürümünü kullanıyorsanız veya yukarıdaki formülleri hatırlaması çok zor buluyorsanız, daha basit bir sözdizimine ve aşağıdaki gibi kullanıcı dostu bir ada sahip kendi işlevinizi oluşturmanızı engelleyen hiçbir şey yoktur Metni Kaldır Kullanıcı tanımlı fonksiyon (UDF) iki şekilde yazılabilir:
VBA kodu 1:
Burada, kaynak dizedeki her karaktere tek tek bakarız ve sayısal olup olmadığını kontrol ederiz. Eğer bir sayı ise, karakter sonuç dizesine eklenir.
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA kodu 2:
Kod, düzenli bir ifadeyi işlemek için bir nesne oluşturur. RegExp kullanarak, kaynak dizeden 0-9 rakamları dışındaki tüm karakterleri kaldırırız.
Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionKüçük çalışma sayfalarında, her iki kod da eşit derecede iyi performans gösterecektir. İşlevin yüzlerce veya binlerce kez çağrıldığı büyük çalışma sayfalarında, VBScript.RegExp kullanan kod 2 daha hızlı çalışacaktır.
Kodu çalışma kitabınıza eklemek için ayrıntılı adımları burada bulabilirsiniz: Excel'de VBA kodu nasıl eklenir.
Hangi yaklaşımı seçerseniz seçin, son kullanıcı açısından metni silme ve sayıları bırakma işlevi bu kadar basittir:
RemoveText(string)Örneğin, A2 hücresinden sayısal olmayan karakterleri kaldırmak için B2'deki formül şöyledir:
=RemoveText(A2)
Sadece sütunun aşağısına kopyalayın ve bu sonucu elde edin:
Not: Hem yerel formüller hem de özel işlev bir sayısal dize Bir sayıya dönüştürmek için sonucu 1 ile çarpın veya sıfır ekleyin ya da formülü VALUE işlevine sarın. Örneğin:
=RemoveText(A2) + 0
= DEĞER(Metni Kaldır(A2))
Excel'de metin dizesinden sayılar nasıl kaldırılır
Çözüm Excel 365, Excel 2021 ve Excel 2019'da çalışır
Alfanümerik bir dizeden sayıları kaldırmak için kullanılan formüller, önceki örnekte tartışılanlara oldukça benzerdir.
Excel 365 - 2019 için:
TEXTJOIN("", TRUE, IF(ISERR(MID( hücre , ROW(INDIRECT( "1:"&LEN( hücre )), 1) *1), MID( hücre , ROW(INDIRECT("1:"&LEN( hücre ))), 1), ""))Excel 2019'da, bunu bir dizi formülü Ctrl + Shift + Enter tuşlarına birlikte basarak.
Excel 365 ve 2021 için:
TEXTJOIN("", TRUE, IF(ISERROR(MID( hücre , SEQUENCE(LEN( hücre 1) *1), MID( hücre , SEQUENCE(LEN( hücre )), 1), ""))Örneğin, A2'deki bir dizeden sayıları çıkarmak için formül şöyledir:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2)), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1), "")
Ya da
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")
Sonuç olarak, bir hücreden tüm sayılar kaldırılır ve metin karakterleri korunur:
Yukarıdaki ekran görüntüsünde gösterildiği gibi, formül bir dizedeki herhangi bir konumdan sayısal karakterleri çıkarır: başta, sonda ve ortada. Ancak, bir uyarı vardır: eğer bir dize bir sayı ile başlar ve ardından bir boşluk gelir 'de bu boşluk korunur, bu da baştaki boşluklar sorununu ortaya çıkarır (B2'de olduğu gibi).
Fazlalıklardan kurtulmak için metinden önce boşluklar formülünü TRIM işlevine şu şekilde sarın:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
Şimdi, sonuçlarınız kesinlikle mükemmel!
Bu formül nasıl çalışır?
Özünde, formül önceki örnekte açıklandığı gibi çalışır. Aradaki fark, TEXTJOIN işlevine sunulan son diziden metni değil sayıları kaldırmanız gerektiğidir. Bunu yapmak için, IF ve ISERROR işlevlerinin kombinasyonunu kullanırız.
Hatırlayacağınız gibi, MID(...)+0 aynı konumlardaki metin karakterlerini temsil eden bir dizi sayı ve #VALUE! hatası üretir:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
ISERROR fonksiyonu hataları yakalar ve ortaya çıkan Boolean değerleri dizisini IF'ye aktarır:
{YANLIŞ;YANLIŞ;YANLIŞ;DOĞRU;DOĞRU;DOĞRU;DOĞRU;DOĞRU;DOĞRU;DOĞRU;DOĞRU;DOĞRU;DOĞRU;DOĞRU}
IF fonksiyonu TRUE (hata) gördüğünde, ilgili metin karakterini başka bir MID fonksiyonu yardımıyla işlenen diziye ekler. IF fonksiyonu FALSE (sayı) gördüğünde, boş bir dize ile değiştirir:
{"";"";"";""; "S"; "u"; "n"; "s"; "e"; "t";""; "R"; "o"; "a"; "d"}
Bu son dizi TEXTJOIN'e aktarılır, böylece metin karakterlerini birleştirir ve sonucu çıktı olarak verir.
Metinden sayıları kaldırmak için özel işlev
Çözüm tüm Excel sürümleri için çalışır
Sağlam bir formülün basit tutulması gerektiğini akılda tutarak, herhangi bir sayısal karakteri çıkarmak için kullanıcı tanımlı işlevin (UDF) kodunu paylaşacağım.
VBA kodu 1:
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionVBA kodu 2:
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionRemoveText fonksiyonunda olduğu gibi, ikinci kodun da performansı optimize etmek için büyük çalışma sayfalarında kullanılması daha iyidir.
Kod çalışma kitabınıza eklendikten sonra, bu özel işlevi kullanarak bir hücreden tüm sayısal karakterleri kaldırabilirsiniz:
RemoveNumbers(string)Bizim durumumuzda, B2'deki formül şöyledir:
=RemoveNumbers(A2)
Varsa baştaki boşlukları kırpmak için, özel işlevi TRIM'in içine yerel bir formülde yaptığınız gibi yerleştirin:
=TRIM(RemoveNumbers(A2))
Sayıları ve metni ayrı sütunlara bölme
Metin ve sayıları iki sütuna ayırmak istediğinizde, işi tek bir formülle halletmek güzel olurdu, değil mi? Bunun için Metni Kaldır ve RemoveNumbers fonksiyonlarını tek bir fonksiyona SplitTextNumbers veya basitçe Bölünmüş ya da ne isterseniz :)
VBA kodu 1:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If EndFonksiyonVBA kodu 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End FunctionYeni özel fonksiyonumuz iki argüman gerektirir:
SplitTextNumbers(string, is_remove_text)Nerede is_remove_text hangi karakterlerin çıkarılacağını gösteren bir Boolean değeridir:
- DOĞRU veya 1 - metni kaldırın ve sayıları koruyun
- FALSE veya 0 - sayıları kaldırın ve metni koruyun
Örnek veri setimiz için formüller şu şekildedir:
Sayısal olmayan karakterleri kaldırmak için:
=SplitTextNumbers(A2, TRUE)
Sayısal karakterleri silmek için:
=SplitTextNumbers(A2, FALSE)
İpucu: Baştaki boşluklarla ilgili olası bir sorunu önlemek için, TRIM işlevinde sayıları kaldıran formülü her zaman sarmanızı öneririm:
=TRIM(SplitTextNumbers(A2, FALSE))
Rakamları veya metinleri kaldırmak için özel araç
İşleri gereksiz yere karmaşıklaştırmaktan hoşlanmayanlar için, Excel'de metin veya sayıları kaldırmanın kendi yolunu göstereceğim.
Ultimate Suite'imizin Excel şeridinize eklendiğini varsayarsak, yapacağınız şey budur:
- Üzerinde Ablebits Verileri sekmesinde Metin grubunu seçin, tıklayın Kaldırmak > Karakterleri Kaldır .
İpucu: Sonuçlar önde gelen bazı boşluklar içeriyorsa, Boşlukları Kırp aracı bunları hemen ortadan kaldıracaktır.
Excel'de bir dizeden metin veya sayısal karakterler bu şekilde kaldırılır. Okuduğunuz için teşekkür ediyor ve gelecek hafta sizi blogumuzda görmeyi dört gözle bekliyorum!
Mevcut indirmeler
Excel'de metin veya sayıları kaldırma - örnekler (.xlsm dosyası)
Ultimate Suite - deneme sürümü (.exe dosyası)