Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Delila_1

    veterán

    válasz botond187 #22788 üzenetére

    Egyszerűbben, és kicsit gyorsabban is meg lehet csinálni.
    Kell egy segédtábla (nálam a K:M tartomány), ahol a K oszlop tartalmazza azt a szöveges formában tárolt adatot, amihez rendeljük a többit, az L és M szintén szövegesen a csatolandó min és max értékeket.

    Nem írtad, az Excelnek melyik verzióját használod, ezért 2003-ban írtam, azt a magasabb verziójú Excelek elfogadják, csak makróbarátként kell menteni.

    A füzetet feltettem ide.

    Módosítandó sorok, ha a segédtáblát máshova teszed:
    1.

    Set sorS = Columns(11).Find(ehhez, LookIn:=xlValues)

    A Columns(11) most a K oszlopra mutat, mert a K a 11. oszlop.

    2.
    If Mid(Cells(sorK, "A"), 3) >= Cells(sorS, "L") And _
    Mid(Cells(sorK, "A"), 3) <= Cells(sorS, "M") Then

    Ezeknél az "L" és "M" helyett írd a saját oszlopaid betűjelét

  • Fferi50

    Topikgazda

    válasz botond187 #22788 üzenetére

    Szia!

    Paraméterezheted is a makrót.
    Csinálsz egy táblázatot, amelybe berakod egy-egy oszlopba a "főcikk" tól-ig cikkszámokat, a másik 2 oszlopba pedig a hozzátartozó "kiegészítő" cikkek tól-ig határait.
    Ezután a makródnak azt kell megnéznie, hogy az adott cikkszám mely határok közé esik és onnan kivenni a hozzátartozó határértékeket.
    Kicsit csúnya mert még egy for ciklus van benne, de most hirtelen nem jut jobb eszembe (pedig biztosan van).

    For xx= 1 to 200
    cikkszam=cells(xx,1).value
    kiegalso=""
    kiegfelso=""
    for zz=1 to főcikkfeltételszám
    if cikkszam>=cells(zz,10).value and cikkszam<=cells(zz,11).value then
    kiegalso=cells(zz,12).value
    kiegfelso=cells(zz,13).value
    exit for
    endif
    next
    if kiegalso<>"" then
    kieg=""
    for yy=1 to 200
    if cells(yy,1).value>=kiegalso and cells(yy,1).value<=kiegfelso then
    if kieg="" then
    kieg=cells(yy,1).value
    else
    kieg=kieg & elválasztó & cells(yy,1).value
    endif
    endif
    next
    if kieg<>"" then
    cells(xx,2).value=kieg
    endif
    endif
    next

    A határokat tartalmazó táblázat a 10-12. oszlopban van. A ciklushatárokat igazítsd a feltöltött sorokhoz.
    A belső yy-os ciklus elvileg indulhat xx -től egy (1) helyett, ha a kiegészítő termékek cikkszáma nagyobb, mint a főtermékeké és a cikkszámok sorba vannak rendezve. A működéshez ez nem szükséges, akkor marad az 1, mint cikluskezdő (hiszen lehet, hogy az első cikkszám nem főtermék, hanem kiegészítő).

    Üdv.

  • slashing

    senior tag

    válasz botond187 #22788 üzenetére

    hát innentől már csak annyit kell csinálni hogy d1=kezdőérték e1=végérték d2=kigyűjtés kezdő értéke e2=kigyűjtés végértéke a makróban meg ezeket a cellákat el kell nevezni és azokkal helyettesíteni.

    valahogy így:

    Dim k1, v1, ki1, ki2 As String

    k1 = Range("D1")
    v1 = Range("E1")
    ki1 = Range("D2")
    ki2 = Range("E2")

    if cells(yy,1).value>= K1 and cells(yy,1).value<= V1 then

    ugyan így a másik kettőnél is.

    és mondjuk a legvégén a next előtti cells(yy, 2)-t átírni mondjuk ActiveCell-re és akkor oda rakja az adatokat amelyik cellára ráállsz a makrófuttatás előtt. Esetleg még egy gombot kirakni a lapra ami indítja a makrót.

    Elvileg ennek így működnie kell....

    Bocs Fferi50 hogy belekondárkodtam, remélem nem haragszol meg érte.

Új hozzászólás Aktív témák