..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Makro excel

Pomoč pri delu z MS Excelom

Re: Makro excel

OdgovorNapisal/-a ajk » Pe apr 15, 2011 7:50 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm



Matjazev.NET
 

Re: Makro excel

OdgovorNapisal/-a admin » Pe apr 15, 2011 8:21 pm

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » Pe apr 15, 2011 11:01 pm

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

Re: Makro excel

OdgovorNapisal/-a ajk » Po feb 16, 2015 2:46 pm

Š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.
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » Po feb 16, 2015 3:18 pm

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » Po feb 16, 2015 4:47 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » To feb 17, 2015 8:18 am

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » To feb 17, 2015 9:41 am

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: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a ajk » To feb 24, 2015 1:49 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » To feb 24, 2015 2:34 pm

Pozdravljeni,

ajk je 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 je 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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » Pe feb 27, 2015 9:48 am

Hvala za odgovor. Se bom potrudil, čeprv se bojim, da to presega moje zaneje o programirannju v VB.
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Prejšnja

Vrni se na Excel

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 1 gost

cron