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.
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.
Valamit azonban nem értek ennél az autoszűrőnél. A 255 karakternél hosszabb stringeket is illene szűrnie az 1-255 karakter alapján. De nem teszi. Miért? Úgy dereng az írányított szűrőnél nem volt ilyen probléma.
Benne van a VBA elején az Option utasítások között. Ugyanott van az Option Base is. Valamint a szöveghasonlító strcomp függvény magyarázata is hivatkozik rá.
Én sokkal izgalmasabbnak és újdonságnak találtam a magyar kettősbetűk ügyét.
Az autószűrőnek van korlátja. 255 karaktert képes szűrni. (excel 2007)
Ha ennél hosszabb szövegeket akarsz szűrni, használd a special (írányított) szűrőt. Annak is van korlátja, de lényegesen magasabb. Hogy mennyi, arra nem emlékszem, de sok, több mint ezer. Arra viszont emlékszem, hogy nekem még annak a korlátját is túl lépve kellett szűrnöm (excel 2003-mal). meg is oldottam. De József feltett ide a fórumra egy az enyéménél elegánsabb megoldást, ami szintén többezres stringeket volt képes szűrni. De megtalálni...... Talán ha olvassa, kedve lesz újra ismertetni. Ha nem és szűkséges lesz, megírhatom az én módszeremet.
Ja és elfelejtettem itt a táblázatba betenni az összetett magyar betűket, de kipróbáltam, és az opció alkalmazásával azokat is a magyar ABC szerint rendezi, ahogy ezt megírtad.
Megtaláltam a megoldást a VBA-ban. Ha a modul elején elhelyezzük az Option Compare Text utasítást, akkor az adott nyelvi beállításokat veszi figyelembe. Ki is próbáltam ezt, és az alábbi táblázatban szedtem össze az eredmények közti különbséget:
Option Compare Text
nélkül rendezve Option Compare Text használatával rendezve
Az Az
Er az
Iz Áz
Ok áz
Ut Er
az er
er Ér
iz ér
ok Iz
ut iz
Áz Íz
Ér íz
Íz Ok
Ók ok
Ön Ók
Út ók
Üt Ön
áz ön
ér Őn
íz őn
ók Ut
ön ut
út Út
üt út
Őn Üt
őn üt
Űt Űt
űt űt
Ez kicsit csúnyácska lett, de a lényeg látszik. Tehát az opció nélkül lefuttatva a nagybetűk előre kerültek, az á, é, í ó, ö, ú és ü utánuk, ezen belül is a nagy-, majd a kisbetűk, aztán az Ő és ő végül az ű és Ű. Az opció használatával csak a nagybetűk kerülnek a saját kisbetűs párjuk elé.
2002-es Excelben autószűrőt használok a mukalap oszlopaira. Az egyik oszlop celláiban (20 cella kb) elég sok szöveg van, van közte egyforma is és van különböző tartalmú is, kb 14 fajta van. A fönti szűrő gomb lenyílásakor azonban csak 6 szűrési lehetőség jelenik meg. Létezik, hogy van valami karakterbeli korlát? És emiatt nem listázza a többit?