Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Rendben! Akkor holnap reggel átküldöm, és leírom, hogy mi is lenne a terv! Nem gondoltam, hogy ennyire bonyolult lesz az elkészítése ne haragudj! És köszönöm!
Neked és mindenkinek aki a tömbképlettel foglalkozott eddig:
A 2003-as azért nem tudja kezelni a teljes oszlopra vonatkozóan megadott 2007-es tömbképletet, mert a 2007-esben a sorok száma már nem 64 ezer x, 2010-ben több, mint 1 millió.
A magasabb verzióra bár érdemes áttérni, de a tömképletbeli problémád miatt felesleges. Ha Delila tanácsát nem értetted volna félre, akkor ezt már te is látnád. Delila nem az javasolta, hogy csak az első 7 sorba írd a tömbfüggvényt, hanem hogy a tömbfüggvényben vizsgálandó tartományokat precízen add meg. Tehát a 2003-as excelben ez a képlet működik az 1-7 sorokra:
{=Max(HA(F1:F7=”aktív”;A1:A7))}
Éni is megnéztem a feltöltésedet 2007-tel. Már az is konvertálta a #SZÁM! hibát. Amit a 2003-ban az okozhatott, hogy a 2003-as a tömbképleted az A:A, F:F hivatkozásokat nem tudta kezelni.
Szia. Örülök, hogy át tudtad hidalni a stringhosszbeli problémát. Az viszont meglepett, hogy a 2007 füzetben nem tapasztaltad a 255 karakteres határt. Ugyanis 2007-es füzetben mértem ki a 255-t. Ezek szerint rosszul. Megcsinálnád a kedvemért, hogy csinálsz egy garantáltan hosszabb stringet, és megnézed, hogy listázza-e a 2007-es autószűrő? Aztán írd meg légyszí, hogy mit tapasztaltál.
Olyan sűrűn változtatsz a lap felépítésén, hogy nem tudlak követni.
Legjobb lenne, ha kitennéd a füzetet egy elérhető helyre publikus adatokkal, vagy elküldenéd priviben, de előbb goldold jól át, mit hol szeretnél megjeleníteni.
Meg is van a hiba oka. A két verzió közti különbség okozta. Amikor a 2007-es alatt kompatibilis üzemmódban akarom menteni a fájlt, akkor a program figyelmeztető üzenetet küld: "A munkafüzetben lévő tömbképletek némelyike egy teljes oszlopra hivatkozik. Az Excel régebbi verziói ezeket a képleteket várhatóan #SZÁM! hibává fogják alakítani újraszámításkor."
Sajnos kénytelen leszek hamarosan áttérni, pedig nagyon nem szeretem a 2003 utáni verziókat:-(
Ebben nagyon konzervatív vagyok. Még mindig a 2003-assal dolgozom. (Csak végső esetben, ha majd jövőre beszűntetik ennek is a támogatását az XP-vel együtt - ha jól tudom - akkor fogok áttérni). De hát a tömbfüggvényt a 2003-as is ismeri.
Viszont a kérdésed után kipróbáltam egy masik gépemen 2007-es változat alatt, és ott működik. Akkor most már csak azt kell tisztáznom magammal, hogy a két verzió közti különbség okozza-e a hibát, vagy az asztali gépemen a 2003-as valamelyik beállítása okoz gondot.
Azt hittem így már egyszerűbb lesz, de ahogy az lenni szokott, tévedtem! A makró amit küldtél tökéletesen működik le a kalappal! Úgy gondoltam, hogy ha mégegyszer bemásolom a makrót, de módosítom a célokat, úgy frankón működni fog ugyanazon a lapon! Hát nem! Szóval az amire kellett, hogy az adatokat egy másik munkalapról áthozza hivatkozással együtt, az működik, de én ugyanezen a lapon szeretném ezt még egyszer alkalmazni, csak más célterületre!
Jelenleg: A D oszlopban változtatok, és a hozzá tartozó dokumentum megjelenik a H oszlopban!
Viszont nekem szükségem lenne arra, hogy a C oszlopban amit kiválasztok, az ahhoz tartozó dokumentumot ugyanúgy áthozza a másik "ADAT" munkalapról a G oszlopba!
Ha a makrót bemásolom, akkor a keres kifejezésre hibát dob ki, de valószínűleg, ha ezt orvosolnám, akkor jönnének a többi hibák is! Van megoldása ennek! Ha igen, akkor milyen infora lenne szükség a segítségben?
De valami egyéb hiba kell, hogy legyen nálam. Ha az A és F oszlopokba számokat írok, és ehhez kötöm a tömbfüggvényt pl.: =MAX(HA(F:F=2;A:A)), akkor is #SZÁM! az egyes cellák értéke.
Köszönöm. Ha jól értem, arra gondolsz, hogy - tekintettel arra, hogy az F oszlopnak csak az első 7 sorát töltöttem ki - csak az első 7 sorba írjam a tömbfüggvényt?
Kipróbáltam így is, sajnos változatlan eredménnyel. Kipróbáltam úgy is, hogy egy munkalapon csak az első néhány sort töltöttem ki, a tömbfüggvény nekem így sem működik a mintapéldámban megadott szerkezetű adatokkal:-(
Köszi, működik, még pluszba kért egy End If sort, de végül is összejött! A baj az, hogy így az előző dátumbeíráshoz használt makró csak akkor írja ki a dátumot, ha a cél mezőbe szerkesztek! Eddig úgy zajlott, hogy a soron belül bárhol változtatok, a dátum azonnal beíródik! Ahhoz is használok modul-t és thisworkbook-ot
Ez a munka1 makrója:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) Dim sorBeir As Integer, nev 'helyfoglalás a változókhoz If Target.Column = 4 Then 'ha a bevitel oszlopa a B, akkor nev = Target.Value 'a nev válztozó vegye fel a kiválasztott értéket sorBeir = Target.Row 'a sorBeir változó vegye fel a beírás sorának a számát Keres nev, sorBeir 'Meghívjuk a Keres makrót, átadva a nev és sorBeir változók aktuális értékét If Target.Count > 1 Then _ MsgBox "Ha több cellát szerkesztesz egyszerre, nem működik.": Exit Sub If Target.Column > 1 Then Call AddDate_sh(Target.Row) With ActiveSheet If Application.WorksheetFunction.CountA(.Range(.Cells(Target.Row, "B"), _ .Cells(Target.Row, "G"))) = 0 Then Call RemoveDate_sh(Target.Row) End With
End If
End If
End Sub
Ez a ThisWorkbook:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call LockCells_sh
End Sub
Private Sub Workbook_Open()
Call LockCells_sh
End Sub
Ez a modul1 (az első makrómhoz):
Option Explicit
'made by RHCPgergo 'nagy.gergely1888@gmail.com
Sub LockCells_sh()
Dim Rng As Range
With Munka1 .Unprotect "jelszavam" .Cells.Locked = False For Each Rng In .Range("A1:A30") If Rng.Value <> "" Then Rng.EntireRow.Locked = True Next Rng .EnableSelection = xlUnlockedCells .Protect "jelszavam", UserInterfaceOnly:=True End With
End Sub
Sub UnProtect_sh() ActiveSheet.Unprotect "jelszavam" End Sub
Sub AddDate_sh(MyRow As Long) Munka1.Range("A" & MyRow).Value = Now Columns(1).AutoFit End Sub
Sub RemoveDate_sh(MyRow As Long) Munka1.Range("A" & MyRow).Value = "" End Sub
És ez, amit Te küldtél:
Sub Keres(nev, sorBeir) Dim sor As Integer sor = Application.WorksheetFunction.Match(nev, Sheets("Adatok").Columns(5), 0) 'Az Adat lap G oszlopában (6) meghatározza a nev változó sorát (a HOL.VAN függvény VBA-s megfelelője a Match) Sheets("Adatok").Range("E" & sor).Copy Sheets("Munka1").Range("H" & sorBeir) 'másolás End Sub
Köszi. Annyira nem érdekes, mert egy külön oszlopban van egy sorszám azonosítója, az alapján tudok szűrni. Csak ugyebár a sorszámból nem látom, hogy az mit takar. Emiatt lenne jobb a szöveg szerinti szűrés.
2007-es excelben megnyitva ugyenezt a munkafüzetet viszont nincs ilyen hiányosság. Nem tapasztalom, hogy 255 karakter lenne a korlát.
Elképzelni sem tudom mi a probléma nálad. Most újra teszteltem a képletet dátumokkal, normál számokkal, és működik. A dátumokat beírtam stringnek is, de akkor 0-t ad eredményül és nem #SZÁM! hibát. A képlettel mindenféle hibát (#érték!, #név!), elő tudtam idézni, de #szám!-ot azt nem. Tehát elképzelni sem tudom, hogy nálad mi okozhatta. Talán a dátumok számformátuma nem megfelelő. Próbáld ki a képletetet normál számokkal is, ha azokkal működik, akkor nagy valószínűséggel a dátumfomádat nem szereti. Ha nem, akkor valami excelbeállítási probléma lehet. Nálam a Lotus kompatibilitás szokott időnként nem várt eredményhez vezetni. Lehet hogy nálad is van valami extremítás. Ha nem boldogulsz, küldd el priviben, hagy nézzem meg én is.
És végül: Van egy olyan gyanúm, hogy valamit egészen másképp csinálsz mint kéne. Ezt abból gondolom, hogy ezt írod: "de valamennyi cellában #SZÁM! az érték, akár aktív, akár inaktív szó áll az F mezőben". Hol vannak ezek a valamennyicellák? Amikor összesen csak 1 cella értéke fűgg az F mezőbeli beírásoktól. A max képleté.
Akkor most egy pillanatra visszatérnék egy több mint 3 hete elhangzott megoldásogra, a tömbképletre. Djmorphy 22505-ös kérdésére az =Max(ha(F:F=äktiv";A:A)) képletet javasoltad megoldásnak tömbképletként beírva.
Érdekelt a dolog, kipróbáltam, és nekem semmiképp sem akar összejönni. A tömbképlet rendben megjelenik {=MAX(HA(F:F="aktív";A:A))}, de valamennyi cellában #SZÁM! az érték, akár aktív, akár inaktív szó áll az F mezőben. Az A oszlopban dátumok vannak 2013.01.01, 2013.01.02 stb. formában, az F oszopban aktív, vagy inaktív, ügyelve a hosszú 1-re.
Ha a függvényből a MAX() részt elhagyom, akkor is ugyanez az eredmény.
Vajon ez miért nem működött nálam. Akkor nem akartam rögtön megzavarni a dolog megoldását a kérdésemmel, de azért továbbra is érdekel.