Skip to main content

AccessTr.neT


VBA Excel'de Instr ile belirli hücre değerleri haricindekiler varsa işlem yapma

VBA Excel'de Instr ile belirli hücre değerleri haricindekiler varsa işlem yapma

#1
Merhaba arkadaşlar;

Excel'de çalışan bir bir Vba koduna "InStr" ile kısıt getirmek istiyorum. Aslında halihazırda böyle bir kısıt var ama bu defa bunun tersini ve çoklu substring ile yapmak istiyorum. Ama bir türlü başaramadım. Yardımcı olabilir misiniz?

Aşağıdaki kod öbeğinde uzman arkadaşların anlayabileceği gibi belirtilen hücre alanında "/" karakteri varsa çalışmayı durduruyor.


For i = 1 To ActiveSheet.Range("H2").End(xlDown).Row
   If InStr(1, LCase(Range("H" & i)), "/") <> 0 Then
   MsgBox prompt:="Parçalanmamış setler (/) olduğundan işlem yapılamaz.", Buttons:=vbInformation + vbOKOnly, Title:="Hata"
   End
   End If
Next i

Ancak, şu anda ihtiyacım olan ise eğer belirtilen alanda "x", "y", "z" substringleri HARİCİNDE bir değer varsa şunu yap, yok sadece bunlar varsa hiçbir şey yapma ve devam et.

Bunun için aşağıdaki kodu denedim ama her kontrol ettiği hücre için MsgBox mesajını çıkardı. Sanırım InStr'nin mantığında bir hata yapıyorum.


For i = 1 To ActiveSheet.Range("K2").End(xlDown).Row
   If InStr(1, LCase(Range("K" & i)), "BANGLADESH") + _
   InStr(1, LCase(Range("K" & i)), "CAMBODIA") + _
   InStr(1, LCase(Range("K" & i)), "INDIA") + _
   InStr(1, LCase(Range("K" & i)), "CHINA") > 0 Then
   Else
   MsgBox prompt:="Menşelerde BANGLADEŞ, KAMBOÇYA, ÇİN, ve HİNDİSTAN dışında ülkeler var!", Buttons:=vbCritical + vbOKOnly, Title:="Uyarı!"
   End If
Next i

Not: Küçük bir kod öbeği olduğu için örnek dosya eklemedim açıkçası. Umarım yanlış yapmamışımdır.

Şimdiden teşekkürler, saygılar.
Cevapla
#2
sayın balkan85,

öncelikle;
sadece kod yazma durumları dahi olsa,siz yine de her bir yeni konunuzda Site Kuralları gereği içeriğinde farazi gerçek dışı veriler barındıracak haldeki örnek uygulamanızı eklemeyi ihmal etmeyip buna gayret ediniz.teşekkürler.

son olarak;
sürekli mesaj iletisi almamak için,

MsgBox prompt:="Menşelerde BANGLADEŞ, KAMBOÇYA, ÇİN, ve HİNDİSTAN dışında ülkeler var!", Buttons:=vbCritical + vbOKOnly, Title:="Uyarı!"

Kod satırından sonra olacak şekilde

Exit Sub

Kod satırını da yazınız.

Bilginize…iyi çalışmalar,saygılar.
Herkes, kendisinin AR-GE'cisidir...


Konulara eklenen Uygulama içeriğine yönelik Tavsiyeler
Alt Form Denetim Değerlerine ulaşma ve Alt Form Güncelleme
Kapatırken Düzenle (Compact On Close) Seçeneğinin İşaretlenmesi Hakkında
Cevapla
#3
sayın balkan85,

konu takibiniz açısından,hatırlatma anlamında;
konunuz ile ilgili son gelişme ne durumdadır.

şüphesiz,işlemleriniz tamamlanmış ve sorununuzu çözmüş de olabilirsiniz.site içi aramalarınız neticesinde sitede yer alan konuları ve örnekleri incelemelerinizin sonucu ile bazı gelişimler elde etmiş de olabilirsiniz...bilgilendirmek ister misiniz lütfen.teşekkürler.

bilginize...iyi çalışmalar,saygılar.
Herkes, kendisinin AR-GE'cisidir...


Konulara eklenen Uygulama içeriğine yönelik Tavsiyeler
Alt Form Denetim Değerlerine ulaşma ve Alt Form Güncelleme
Kapatırken Düzenle (Compact On Close) Seçeneğinin İşaretlenmesi Hakkında
Cevapla
#4
Merhaba atoz112;

Öncelikle geç cevabım için kusura bakmayın. İş yerinde inanılmaz bir yoğunluğumuz vardı ve bu esnada bildirimde bulunamadım.

Konuyla ilgili olarak;

Sizin öneriniz olan,

MsgBox prompt:="Menşelerde BANGLADEŞ, KAMBOÇYA, ÇİN, ve HİNDİSTAN dışında ülkeler var!", Buttons:=vbCritical + vbOKOnly, Title:="Uyarı!"

Kod satırından sonra olacak şekilde


Exit Sub

yöntem bendeki sürekli olarak MsgBox alma sorununa çözüm oldu. Bunun için teşekkür ederim.

Ancak, diğer yandan benim yazdığım kod olan;


For i = 1 To ActiveSheet.Range("K2").End(xlDown).Row
If InStr(1, LCase(Range("K" & i)), "BANGLADESH") + _
InStr(1, LCase(Range("K" & i)), "CAMBODIA") + _
InStr(1, LCase(Range("K" & i)), "INDIA") + _
InStr(1, LCase(Range("K" & i)), "CHINA") > 0 Then
Else
MsgBox prompt:="Menşelerde BANGLADEŞ, KAMBOÇYA, ÇİN, ve HİNDİSTAN dışında ülkeler var!", Buttons:=vbCritical + vbOKOnly, Title:="Uyarı!"
End If
Next i

ve "x", "y", "z" substringleri HARİCİNDE bir değer varsa şunu yap, yok sadece bunlar varsa hiçbir şey yapma ve devam et amacını taşıyan kısım amacına uygun hareket etmiyor. Listedeki ülke isimlerinde bu ülkelerin haricinde olmamasına rağmen sanki varmış gibi MsgBox çıkarıyor. Acaba nerede yanlış yapıyorum?

İyi çalışmalar.
Cevapla
#5
Sayın balkan85,

Bahsettiğiniz açıklama üzerine,aşağıdaki bilgilerin yazılması uygun görülmüştür.

Alıntı:"x", "y", "z" substringleri HARİCİNDE bir değer varsa şunu yap, yok sadece bunlar varsa hiçbir şey yapma ve devam et

Amacınız;yukarıda yazılı olan ifadeleriniz olmakta.aynı zamanda,

Alıntı:Listedeki ülke isimlerinde bu ülkelerin haricinde olmamasına rağmen sanki varmış gibi MsgBox çıkarıyor.

İfadenizi de beyan etmektesiniz.
Yazdığınız ile değerlendirildiğinde bu hali ile olmak üzere,bu amacınıza yönelik işlemi yapacak niteliktedir.çünkü;kriter olarak belirlediğiniz ülke tanımlarından mevcutta kayıt varsa buna dair mesaj bildirimi yapacak nitelikte olduğu düşünülmektedir.Dolayısı ile de,bu amacınızı yerine getirmektedir kanısındayım.bir sorun olmasa gerek.

Elbette ki,bu bilgilendirmeler;SADECE,tahmini olarak ve ancak yazdığınız kodlar üzerinden yorumlanmak sureti ile yapılmaktadır.bu nedenle,içeriğinde farazi gerçek dışı veriler ve sonuçları görebilmek adına da birkaç uygun nitelikte kayıt barındıracak şekilde örnek uygulamanızı ekleyiniz lütfen.

Son olarak, EK'te;
bahsettiğiniz talebinize yönelik,alternatif olarak hazırlanmış örnek uygulama mevcuttur.inceleyebilirsiniz.bilginize...iyi çalışmalar,saygılar.
.rar instr-ATOZ2.rar (Dosya Boyutu: 14,76 KB | İndirme Sayısı: 2)
Herkes, kendisinin AR-GE'cisidir...


Konulara eklenen Uygulama içeriğine yönelik Tavsiyeler
Alt Form Denetim Değerlerine ulaşma ve Alt Form Güncelleme
Kapatırken Düzenle (Compact On Close) Seçeneğinin İşaretlenmesi Hakkında
Cevapla
#6
Sayın atoz112;

Cevabınız için teşekkür ederim. Yalnız, cahilliğimin kusura bakmayın ama ben bir noktayı anlayamadım. Aşağıdaki kod öbeğine baktığımızda;


For i = 1 To ActiveSheet.Range("K2").End(xlDown).Row
If InStr(1, LCase(Range("K" & i)), "BANGLADESH") + _
InStr(1, LCase(Range("K" & i)), "CAMBODIA") + _
InStr(1, LCase(Range("K" & i)), "INDIA") + _
InStr(1, LCase(Range("K" & i)), "CHINA") > 0 Then
Else
MsgBox prompt:="Menşelerde BANGLADEŞ, KAMBOÇYA, ÇİN, ve HİNDİSTAN dışında ülkeler var!", Buttons:=vbCritical + vbOKOnly, Title:="Uyarı!"
End If
Next i

Benim düşük düzeydeki kod bilgime göre K2 sütunun da BANGLADESH, CAMBODIA, INDIA ya da CHINA değerlerinden biri ya da birkaçı ya da tamamı varsa bir şey yapma, eğer bunlardan farklı bir değer varsa MsgBox görüntüle yazıyor olması lazım. Ya da en azından ben böyle olmasını istiyorum. Icon_rolleyes

Siz sahip olduğunuz bilginizle beni aydınlatabilir misiniz? Ben bu ihtiyacım için yanlış kod öbeğini mi kullanıyorum acaba? Ya da doğrusu nedir?

Bu arada emeğinize sağlık, örnek Excel eklemişsiniz fakat işyerimdeki firewall dosyayı indirmemi engelliyor. Eve gittiğimde deneyeceğim maalesef.

İyi çalışmalar.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da