Değiştir komutunun makroda yanlış sonuç vermesinin nedeni ne olabilir?

Katılım
21 Ocak 2008
Mesajlar
311
Excel Vers. ve Dili
Excel 2013 / Türkçe

İndirme linkini verdiğim örnek dosyada da göreceğiniz gibi,
1.234,567 formatında yazılmış sayıları, noktaları yok ederek, 1 234, 567 formatına dönüştürmek istiyorum. (Hücreler sayılar için; 0 000.000 şeklinde biçimlendirildi.)

Elle ctrl+h (bul ve değiştir) komutunu çalıştırdığımda, B3:D3 aralığındaki, sayıları istediğim formata çevirebilmekte.
Aynı işlemi makro ile yaptırdığımda, sayılar 1234567 şekline dönmekte. Yani makroda tanımlı olmadığı halde "," de noktalarla birlikte yok olmakta.

Acaba yanlış mı yapıyorum diye, bu işlemi defalarca yaptım. Hep aynı şey oldu. İşlemi elle yaptığımda "virgül"ün başına bir şey gelmemekte ama makroyu çalıştırdığımda "virgül" yok olmakta.

Dosyayı ve makroyu inceleyip, makronun neden böyle problemli çalışmakta olduğunu bulmanız mümkün mü?
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,370
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

Tam da sizin anlattığınız gibi oluyor. Manuel yapınca doğru çalışıyor, makro ile yapınca şaşırıyor.

Anlamadım.
 

Greenblacksea53

Altın Üye
Katılım
5 Ocak 2019
Mesajlar
572
Excel Vers. ve Dili
Ofis 365 Tr
Altın Üyelik Bitiş Tarihi
05-01-2025
C++:
Replacement:=" ",
Bu şekilde denedin mi ?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Muhtemelen sebebi makroda virgülün sayfada nokta olarak ve noktanın da sayfada virgül olarak işlem görmesi.

Bul/Değiştir yerine hücreleri 1 ile çarptırmayı deneyebilirsiniz.
 

Greenblacksea53

Altın Üye
Katılım
5 Ocak 2019
Mesajlar
572
Excel Vers. ve Dili
Ofis 365 Tr
Altın Üyelik Bitiş Tarihi
05-01-2025
C++:
Replacement:=" ",
Bu şekilde denedin mi ?
C++:
        Range("B3:D3").Select
        Selection.Replace What:=".", Replacement:=" ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Bu şekilde istediğini veriyor.. Denedim
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
C++:
        Range("B3:D3").Select
        Selection.Replace What:=".", Replacement:=" ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Bu şekilde istediğini veriyor.. Denedim
Sayın A_day muhtemelen hücreyi sayıya dönüştürmek istiyor. Sizin verdiğiniz çözümde araya boşluk eklendiği için hücre sayı değil metin olarak kalıyor.
 
Katılım
21 Ocak 2008
Mesajlar
311
Excel Vers. ve Dili
Excel 2013 / Türkçe
İlginiz için teşekkürler ediyorum.

Replacement:=" "

kullandığımda sayıyı 1 234,567 şeklinde metin haline dönüştürüyor. Eğer bu metni 1234,567 şeklinde sayıya dönüştürebilirsem, belki sorunu aşarım ama makroya boşluğu yok etmesi için ekleme yaptığımda, bu kez de boşlukla birlikte virgülü de yok ediyor.

Bu sorunu aşacak bir çözümü olan varsa sevinirim...
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,370
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Aşağıdaki kodlarda bir sorunla karşılaşmadım, deneyiniz.

Kod:
Sub Makro1()

    Dim rng As Range
    
    For Each rng In Range("B3:D3")
        rng = rng + 0
    Next rng
            
End Sub
 
Katılım
21 Ocak 2008
Mesajlar
311
Excel Vers. ve Dili
Excel 2013 / Türkçe
Necdet bey ilginize teşekkür ediyorum.

rng = rng + 0

satırında

Run-time error'13':
Type mismatch

hatası veriyor...
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Necdet Üstadımızın önerisinin bir benzerini "1 ile çarpma" şeklinde önermiştim ve örnek dosyanızda da sıkıntısız çalışmıştı. Necdet Bey de muhtemelen deneyerek göndermiştir (hatta sıkıntı olmadığını belirtiyor). Paylaştığınız dosyayla asıl dosyanız birbirinden farklı olabilir mi?
 
Katılım
21 Ocak 2008
Mesajlar
311
Excel Vers. ve Dili
Excel 2013 / Türkçe
Yusuf bey, 1 ile çarpma mevzuunu anlayamadım. Dosyam üzerinden hareket edersek;

B4 hücresine =B3*1 yazmamı kastediyorsanız, böyle yazdığımda da error veriyor.

Bu 1'le çarpma işlemini, makro içerisinde yapmamı mı kastettiniz, tam anlayamadım.

Benim "Bölge" ayarlarımda sayı biçimlendirmesi;
ondalık simgesi (.) ile,
basamak gruplandırma ( ) boşluk ile tanımlı.
Yani 1.234,567 şeklindeki bir sayı benim makinamda 1 234.567 şeklinde görünüyor.

Bu nedenle mi hata alıyorum, bilmiyorum...
 
Katılım
20 Şubat 2012
Mesajlar
242
Excel Vers. ve Dili
office2007 Türkçe
Deneyin

Kod:
Function streal(sval As String) As Double
    Dim isign As Integer, iflag As Integer, idiv As Integer
    Dim rval As Double, rtemp As Double
    
    rval = 0
    rtemp = 0
    isign = 1
    iflag = 1
    idiv = 1
    
    ipos = Len(sval)
    If (ipos = 0) Then
        streal = 0#
        Exit Function
    End If
    
    For i = 1 To ipos
        If (Mid(sval, i, 1)) = " " Then
            GoTo 9000
        ElseIf (Mid(sval, i, 1)) = "+" Then
            isign = 1
            GoTo 9000
        ElseIf (Mid(sval, i, 1)) = "-" Then
            isign = -1
            GoTo 9000
        ElseIf (iflag = 1) And (Mid(sval, i, 1) >= "0") And (Mid(sval, i, 1) <= "9") Then
            rval = (rval * 10) + (CDbl(Mid(sval, i, 1)))
            GoTo 9000
        ElseIf (Mid(sval, i, 1) = ",") Then
            iflag = 0
            GoTo 9000
        ElseIf (iflag = 0) And (Mid(sval, i, 1) >= "0") And (Mid(sval, i, 1) <= "9") Then
            idiv = idiv * 10
            rtemp = (rtemp * 10) + (CDbl(Mid(sval, i, 1)))
            GoTo 9000
        Else
        End If
9000:
        Next i
        
        If (rtemp <> 0) Then
            rtemp = rtemp / idiv
        End If
        streal = (rval + rtemp) * isign
        
End Function
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Necdet Bey'in kodlarında B3: D3 aralığındaki her hücre sırayla 0 ile toplanıp aynı hücreye yazılıyor. Ben de 0 ile toplamak yerine 1 ile çarpmak şeklinde önermiştim ama kod örneği vermemiştim. rng = rng+0 yerine rng*1 olarak kullanırsanız çarpmış olursunuz ve sonuçta istediğiniz sonuca ulaşırsınız.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,239
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Aşağıda tarif ettiğiniz şekilde bende bölgesel ayarlarımı aynı yaptım. İlk mesajda paylaştığınız dosyanızı açtığımda İlgili hücrelerdeki verileri sola hizalı olduğunu gördüm. Yani sayı görünümlü METİN biçiminde veriler..

Yusuf bey, 1 ile çarpma mevzuunu anlayamadım. Dosyam üzerinden hareket edersek;

B4 hücresine =B3*1 yazmamı kastediyorsanız, böyle yazdığımda da error veriyor.

Bu 1'le çarpma işlemini, makro içerisinde yapmamı mı kastettiniz, tam anlayamadım.

Benim "Bölge" ayarlarımda sayı biçimlendirmesi;
ondalık simgesi (.) ile,
basamak gruplandırma ( ) boşluk ile tanımlı.
Yani 1.234,567 şeklindeki bir sayı benim makinamda 1 234.567 şeklinde görünüyor.

Bu nedenle mi hata alıyorum, bilmiyorum...

Eğer amacınız bu verileri sayıya dönüştürmekse Necdet beyin kodunu aşağıdaki şekilde değiştirince bu işlem oluyor.

C++:
Sub Test()
    Dim rng As Range
   
    For Each rng In Range("B3:D3")
        If Not IsNumeric(rng) Then
            rng = Replace(rng, ".", "") + 0
        End If
    Next rng
End Sub
Fakat bu durumda hücrede veriniz 1 234,567 şeklinde değilde bölgesel ayarlarınızdan dolayı 1 234.567 şeklinde görünmektedir.

Yok ben bu bölgesel ayarlarda istediğimi görüntüyü elde etmek istiyorum diyorsanız aşağıdaki kod bende bu sonucu verdi.

C++:
Sub Test()
    Dim rng As Range
    
    For Each rng In Range("B3:D3")
        If Not IsNumeric(rng) Then
            rng = Replace(Replace(Replace(rng, ",", "_"), ".", " "), "_", ",")
        End If
    Next rng
End Sub
 
Katılım
21 Ocak 2008
Mesajlar
311
Excel Vers. ve Dili
Excel 2013 / Türkçe
Çözümleriniz işime yaradı, ilgilerinizden dolayı hepinize teşekkürler ediyorum...
 
Üst