İçindekiler
Bu makalede, Excel VBA'da dizeyi sayıya dönüştürmek için çeşitli yöntemleri tartışacağız. VBA kod örnekleriyle dizeyi sayıya dönüştürmek için yerleşik işlevleri nasıl kullanacağımızı ve bunları kullanarak özel bir işlev oluşturmayı göreceğiz.
Alıştırma Çalışma Kitabını İndirin
Bu makaleyi okurken egzersiz yapmak için bu alıştırma çalışma kitabını indirin.
Dizeyi Sayıya Dönüştür.xlsmExcel VBA'da Dizeyi Sayıya Dönüştürmenin 3 Yolu
1. Tür Dönüştürme İşlevlerini Kullanarak Dizeyi Sayıya Dönüştürme
Excel birkaç yerleşik tip dönüştürme fonksiyonları Bunları VBA kodumuzda string veri tipinden farklı veri tiplerine kolayca dönüştürmek için kullanabiliriz.
1.1 Dizeden Tamsayıya
Dönüştürmek için Dize için tamsayı 'yi kullanabiliriz. CInt işlevi kodumuzda. CInt işlevi sadece bir argüman ve bu bir sayısal değer Visual Code Editor'de aşağıdaki kodu deneyelim.
Sub StringToNumber() MsgBox CInt(12.3) End Sub
Basın F5 için koşmak ve kod . Çıktı şu şekilde gösterilir MsgBox .
CInt işlevi dönüştürüldü ve sayısal dize değer ("12.3" ) bir tamsayı 12.
Hakkında daha fazla bilgi edinmek için CInt işlevi aşağıdaki kodu kod düzenleyicide çalıştırın ve gözlemlemek ve Sonuçlar .
Sub StringToNumber() For i = 3 To 7 Cells(i, 3).Value = CInt(Cells(i, 2)) Next End Sub
Bu çıktı burada aşağıdaki gibidir ekran görüntüsü .
Kod Açıklaması
Bu kodda, kullandığımız İçin...Sonraki döngü uygulamak için CInt işlevi hücre dizileri üzerinde B3:B7. Bu çıkışlar hücrelere yazdırılır C3:C7. Biz kullandık Hücrelerin işlevi girdi değerlerini ve çıktı değerlerinin nereye yazdırılacağını belirtmek için.
Sonuçlar
CInt işlevi dönüştürüldü 25.5 için sonraki tam sayı 26 Diğer yandan dönüştürüldü 10.3 için 10, 11 değil. Ondalık sayısal bir değer .5'ten küçük olduğunda, işlev aynı sayıya yuvarlar. ondalık sayısal dize değeri sonraki tamsayı ise sayı eşittir veya .5'ten büyük.
Not
Tamsayı değeri şu aralıktadır -32,768 için 32,767 olan sayısal bir değer koyarsak bu aralığın dışında , Excel bir hata .
1.2 Dizeden Uzun'a
Bu CLng işlevi sayısal bir dize değerini bir uzun veri türü CInt fonksiyonuna benzer şekilde çalışır. aralık arasında olan -2,147,483,648 ve 2,147,483,647.
Çalıştırılacak kod aşağıda yer almaktadır: Sub StringToNumber() For i = 3 To 9 Cells(i, 3).Value = CLng(Cells(i, 2)) Next End Sub
Burada, hücreler B3:B9 bazılarını içerir sayısal dize değeri ve dönüştürüldü l ong numaraları hücrelerde C3:C9. Bu CLng işlevi dönüştürüldü -32800 ve 32800 başarıyla uzun sayılar hangi CInt işlevi yapamazdı. Ama aynı zamanda hata eğer girdi sayısal değer o menzil dışında.
1.3 Dizeden Ondalık Sayıya
Kullanarak CDec işlevi yapabiliriz dönüştürmek a sayısal dize değeri bir ondalık veri türü. çalıştır aşağıdaki kodu dönüştürmek ve sayısal değerler hücrelerde B3:B7 için ondalık veri türü.
Sub StringToNumber() For i = 3 To 7 Cells(i, 3).Value = CDec(Cells(i, 2)) Next End Sub
1.4 Dizeden Tekliye
Bu örnekte, girdi dizelerini tek veri tipi (tek hassasiyetli kayan noktalı) sayıları kullanmamız gerekir. CSng işlevi .
Tek veri tipi aralıkları- (i) -3.402823E38 için -1.401298E-45 için negatif Sayılar.
(ii) 1.401298E-45 için 3.402823E38 için pozitif Sayılar.
Aşağıdaki kodu visual basic editöründe çalıştırın.
Sub StringToNumber() For i = 3 To 7 Cells(i, 3).Value = CSng(Cells(i, 2)) Next End Sub
Çıktıda, hücreler B3:B9 bazılarını içerir sayısal dize değeri, ve dönüştürülmüş tek veri tipi sayılar hücrelerde C3:C9. Ama aynı zamanda hata eğer girdi sayısal değer o menzil dışında.
1.5 Dizeden Çift Kişiye
Bu örnekte, girdi dizelerini çift veri türü (çift hassasiyetli kayan noktalı) sayıları kullanmamız gerekir. CDbl işlevi .
Çift veri tipi aralıkları- (i) -1.79769313486231E308 için -4.94065645841247E-324 için negatif Sayılar.
(ii) 4.94065645841247E-324 için 1.79769313486232E308 için pozitif Sayılar.
Aşağıdaki kodu visual basic editöründe çalıştırın.
Sub StringToNumber() For i = 3 To 7 Cells(i, 3).Value = CSng(Cells(i, 2)) Next End Sub
Çıktıda, hücreler B3:B9 bazılarını içerir sayısal dize değeri ve dönüştürülmüş çift veri tipi sayılar hücrelerde C3:C9. Ama aynı zamanda hata eğer girdi sayısal değer o menzil dışında.
1.6 Dizeden Para Birimine
Bu para birimi veri türü hesaplamalar aşağıdakilerle ilgili olduğunda kullanışlıdır para . Dahası, eğer daha fazla doğruluk istiyorsak sabit - nokta hesaplama veri tipinin kullanılması iyi bir seçimdir. CCur işlevi bir dizeyi bir dizeye dönüştürmek için para birimi veri türü . veri türü aralıkları gelen -922,337,203,685,477.5808 için 922,337,203,685,477.5808.
Kod dönüştürmek sayısal dize değeri hücrelerin B3:B7 için para birimi veri türü hücrelerde C3:C7 burada aşağıda.
Sub StringToNumber() For i = 3 To 7 Cells(i, 3).Value = CCur(Cells(i, 2)) Next End Sub
1.7 Dizeden Bayta
Bu CByte işlevi sayısal dize değerlerini bayt veri türü arasında değişen 0 ila 255.
Kod aşağıdaki gibidir :
Sub StringToNumber() For i = 3 To 7 Cells(i, 3).Value = CByte(Cells(i, 2)) Next End Sub
Çıktıda, hücreler B3:B9 bazılarını içerir sayısal dize değeri, ve dönüştürülmüş bayt veri tipi sayıları hücrelerde C3:C9. Ama aynı zamanda hata eğer girdi sayısal değer o menzil dışında.
Daha fazlasını okuyun: Excel'de VBA Kullanarak Dizeyi Uzun'a Dönüştürme
Benzer Okumalar
- Excel VBA'da Dizeyi Çift Kişiye Dönüştürme (5 Yöntem)
- Excel VBA ile Metni Sayıya Dönüştürme (Makrolarla 3 Örnek)
- Excel'de Sayıya Dönüştürme Hatasını Düzeltme (6 Yöntem)
- Excel'de Bilimsel Gösterimi Sayıya Dönüştürme (7 Yöntem)
2. Excel'de Dizeyi Kontrol Etmek ve Sayıya Dönüştürmek için Özel VBA İşlevinin Kullanımı
Bu örnekte, bir özel fonksiyon dizeleri sayılara dönüştürmek için. kullanım Bu özel fonksiyon bizim çalışma sayfası gibi yerleşik işlev . Bu örnekte, aşağıdakileri kullanacağız CInt işlevi için dönüştürmek dizeleri tamsayılar oluştururken özel fonksiyon. Aynı zamanda tüm diğer fonksiyonlar içinde açıklanan yöntem 1 dönüştürmek için dizeler için farklı veri türleri Şimdi, bunu gerçekleştirmek için aşağıdaki adımları izleyin.
Adımlar:
- Burada, hücrelerde B3:B7, bazı sayısal dize değerlerimiz var.
- Şimdi, visual basic editöründe, kopya ve macun aşağıdaki kodu girin ve ardından Ctrl + S için Kaydet
Function StringToNumber(inputStr) Dim convertedNum As Variant If IsNumeric(inputStr) Then If IsEmpty(inputStr) Then convertedNum = "-" Else convertedNum = CInt(inputStr) End If Else convertedNum = "-" End If StringToNumber = convertedNum End Function
- Hücre içinde C3 , yazmaya başla ve fonksiyon adı ( StringToNumber ). Excel otomatik olarak öner ve fonksiyon kullanmak için. Basın ve Sekme tuşu fonksiyona girmek için.
- koy hücre referansı B3 tek argüman olarak.
- Şimdi, basın Girin parantezleri kapattıktan sonra.
- Bulmak Doldurma Kolu en sağ alt köşe hücre C3 için uygulamak hücrelere işlev C4:C7.
- Son çıktı, dize değerlerinden elde edilen tam sayılardır.
3. Excel'de Seçili Bir Hücre Aralığını Sayılara Dönüştürmek için VBA Kodu
Bu örnekte, bir aralık . seçi̇lmi̇ş hücreler dizgi değerlerini tam sayılara dönüştürür. Eğer herhangi bir hücre sayısal olmayan içinde değer varsa, çıktı bir tire (-) çizgisi yerine . Takip edin adımlar :
- Hücreleri seçin B3:B6 sahip olmak sayısal dizeler değerleri ve B7 içeren bir sayısal olmayan
- İçinde Visual Basic Düzenleyicisi kopya ve macun aşağıdaki kod .
Sub StringToNumber() Dim convertedNum As Variant For Each cell In Selection If IsNumeric(cell) Then If IsEmpty(cell) Then convertedNum = "-" Else convertedNum = CInt(cell) End If Else convertedNum = "-" End If With cell .Value = convertedNum.HorizontalAlignment = xlCenter End With Sonraki hücre End Sub
- Şimdi, basın F5 için koşmak ve çıktı aşağıda gösterildiği gibi ekran görüntüsü .
Notlar
- Biz kullandık isNumeric fonksiyonu içinde 2. ve 3. yöntemleri VBA kodumuzda bir ifadenin sayıya dönüştürülüp dönüştürülemeyeceğini kontrol eder.
- İçinde yöntem 1 için yerleşik işlevleri (CInt, CDbl, CSng.....) kullandık. sayısal dize değerlerini dönüştürme için sayılar . Ama eğer bir sayısal olmayan değer , bir gösterecek uyuşmazlık hatası .
Sonuç
Artık Excel'de dize değerlerini sayılara nasıl dönüştüreceğimizi biliyoruz. Umarız, bu işlevi daha güvenle kullanmanızı teşvik eder. Herhangi bir sorunuz veya öneriniz varsa aşağıdaki yorum kutusuna yazmayı unutmayın.