Makro excel

Pomoč pri delu z MS Excelom
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Pozdravljeni

Pojavil se mi je nov problem

Koda: Izberi vse

If Left(Range("List!D" & CStr(indeks)), 1) = "J" Then delaj indeks, indeks1
        
Zgornja koda ustreza tudi pogoju ko se pojavita znaka "JI". Tega pa želim preskočiti, oziroma ga nočem. Na kak način se ga znebim.

Upam da se uspel razložiti kaj me muči.
Hvala na pomoči in lp
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Takole:

Koda: Izberi vse

If (Left(Range("List!D" & CStr(indeks)), 1) = "J") and (Left(Range("List!D" & CStr(indeks)), 2) <> "JI") Then delaj indeks, indeks1
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Najlepša hvala na rešitvi
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Še enkrat bi obudil to temo. Koda je spodaj pripeta.
Makro mi izpisuje tudi vrstice v katerih bi "lahko" bile tudi kode KCDM ali KQCD ali KLR itd. Jaz pa želim, da se izpisujejo samo vrstice, ki vsebujejo kode, ki so zapisane v makroju. Poleg tega v kolikor makro naleti na vrstico v kateri je koda, ki je sploh ni na seznamu, pusti na listu kjer so rezultati makroja (list1) prazno vrstico, jaz pa hocem da se te prazne vrstice izbrišejo.
Kako bi lahko rešil omenjeni dve težavi.

Hvala

Koda: Izberi vse

Sub test()
  Dim indeks As Integer, indeks1 As Integer

  indeks = 3
  indeks1 = 3
Range("List1!A1:F500").ClearContents

  For indeks = 1 To 1000
    If Left(Range("List!D" & CStr(indeks)), 3) = "KCD" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 1) = "K" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KH" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KL" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KN" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KS" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 3) = "KSK" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 3) = "KSM" Then delaj indeks, indeks1
       
    indeks1 = indeks1 + 1

  Next indeks

Sheets("List1").Select

End Sub

Sub delaj(indeks As Integer, indeks1 As Integer)
        Range("List1!A" & CStr(indeks1)) = Range("List!A" & CStr(indeks))
        Range("List1!B" & CStr(indeks1)) = Range("List!B" & CStr(indeks))
        Range("List1!C" & CStr(indeks1)) = Range("List!C" & CStr(indeks))
        Range("List1!D" & CStr(indeks1)) = Range("List!D" & CStr(indeks))
        Range("List1!E" & CStr(indeks1)) = Range("List!E" & CStr(indeks))
        Range("List1!F" & CStr(indeks1)) = Range("List!F" & CStr(indeks))
        Range("List1!G" & CStr(indeks1)) = Range("List!G" & CStr(indeks))
End Su
Zadnjič spremenil ajk, dne To Feb 17, 2015 9:42 am, skupaj popravljeno 1 krat.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Pozdravljeni,

Vi primerjate prva dva oz. prve tri znake LEFT(xxx, 2) oz. Left(xxx, 3), kar pomeni, da vam makro pač najde vse elemente, ki imajo na prvih dveh (treh) mestih iskane znake. Če želite najti točno iskan niz potem seveda ne smete uporabiti funkcije Left, temveč morate izvesti direktno primerjavo:

Koda: Izberi vse

If Range("List!D" & CStr(indeks)) = "K" Then delaj indeks, indeks1
Kar pa se tiče drugega vprašanja pa je potrebno malce več dela.
  1. Najprej morate uvesti spremenljivko nasel in jo postaviti na False, saj na začetku niste našli še ničesar
  2. Nadalje morate popraviti vsak IF stavek, da v primeru uspeha postavi spremenljivko nasel na True
  3. Na koncu zanke se morate vprašati ali je makro kaj našel (if nasel then...) in v tem primeru povečati index, sicer (če ni jašel nič) pa morate trenutno vrstico pač izbrisati

    Koda: Izberi vse

    Range("List!D" & CStr(indeks)).EntireRow.Delete Shift:=xlUp
    
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Pozdravljeni

Hvala za hiter odgovor. Žal sem vam dal zopet premalo natančne podatke in zadeva ne deluje tako kot bi morala. Koda je sestavljena iz črk in za njimi sledijo številke. Primer pripet spodaj. Jaz moram preverjati samo tisti "prvi del kode" (KCD...., K...,LJ.Z...). Upam da sem bil dovolj razumljiv.

hvala

Koda: Izberi vse

AV003
KCD1704/1
K1037/1
KH1061/1
KL1495/9
JI1
GIN31/1
JI34
KN518/8
CD802/2
CD2/5
KCD992A/3
CD1627/17
GL224/1
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Glede na zapisano morate preverjati dva pogoja:
  1. Ali se vsebina začne z iskano predpono (npr: "KCD") - to počnete že danes
  2. Ali ne naslednji znak cifra.
Ali je nek znak cifra preverite preprosto tako da se vprašata ali je znak večji oz. enak '0' IN manjši oz. enak '9'. Posamezen znak pa dobite s funkcijo MID. Torej ali je četrti znak cifra:

Koda: Izberi vse

if MID("List!D" & CStr(indeks)), 4, 1) >= "0" and MID("List!D" & CStr(indeks)), 4, 1) <= "9" THEN ...
PS: Koda se vam bo precej zmanjšala, če boste namesto Range uporabili objekt Cells.
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Pozdravljeni

Sicer mi ni najbolj jasno, kako vse to povezati, da bo koda delovala. Naj še povem, da za zdaj prvi del kode vsebuje največ pet črk in lahko vsebuje tudi piko (CDMNI..., KR.GC...itd). Bom poskusil, če mi bo uspelo kaj "spesniti" skupaj.

lp
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Se opravičujem, ampak jaz tega ne uspem spravit skozi.

Koda: Izberi vse

if MID("List!D" & CStr(indeks)), 4, 1) >= "0" and MID("List!D" & CStr(indeks)), 4, 1) <= "9" THEN ...
V tej vrstici mi javlja Syntax error. Poleg tega pa če prav razumem vrstica preverja ali je četrti znak cifra. Je tudi primer ko je tretji znak cifra, ali pa peti...

lp
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Pozdravljeni,
ajk napisal/-a:V tej vrstici mi javlja Syntax error.
Seveda vam javlja sintaktično napako, če pa sta dva zaklepaja preveč... Jaz sem to napisal samo kot primer, ki ga seveda morate še sintaktično popraviti. Torej, da bi se prevedlo morate urediti oklepaje:

Koda: Izberi vse

  If Mid("List!D" & CStr(indeks), 4, 1) >= "0" And Mid("List!D" & CStr(indeks), 4, 1) <= "9" Then ...
ajk napisal/-a:Poleg tega pa če prav razumem vrstica preverja ali je četrti znak cifra. Je tudi primer ko je tretji znak cifra, ali pa peti...
Da in temu primerno pač morate popraviti kodo. Namesto 4 (f testu) pač 3 ali 5... Seveda pa bo te kode sedaj veliko in bo nepregledna.

Da bi jo uredili boste morali napisati pomožno funkcijo za iskanje in kot rečeno namesto Range uporabiti Cells.
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Hvala za odgovor. Se bom potrudil, čeprv se bojim, da to presega moje zaneje o programirannju v VB.
Odgovori