2417
megoldást keresek erre a problémára
  • chillout
    #1294
    Sziasztok.
    Az lenne a gondom, hogy nem vagyok túlzottan otthon az excel-ben de amennyit kitudtam deríteni az egyik problémámat csak macro-val lehet megoldani amihez semennyire sem értek:S
    1:
    Azt szeretném megvalósítani hogy ha a második sorom celláiban van egy érték (pl.: 1) akkor rejtse el az oszlopot amúgy pedig ne tegyen semmit és ezt a cellát minden oszlopban ellenőrizze és rejtse el az oszlopokat ha kell.
    2:
    A másik kérdésem pedig az hogy, hogy tudok egy bizonyos cellára ugrani.
    pl. egy sorban a dátumok vannak felsorolva és van 1 kereső cellám amibe ha beírom a dátumot és enter-t ütök a cursor a megfelelő cellára ugrik a dátum soromban.
    előre is nagyon köszi a helpet.


  • Delila1
    #1293
    Szívesen. Remélem, érthető volt.
  • Styrex
    #1292
    Köszönöm a részletes magyarázatot.
  • Delila1
    #1291
    A 10 a J oszlop sorszáma (A=1, B=2, ... J=10). A 20, ami most 37-re módosult, az utolsó sor száma.

    Az If Target.Column = 10 And Target.Row < 37 Then sor azt teszi, hogy akkor hajtódjon végre a számolás, ha a lapon a 10. oszlopban áll be változás, ott is alacsonyabb, mint a 37. sorban.

    A Range("H1") = Cells(36, 10) - Cells(35, 10) a H1 cellába beírja a J36-J35 értéket, mikor a J35-ben talál értéket.

    Ha nincs a J35-ben szám, akkor a Range("H1") = Cells(36, 10) - Cells(Range("J36").End(xlUp).Row, 10) sor hajtódik végre. Itt a Cells(Range("J36").End(xlUp).Row, 10) rész annak a műveletnek a VB-s leírása, mikor a J36-on állva egy Ctrl+fel nyilat nyomsz, ami a fölötte lévő első, értéket tartalmazó sorra áll, ezzel választom ki a kivonandó cella helyét.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 10 And Target.Row < 37 Then
    If Range("J36") = "" Then Range("H1") = "": Exit Sub
    If Range("J35") > "" Then
    Range("H1") = Cells(36, 10) - Cells(35, 10)
    Else
    Range("H1") = Cells(36, 10) - Cells(Range("J36").End(xlUp).Row, 10)
    End If
    End If
    End Sub
  • Styrex
    #1290
    Köszi!
    Ha lehet akkor egy kis módosítást kérek: A "J" oszlop 36-ig tart(próbáltam a 19 helyére, de nem volt jó).
    A 10 és 20 számok mit jelentenek?
  • Delila1
    #1289
    Ahhoz a laphoz kell rendelned az alábbi makrót, amelyiken a számítást végre akarod hajtani (lapfülön jobb klikk, Kód megjelenítése, a VB szerkesztőbe jutottál, a jobb oldali üres lapra másold be).

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 10 And Target.Row < 20 Then
    If Range("J19") = "" Then Range("H1") = "": Exit Sub
    If Range("J18") > "" Then
    Range("H1") = Cells(19, 10) - Cells(18, 10)
    Else
    Range("H1") = Cells(19, 10) - Cells(Range("J19").End(xlUp).Row, 10)
    End If
    End If
    End Sub

    Ez a makró figyeli a J1:J19 tartomány változását. Mikor erre a területre viszel be egy új összeget, a H1 cellába beírja az eredményt.
    A makróban 3 helyen szerepel a H1, ezeket kell átírnod a saját cellád címére.
  • Styrex
    #1288
    Sziasztok
    =HA(J19>="";"";J19-(HA(J18="";J17;J18)))
    Abban kérném a segítségeteket, hogy ha a J17 is üres cella akkor addig menjen felfelé az oszlop celláiban amíg talál olyan cellát amiben szám van és végezze el a műveletet.
    Kösz
  • miatyánk
    #1287
    Sziasztok!

    Egy függvényt tartalmazó cellából hogyan lehet lekérdezni, hogy hány darab cella szerepel a függvényben?
    Pl. A3 cella függvénye =SUM(A1:A2) Ebből én az A5 cellába szeretném kiíratni azt, hogy "2".

    A segítségeteket előre is köszönöm.
  • Elnora
    #1286
    Sziasztok,
    valószínűleg megoldhatatlan, de megkérdezem:
    Adatok/Érvényesítés...
    Megengedve: Lista
    Legördülő lista kipipálva

    Na... itt jön az, hogy lehetséges valahogy megoldani hogy ne csak a görgetősávval, hanem egérrel scroll-ozni is lehessen?

    És azt valahogy esetleg, hogy elkezdje beírni a szöveget, és a lista az adott pontra ugorjon?
    (nevén nevezve a listám magyarország települései, és praktikus lenne, ha amikor elkezdem írni, hogy "BUD" akkor a bud kezdetű településeknél állna már.)

    Eleo
  • Delila1
    #1285
    Azt akarod elérni, hogy választható legyen a figyelmeztetés az egyes sorok hiányáról?
    Az Msgboxba nem tudsz ilyent betenni, de külön igen, és a futtatás előtt választhatsz.
    A ComboBox csatolását (LinkedCell) a J2 cellába tettem – ezt eltakarja a fölé rajzolt ComboBox –, a két szöveget (Kérek figyelmeztetést, és Nem kérek figyelmeztetést) az L1:L2 cellákba, ez a ComboBox bemeneti (ListFillRange) tartománya.

    A kibővített makró:

    Sub Osszevet()
    Dim sorA As Integer, usorA As Integer
    Dim sorD As Integer, usorD As Integer
    Dim talal, keres
    Dim sz As String, figy As String

    Application.ScreenUpdating = False

    usorA = Range("A1").End(xlDown).Row
    usorD = Range("D1").End(xlDown).Row
    figy = Left(Cells(2, 10), 3)
    sz = ". sorban nem kapott megfelelő értéket... "

    For sorA = 2 To usorA 'A keresése D-ben
    Cells(sorA, 1).Select
    talal = 0
    For sorD = 2 To usorD
    keres = Cells(sorA, 1)
    If Cells(sorD, 4) = keres Then
    talal = 1
    Exit For
    End If
    Next
    If talal = 0 Then
    If figy = "Kér" Then MsgBox "Az első táblázat a másodikból a(z) " & sorA & sz
    Cells(usorD + 1, 4) = Cells(sorA, 1)
    Cells(usorD + 1, 5) = Cells(sorA, 2)
    Cells(usorD + 1, 6) = Cells(sorA, 3)
    usorD = usorD + 1
    End If
    Next

    For sorD = 2 To usorD 'D keresése A-ban
    Cells(sorD, 4).Select
    talal = 0
    For sorA = 2 To usorA
    keres = Cells(sorD, 4)
    If Cells(sorA, 1) = keres Then
    talal = 1
    Exit For
    End If
    Next
    If talal = 0 Then
    If figy = "Kér" Then MsgBox "A második táblázat az elsőből a(z) " & sorD & sz
    Cells(usorA + 1, 1) = Cells(sorD, 4)
    Cells(usorA + 1, 2) = Cells(sorD, 5)
    Cells(usorA + 1, 3) = Cells(sorD, 6)
    usorA = usorA + 1
    End If
    Next

    'Rendezés
    Columns("A:F").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal

    Application.ScreenUpdating = False

    Cells(1).Select
    End Sub
  • Delila1
    #1284
    Háromszor elolvastam, de még mindig nem értem. Ha nem akarod, hogy megjelenjen az msgbox, töröld a makróból.
  • BéZé2
    #1283
    Ja igen értem, mert nem az activecellre hívatkoztál a ciklusokban hanem direkt a cellákra. Ok kivettem, de van egy olyan kérdésem, hogy bettem egy msgbox "A(z) első táblázat" & sorA & "ban nem kapott megfelelő értéket a második táblázatból.... "
    Meg tudok-e adni egy CheckBox ot ebben a standard msgbox ban, azzal az opcióval, hogy ne jelenjen meg a következőkben ez a figyelmeztetés?

  • Delila1
    #1282
    Két sort, amit a próbához írtam be, de kifejezetten lassítja a futást, ki kellene törölnöd.
    Ez a két külső for-next ciklus első sora, a cells(sorA,1).select, és a cells(sor_D,4).select.
  • Delila1
    #1281
    Az msgboxot a frissítés engedélyezése után tedd be.
    Sokat adattal számoló makróknál érdemes még a futás idejére letiltani az automatikus számolást (Application.Calculation = xlCalculationManual), a végén pedig vissza kell állítani (Application.Calculation = xlCalculationAutomatic)
  • BéZé2
    #1280
    Delila köszönöm. Még fel sem ébredtem, épp neki akarok fogni, hogy agyaljak ki valamit s hát már itt is a megoldás. Te vagy a fórum mindent járó malmocskája, vagy terülj terülj asztalkája. :)) Mégegyszer köszönöm, tetszik az a képernyő letíltás ezt fogom használni máshol is csak próbáljam ki, a msgboxokat megjeleníti-e?
    Elnora ez a függvény sokszor kellett volna és még sokszor hasznát vehetem, ha tudom, hogy van akkor talán neki sem fogok a makróírásnak. Tulajdonképpen két függvény van amelyeket itt a fórumon ismertem meg, az egyik ez HOL.VAN a másik meg az INDIREKT köszi.


  • Delila1
    #1279
    Lassúbb, de hibátlan működést biztosít, ha az A oszlop minden tagját összehasonlítjuk a D minden tagjával, és fordítva is.
    A makró elején a futás gyorsítása érdekében letiltottam a képernyő frissítését, a végén engedélyeztem. Az új makró végére betettem a rendezést.
  • Elnora
    #1278
    MATCH angolul tudtommal és "A HOL.VAN függvény egy adott elemet keres egy cellatartományban (tartomány: Két vagy több cella egy lapon. Az adott tartományban lehetnek szomszédos és nem szomszédos cellák is.), majd visszaadja az elem tartománybeli relatív pozícióját. "
  • BéZé2
    #1277
    Köszonom mindenkinek,
    Delila, ez jól müködik, csak ha van ez aprobléma akkor gondolom, hogy a
    Set talal = .Find(Cells(sor, 1).Value, LookIn:=xlValues)
    If talal Is Nothing Then
    úgy hasonlítja össze az értékeket, mintha stringek lennének?
    Akkor ez helyett (amit nem nagyon értek, mármint a szintaktikát) használok egy olyasmit
    usor1=Range("D1").End(xlDown).Row
    kontr=0
    for j=2 to usor1
    if cells(sor,1)<>cells(j,4)

    Cells(
    na ebbe belegabalyodtam, reggel átgondolom, de ezt sejtem a megoldásnak, hogy minden poziciót az A oszlopból összehasonlít monden pozicióval a D oszlopban
    Az irány az tetszik köszi
    Elnora sajnos ki kell valahonnan a HOL.VAN fügvényt?, mert angol excelem van s ezt kapásból nem ismerem de, ha ez az amit sejtek akkor hasznos lesz
  • Elnora
    #1276
    Sziasztok,

    csak fél megoldás, mert nem rendezi, de ellenőrzésnek jó lehet...

    Létrehozol egy kontroll-oszlopot, amiben minden szám benne van (A oszlop minden számlát és D oszlop minden számát bemásolod, majd az ismétlődéseket kiszeded a duplikálódásokat, aztán abc-be rendezés) /nekem ez a G:G oszlop lett - a képletben látod majd/
    Ezek után egy oszlopba (ami az A-B-C tömbödet fogja vizsgálni, az alábbi képletet A1 cellába beírod és lehúzod:
    =HA(HOL.VAN(A:A;G:G)=SOR(A1);"OK";SOR(A1)-HOL.VAN(A:A;G:G))
    Ez OK-t ír, ha jó helyen van a sorrendben, ha nem, megadja negatív értékben, hány sorral lejjebb kellene lennie.
    Ugyanezt a D oszlopra is megcsinálod.

    De rendezni nem tudom ezzel ugye. A lenne a nem létező makró-programozói képességem. XD
  • Delila1
    #1275
    Összevet makró
  • Delila1
    #1274
    És akkor a makró:


    Sub Osszevet()
    Dim sor As Integer, usor As Integer, usor_1 As Integer
    Dim talal

    usor = Range("A1").End(xlDown).Row
    For sor = 2 To usor
    With Columns("D:D")
    Set talal = .Find(Cells(sor, 1).Value, LookIn:=xlValues)
    If talal Is Nothing Then
    Cells(usor + 1, 4) = Cells(sor, 1)
    Cells(usor + 1, 5) = Cells(sor, 2)
    Cells(usor + 1, 6) = Cells(sor, 3)
    usor = usor + 1
    End If
    End With
    Next

    usor_1 = Range("A1").End(xlDown).Row
    For sor = 2 To usor
    With Columns("A:A")
    Set talal = .Find(Cells(sor, 4), LookIn:=xlValues)
    If talal Is Nothing Then
    Cells(usor_1 + 1, 1) = Cells(sor, 4)
    Cells(usor_1 + 1, 2) = Cells(sor, 5)
    Cells(usor_1 + 1, 3) = Cells(sor, 6)
    usor_1 = usor_1 + 1
    End If
    End With
    Next
    End Sub
  • Delila1
    #1273
    A lenti makró beírja az A:C adatait a D:F tartomány aljára, ha ott nem találta meg, a D:F tartomány többletét pedig az A:C aljára.
    Hibája: ha pl. az A oszlopban szerepel egy 54-es szám, ami nincs meg a D oszlopban, viszont a D-ben van egy 254-es érték, azt találatnak veszi.

    A makró végére írhatsz egy újabb rendezést.

  • BéZé2
    #1272
    Sziasztok
    Megint kérdések, igazából, egyelőre az egyikkel foglalkozom most. Van két táblázatom amelyek elvileg egyformák kellene legyenek. Gyakorlatilag nem azok.Mindkét táblázat 3 oszlopos (A,B,C) és (D,E,F) Az A és D oszlopokban számok vannak csökkenő sorrendben, amelyek egyenlőek de van valamenyi sor amelyek hianyoznak vagy az egyik vagy a násik táblázatból. Azt kellene, hogy ahol nincs meg a másik sorban a megfelelője, ott betegyen abba a sorba egy üres sort, a többit nyomja lefele egy sorral.
    Egy ötlet, hogy induljak, vagy mire építsem fel az egészet?
    Ti hogy csinálnátok?
  • Elnora
    #1271
    Mindenképp érdekelne. ((o:
  • Delila1
    #1270
    Összeállítottam egy füzetet, aminél nem kell az adatokat levélben küldözgetni.
    Új cégnév felvitelekor bekéri a címet és az adószámot, beírja ezeket az adatokat a rejtett adatlap első üres sorába. Ugyanakkor rendezi is a rejtett adatokat a cégnév szerint, hogy könnyebben lehessen kiválasztani az érvényesítésben.
    Ha érdekel, elküldöm.
  • Elnora
    #1269
    Adatok/Érvényesítés/Hibajelzés fülön kivettem a pipát arról, hogy "Érvénytelen adatok beírásakor hibaüzenet jelenlejen meg". Lényegében csak a legördülő lista miatt van érvényesítve a cella.

    Eredetileg hasonlóan volt, ahogy te mondod, de sajnos az életben nem működött. A vevők tartomány rejtett fül - isten ments, hogy hozzá nyúljanak - egy figyelmeztető párbeszédpanel arról jelezett, hogy nekem e-mailben küldjék az adatokat. De ez nagyban lassította a folyamatot.
    Ez egy számlakérő form, és ha új partner esetén muszáj, hogy a formot kitöltő személy be tudja írni az új adatokat, és mivel nem számítógépes emberek, ezt lehetőleg úgy tehessék, hogy a gép semmit nem akar velük kommunikálni. (o:
  • Delila1
    #1268
    Hogy csinálod, hogy érvényesítést tartalmazó cellába az előre megadott Vevők-ön kívül egyebet is be lehet vinni? Úgy tudom, éppen arra való az érvényesítés, hogy ilyent ne lehessen tenni.
    A figyelmeztetést az érvényesítés párbeszéd ablak Hibajelzés fülén a Hibaüzenethez írnám. Be sem engedi írni az új adatot a (C8) cellába, jön a figyelmeztetés, hogy a Vevők tartományba írja az adatokat, majd akkor kiválaszthatja.
  • Elnora
    #1267
    Szia,

    a cégneveknél az utolsó után volt két üres sor, majd még egy adatsor (ezt akartam alapesetben, kvázi instrukciókat tartalmazott volna, és azért két sor kihagyás után, hogy a C8as cellában a legördülő listában ne el legyen szeparálva). Na, ezt az adatsort kitöröltem, és megoldódott az egész.
    A probléma csak az, hogy nem értem, hogy miért. Miért a 64-sortól adott hibás választ, ha változtattam az adatok sorrendjén, akkor miért máshonnan, és egyáltalán, miért adott hibás működést!?

    A HIBÁS függvény egyébként valóban elegánsabb, köszönöm, átírom.

    Viszont a #1263-as nem stimmel, mert pont abból lett a kavarodás, hogy cégnének nem csak az előre bevitt adatokból választhat, hanem bármit beírhat, és akkor kell egy figyelmeztetés a C9be, hogy töltse ki mindenképp.Viszont ha jól értelmezem, te úgy gondolod, hogy a C8as cella csak az listából érvényesített adatokat engedélyezni.

    És millió köszönet a válaszért!
  • Delila1
    #1266
    Ez viszont tényleg a saját hozzászólásom javítása.
    A képlet helyesen: =FKERES(C8;vevők;2;0)
  • Delila1
    #1265
    Az előző BéZé-nek szólt.
  • Delila1
    #1264
    Nincs mit.
  • Delila1
    #1263
    Bőven elegendő az =FKERES(C8;vevők;1;0), mivel az érvényesítésben csak a már bevitt adatok választhatók ki. Az "Új partner..." szöveg nem is jelenhet meg, csak akkor, mikor a C8-ra bevitted az érvényesítést. Az első cég kiválasztása után már csakis a C8-ban aktuálisan meglévő cég címe lehet.
  • Delila1
    #1262
    =HA(HIBÁS(FKERES(C8;vevők;1;0));"Új partner esetén kérlek add meg";FKERES(C8;vevők;2;0))

    Így adnám meg a képletet a C9-be.
  • Elnora
    #1261
    Sziasztok,

    még mindig ugyanaz a problémám:
    "táblázat egyik fülén találhatóak adatok (cégnév, cím, adószám, stb.), ez az egész tartomány (a használt oszlopok)a "vevők" tartományom.

    A másik fülön a C8-as cella érvényesítve van, hogy a "vevők" tartomány első oszlopából lehessen legördülő listából választani (külön vevők_név tartomány ugye, de most lényegtelen), de újat is tudjon felvinni.
    Az alatta lévő cellába képlettel automatikusa a C8 cella alapján bekerül a "cím", az alábbi képlettel:
    =HA(C8=FKERES(C8;vevők;1);HA(C8>"";FKERES(C8;vevők;2;0);"");"Új partner esetés kérlek add meg!")
    Azért kell így, hogy ha új partnert vesz fel, akkor figyelmeztesse a felvivőt, hogy meg kell adnia.

    És tök jól is működik a "vevők" tartomány első 63 tételére. A C8as cellába a továbbiakat is ki tudom választani a legördülő listából, de a címre a képelt azt adja, mintha új partner lenne."

    A probléma még midig fenn áll, pedig már azt is megcsináltam, hogy a céhnév, cím, stb. oszlopokat újra kijelöltem, és elneveztem "vevok" tartománynak, az FKERES képleteket pedig átírtam erre... de így is ugyanaz a hiba.

    Office 2007 a file, de 2010ben megnyitva is ugyanaz a jelenség. ))o:

    Nagyon köszönök minden tippet előre is!
  • BéZé2
    #1260
    Köszönöm Delila.
  • Delila1
    #1259
    Régi kérdésedre:

    – gyorsabb, ha "fejben" (memóriában) számol a gép, vagyis a redim-es megoldás. A méretét a memória határozza meg.

    – A value az alapérték, ezért nem kötelező megadni a cells(x,y)-nál.
  • TökeszMukesz
    #1258
    Delila és Tigerpapa-->respect:D
  • Delila1
    #1257
    Szívesen.
  • Elnora
    #1256
    Hát ez az, ami annyira triviális, hogy nem gondoltam volna rá. Köszi! XD
  • Delila1
    #1255

    A kerekítésre:
    =KEREK.FEL(A1/5000;0)*5000