vba'da iferror kullanımı

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,644
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Aşağıdaki kod vba'da hata veriyor ama excel'e fonksiyon olarak yazıldığında çalışıyor. iferror vba'da nasıl kullanılır.

Kod:
Sub dd()
MsgBox WorksheetFunction.IfError((10 / a), 1)
End Sub
 

Necdet

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

Ne yapmak istediğiniz anlatırsanız sanırım çözüme daha çabuk ulaşılır.

Not: kodun başına On Error Resume Next
ekleyin. En azından hatadan kurtulursunuz :)
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,644
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Necdet bey merhaba,

Aşağıdaki kodda dizinlerin elemanlarını önceden belirledim, düşeyara ile değerin olup olmadığına bakıyorum ona göre hesabın borç yada alacak msgbox'ını çalıştırıcam ama iferror vba'da çalışmadı.

Kod:
Option Base 1
Sub mizan()

son = Cells(Rows.Count, "a").End(3).Row
  b = Array(100, 102, 128)
  a = Array(129, 257)

  For i = 1 To 5
   deg = CLng(VBA.Left(Cells(i, "a"), 3))
  If WorksheetFunction.IfError(WorksheetFunction.VLookup(deg, Application.Transpose(b), 1, 0), 0) > 0 Then
  MsgBox "borç"
  Else
    MsgBox "alacak"

  End If
 Next i
End Sub
 

Ekli dosyalar

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,644
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Yapmak istediğim a sütununda ilk üç hanesi alarak bulduğum değeri dizinin içinde olup olmadığına bakmak. Döngü ile dizindeki bütün değerleri aratmam gerekiyor galiba.
 
Son düzenleme:

Necdet

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

Notlarımın arasında bulduğum örnekleri kendinize uyarlayınız.

Kod:
Sub LoopUp_Array()

    Dim vaList As Variant, vaValue As Variant, vaOutput As Variant
    Dim Sira As Integer
    
    On Error Resume Next
    vaList = VBA.Array("A", "B", "C", "D", "E", "F", "G")
    vaValue = "d"
    
    vaOutput = Application.VLookup(vaValue, Application.Transpose(vaList), 1, 0)
    Sira = Application.Match(vaValue, Application.Transpose(vaList), 0)
    
    If Not IsError(vaOutput) Then
          MsgBox vaValue & " VAR ve Sıra Nosu : " & Sira
    Else
         MsgBox vaValue & " DEĞERİ BULUNAMADI....!"
    End If




    
    lookvalue = -85
    x = Array(-90, -84, -72, -61, -50, -39, -28, -17, -6, 6, 17, 28, 39, 50, 61, 72, 84)
    y = Array(472, 460, 440, 416, 386, 350, 305, 260, 215, 170, 125, 89, 59, 35, 15, 3, 1)
    Z = Array(x, y)
    MsgBox Application.HLookup(lookvalue, Z, 2)

    
End Sub
Kod:
Sub DENEME()

    Dim dizi(), x
    Dim s
    
    ReDim dizi(2)
    
    dizi(0) = "KARS"
    dizi(1) = "IZMIR"
    dizi(2) = "MANISA"
    
    x = "MANISAA"
    
    s = Filter(dizi, x, True)
    
    If UBound(s) < 0 Then
        MsgBox "dizide yok " & UBound(s)
    Else
        MsgBox "DIZIDE VAR " & UBound(s)
    End If
    
End Sub
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,644
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Necdet hocam yardımlarınız için teşekkür ederim. Sayenizde Filter özelliğini öğrenmiş oldum. Sizlerden cevap beklerken kendimde bir çözüm buldum.

Kod:
Option Base 1
Sub mizan()
Dim test As Boolean
son = Cells(Rows.Count, "a").End(3).Row
  borc = Array(100, 102, 128)
  alacak = Array(129, 257)
  
  For i = 1 To UBound(borc)
  b = b & "#" & borc(i)
  Next i
  
  For i = 1 To UBound(alacak)
      a = a & "#" & alacak(i)
  Next i

  For i = 1 To 5
   deg = CStr(VBA.Left(Cells(i, "a"), 3))
   test = b Like "*" & deg & "*"
 If test Then
  MsgBox "borç"
  Else
    MsgBox "alacak"

  End If
 Next i
End Sub
 
Son düzenleme:

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Selâm Erdem, ;)

Necdet Bey'in önerdiği, Filter fonksiyonu çok daha basit ve kullanışlı.
Ben olsam ufak bir kontrol daha ilave edip bu kodları kullanırdım.


Eğer A sütununda böyle bir kod varsa (Örnek; 200.1254.54) senin kodlarında Alacak olarak görünecektir ama borc ve alacak dizileri içerisinde 200 hesabı olmadığından yanlış sonuç verecek.
Bunu önlemek için koda bu satırı ilave ettim; If UBound(x) < 0 And UBound(y) < 0 Then

İlaveten 2 farklı yolla da çözüm hazırladım ama bana en uygunu bu geldi.

Hoşça kal. :eek:k::


Kod:
[FONT="Trebuchet MS"][SIZE="2"]Sub Emre()
    Dim borc(), alacak(), i%, x, y, deg$
    borc = Array(100, 102, 128)
    alacak = Array(129, 257)
    For i = 1 To 5
        deg = Left(Cells(i, 1), 3)
        x = Filter(borc, deg, True)
        y = Filter(alacak, deg, True)
        If UBound(x) < 0 And UBound(y) < 0 Then
            MsgBox deg & " HESAP YOK"
                Else
            MsgBox IIf(UBound(x) < 0, deg & " Alacak", deg & " Borç")
        End If
    Next i
    x = Empty: y = Empty: i = Empty
    Erase alacak: Erase borc: deg = ""
End Sub[/SIZE][/FONT]
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,644
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Murat yardımların için teşekkür ederim, sağlıcakla kal.
 
Üst