• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

DEĞER Hatası oluşturan Kirli Hücre Temizliği

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Merhaba,

Soru başlığı olarak yazdığım cümle, esasen sorumun da tam özetidir.

Konuya ilişkin hazırladığım ekteki Örnek Dosyada daha somut olarak izah etmeye çalıştığım sorun;
İçi boş gibi görünen hücrenin, ara çubuğu (space) ile yada başka bir sebeple bir nevi kirletilmesi neticesinde, o hücreden veri alan Formülün #DEĞER hatası vermesine yönelik olarak MAKRO talebime ilişkin değerli yardımlarınızı rica ederim.

Saygılarımla.
 

Ekli dosyalar

Merhaba
Kod:
=EĞERHATA(((H17+I17+J17)-K17);"")
Formülü tüm satırlaraa bu şekilde uygulayın
 

Ekli dosyalar

Merhaba
Kod:
=EĞERHATA(((H17+I17+J17)-K17);"")
Formülü tüm satırlaraa bu şekilde uygulayın

Örnekte uyguladığım formül, konuyu anlatmak adına oluşturulmuş basit formüldür. Öyle ki, Formül, aynı satırda, aynı sayfada olmayıp, farklı sayfa ve hücrelerde, çok daha karmaşık oluşturulmuş, bir taraftan da veri hücrelerine başvuru halinde olabilmekte, "EĞERHATA" işlevinin de çaresiz kaldığı durumlar olmaktadır. Yani sorumun yanıtı, bahsettiğiniz kadar basit değildir.

Anlatımım meramımı izah etmeye yetmemiş olabilir, yada siz eksik anlamış olabilirsiniz.

Amaç, #DEĞER Hatasını görmezden gelmek, formül işlem sonucunda #DEĞER'i gizlemek değil,
#DEĞER Hatasını oluşturan nedeni ortadan kaldırmaktır.

Hata oluşturan hücre incelendiğinde, hücre içinin boş gibi olduğu görünmekle beraber, gerçekte hücre içinde Space (ara çubuğu) ile oluşmuş bir boşluk karakteri olduğu görülecektir. Asıl #DEĞER Hatasını oluşturan neden budur ve bunun ortadan kaldırılması için o hücrede DELETE tuşu ile silme işlemi yapılmalıdır. Bu hatanın oluştuğu çok sayıda hücrenin DELETE ile silme işlemini bir kodlama ile tek seferde yapabilmektir.

Umarım bu kez biraz daha ayrıntı verebilmişimdir.
 
Son düzenleme:
Günaydın

#Değer hatasını oluşturan bütün koşulları biliyor olursanız bunları iç içe EĞER formülleri ile yada VBA da daha hızlı sonuç alabilirsiniz.
Programdan #değer oluşturan sebebi bulup düzeltmesini istiyorsanız öncelikle sizin bunları tanımlamanız gerekiyor. Farklı bir koşul oluşursa #Değer hatasını gene alırsınız.



Örnekte uyguladığım formül, konuyu anlatmak adına oluşturulmuş basit formüldür. Öyle ki, Formül, aynı satırda, aynı sayfada olmayıp, farklı sayfa ve hücrelerde, çok daha karmaşık oluşturulmuş, bir taraftan da veri hücrelerine başvuru halinde olabilmekte, "EĞERHATA" işlevinin de çaresiz kaldığı durumlar olmaktadır. Yani sorumun yanıtı, bahsettiğiniz kadar basit değildir.

Anlatımım meramımı izah etmeye yetmemiş olabilir, yada siz eksik anlamış olabilirsiniz.

Amaç, #DEĞER Hatasını görmezden gelmek, formül işlem sonucunda #DEĞER'i gizlemek değil,
#DEĞER Hatasını oluşturan nedeni ortadan kaldırmaktır.

Hata oluşturan hücre incelendiğinde, hücre içinin boş gibi olduğu görünmekle beraber, gerçekte hücre içinde Space (ara çubuğu) ile oluşmuş bir boşluk karakteri olduğu görülecektir. Asıl #DEĞER Hatasını oluşturan neden budur ve bunun ortadan kaldırılması için o hücrede DELETE tuşu ile silme işlemi yapılmalıdır. Bu hatanın oluştuğu çok sayıda hücrenin DELETE ile silme işlemini bir kodlama ile tek seferde yapabilmektir.

Umarım bu kez biraz daha ayrıntı verebilmişimdir.
 
Günaydın

#Değer hatasını oluşturan bütün koşulları biliyor olursanız bunları iç içe EĞER formülleri ile yada VBA da daha hızlı sonuç alabilirsiniz.
Programdan #değer oluşturan sebebi bulup düzeltmesini istiyorsanız öncelikle sizin bunları tanımlamanız gerekiyor. Farklı bir koşul oluşursa #Değer hatasını gene alırsınız.

Bu forum mecralarında kanaat belirtmek yerine çözüme yönelik yardımlarınız olursa daha makbule geçer. Tedavi için teşhis etmek, teşhis için ise tahlil etmek gerekir. Sorumun yanıtı, verdiğiniz yanıt değildir.
 
Merhaba,
Bu forumda herkes karşılık beklemeden yardımcı olmaya çalışıyor.
Bazen önerilen çözümler size uygun gelmeyebilir, normaldir, yanlış anlama olmuştur vs vs vs

Aşağıdaki kodları deneyin derim, umarım işinize yarar. Kodların çalışacağı alanı seçtikten sonra makroyu çalıştırınız.

Kod:
Public Sub Temizle()

Dim rng As Range

Application.ScreenUpdating = False

For Each rng In Selection
    If rng.HasFormula = False Then rng = Application.WorksheetFunction.Trim(rng)
Next rng

Application.ScreenUpdating = True

End Sub
 
Merhaba,
Bu forumda herkes karşılık beklemeden yardımcı olmaya çalışıyor.
Bazen önerilen çözümler size uygun gelmeyebilir, normaldir, yanlış anlama olmuştur vs vs vs

Aşağıdaki kodları deneyin derim, umarım işinize yarar. Kodların çalışacağı alanı seçtikten sonra makroyu çalıştırınız.

Kod:
Public Sub Temizle()

Dim rng As Range

Application.ScreenUpdating = False

For Each rng In Selection
    If rng.HasFormula = False Then rng = Application.WorksheetFunction.Trim(rng)
Next rng

Application.ScreenUpdating = True

End Sub

Teşekkür ederim, lakin sanırım işe yaramadı. ("Public Sub" ile ilk kez karşılaştım, özel bir durumu var mıdır ?)
Bir başka yerden aldığım yardımda;

Sub TrimCells()
Dim rng As Range
Dim cell As Range

Set rng = Range("H17:L21")

For Each cell In rng
If Trim(cell.Value) = "" Then
cell.Value = Trim(cell.Value
End If
Next cell
End Sub

kodlaması verilmiş, çalışıyor. Ancak, tarama ve temizleme alanı büyüdüğünde gecikmeli çalışıyor. Bunun üzerinden bir revizyon yapılabilir mi ?
 
Merhaba,

Sizin kodlarınızda çalışacak alanı makro içinde belirtiyorsunuz Set rng = range("H17:L21") olarak
ayrıca formül olup olmadığını da kontrol etmiyor.

benim kodlarımda ise aynı işi yapıyor ancak kodların çalışacağı alanı siz belirliyorsunuz, önce seçmekle.

Public ilk değer olduğu için silmedim.
İNCELEYİNİZ
 
Son düzenleme:
Deneyiniz.

C++:
Option Explicit

Sub Remove_Space()
    Dim WS As Worksheet
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    For Each WS In ThisWorkbook.Worksheets
        WS.Cells.Replace " ", "", xlWhole
    Next
    
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    
    MsgBox "İşleminiz tamamlanmıştır."
End Sub
 
Deneyiniz.

C++:
Option Explicit

Sub Remove_Space()
    Dim WS As Worksheet
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    For Each WS İn ThisWorkbook.Worksheets
        WS.Cells.Replace " ", "", xlWhole
    Next
    
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    
    MsgBox "İşleminiz tamamlanmıştır."
End Sub

Korhan bey,

Müteşekkirim, elinize sağlık, zahmet verdim....

( For Each WS İn ThisWorkbook.Worksheets ) in olarak düzelttim...
 
Telefondan cevaplamıştım. Bu sebeple bahsettiğiniz küçük detay gözümden kaçmış. Mesajımı tekrar düzenledim.

Güle güle kullanınız..
 
Geri
Üst