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.
-
#1293 Szívesen. Remélem, érthető volt. -
Styrex #1292 Köszönöm a részletes magyarázatot. -
#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?
-
#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 -
#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
-
#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?
-
#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. -
#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.
-
#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
-
#1275 Összevet makró -
#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
-
#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: -
#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: -
#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! -
#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) -
#1265 Az előző BéZé-nek szólt. -
#1264 Nincs mit. -
#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. -
#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. -
#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. -
#1258 Delila és Tigerpapa-->respect:D -
#1257 Szívesen. -
Elnora #1256 Hát ez az, ami annyira triviális, hogy nem gondoltam volna rá. Köszi! XD -
#1255
A kerekítésre:
=KEREK.FEL(A1/5000;0)*5000