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.
Private Sub Worksheet_Change(ByVal Target As Range) Dim Lista As Range, MásikÉrték As String, MásikCella As Range
'cella validálása If Target.Cells.Count > 1 Then Exit Sub If Intersect(Target, Me.Range("A:B")) Is Nothing Then Exit Sub
'változáskövetés On Error GoTo nagyhiba Application.EnableEvents = False If Target.Column = 1 Then 'A oszlopban változott egy cella Set Lista = ThisWorkbook.Worksheets("Kaja").Range("A:B") Set MásikCella = Target.Offset(, 1) ElseIf Target.Column = 2 Then 'B oszlopban változott egy cella Set Lista = ThisWorkbook.Worksheets("Kaja").Range("B:C") Set MásikCella = Target.Offset(, -1) End If On Error GoTo kishiba If Target.Value = "" Then MásikCella.Value = "" Else MásikÉrték = Application.WorksheetFunction.VLookup(Target.Value, Lista, 2, False) MásikCella.Value = MásikÉrték End If nagyhiba: Application.EnableEvents = True Exit Sub kishiba: MásikÉrték = "#HIÁNYZIK#" Resume Next End Sub
Kell hozzá a forráslista a Kaja munkalap A:C tartományában. Legyen a C oszlop az A oszlop pontos másolata. Ez azért kell, mert az FKERES függvény csak a tartomány első oszlopában tud keresni, és csak a keresőoszloptól balra eső tartományból ad vissza értéket.
Makróval megoldható. Csakhogy nincs értelme makrót írni olyan példa alapján, amit beküldtél, mert csak az idő megy vele, és úgysem lesz jó. A konkrét adatszerkezetet kell ismerni. Általánosságban olyasmi lenne az algoritmus, hogy
- kell egy lista a beszállítókról valahol
- végigmenni az A oszlop celláin
- a vizsgált cella tartalma megegyezik valamelyik beszállítóval, akkor számlatartalom kapcsoló ki, (és megjegyezni, hogy melyik munkalapra kell pakolni,) egyébként be
- ha a számlatartalom kapcsoló be van kapcsolva, akkor az aktuális cella teljes sorát másolni a megjegyzett munkalapra
Ez az algoritmus simán elhasalhat azon, ha üres sorok is vannak, szóval erre mondtam, hogy konkrét adatszerkezet kell.
Újabb kérdés (csak gyűlnek, csak gyűlnek...), megint 2007-esben.
Egy táblázat egyes oszlopaiban zárolt, más oszlopokban feloldott cellák vannak, és ráteszem a lapvdelmet azzal, hogy a sorok beszúrása és törlése minden felhasználónak engedélyezett. A beszúrás megy is, és a zárolt oszlopokban védett cellák keletkeznek általa. A törlés azonban nem megy! Hogy lehetne elérni, hogy a felhasználó tudjon sort beszúrni és törölni, de a nem törölt sorokban egyes cellákat ne írhasson át?
Tudom, hogy ez nagyon nagy kérés, de tudnál csinálni egy alapot, hogy lássam, hogy működik? Annyira nem vagyok otthon a makróírásban, hogy ezt nulláról elkezdjem.
Tehát tegyük fel, hogy a Kaja nevű munkalap A és B oszlopában ilyesmi van:
1 alma
2 banán
3 szőlő
stb.
A Munka1 munkalapon szeretném ezeket reprodukálni az A és B oszlopban (mondjuk a 4. sortól) oly módon, hogy a B oszlopban egy legördülő lista ajánlja fel az értékeket, hogy szöveget ne kelljen gépelni (a valóságban rondák a szövegek).
Azt gondolom, hogy ezt kéne valami sablonba belepakolnom (remélem, hogy akkor nem akar egy külön personal.akármit megnyitni mindig az Excellel együtt!), és a rendszergazda azt mondta, segít majd az összes érintett gépen elterjeszteni ezt a sablont.
Egy olyanban is szeretnék segítséget kérni, hogy tudok csinálni egy gombot az eszköztárba vagy magára a munkalapra vagy bárhova, amit megnyomva a kijelölt vagy ki nem jelölt, de aktív sor elé beszúr egy újat, és arra kiterjeszti a meglévő képleteket és feltételes formázásokat mondjuk az A:K oszlopban.
Nekem is itt mondták nemrég a trükköt ehhez hasonló problémára. Próbáld meg az fkeres függvénnyel. Igaz nekem egy irányba kellet társítanom számokhoz betűt. De lehet, hogy 2db fkeressel meg tudod oldani. Az egyiknél a szöveget a másiknál a számot definiálod.
Az A oszlopban kódszámok lehetnek, a B-ben hozzájuk tartozó szövegek. Ezek egy külön munkalapon lehetnek listázva és a szövegek legördülőből kerülhetnek a B-be.
A user alapból nem jegyez meg kódszámokat, de olykor mégis, és akkor meg a szöveget nem akarja kiválasztani. Tehát ha az A oszlopba beír egy számot, a B-ben jelenjék meg hozzá a szöveg, ha viszont a B-vel kezdi, és a legördülőből kiválasztja a szöveget, akkor az A-ban jelenjék meg a kódszám. Ha csak az egyik irányban menne a hozzárendelés, nem lenne probléma. De lehet oda-vissza? (Excel 2007)
Egy makróban hogyan lehet megadni azt, hogy a munkalapon csak az engedélyezett cellákban lévő értékeket dolgozza fel (pl: C6:D50), vagy a C6:D-a táblázat utolsó sora. Szintén, hogy kell megadni, hogy a makró lefutása után a táblázat egy adott cellájára ugorjon a kijelölés.
A segítségeteket kérném, hogy hogyan lehet meghatározni VB-ben egy kétdimenziós tömb sorainak számát.
A makró úgy működik, mint egy excel-es függvény, egyszerűen a makró meghívásakor annak argumentumába kijelöléssel határozom meg a tömböt. Pont ezért nem tudom előre, hogy hány sora van.
A Tomb.Cells.Count utasítással a cellák számát kapom meg, de nekem csak a sorok száma kellene.
Köszi a tippet! Megnézem aztán jelentkezem, hogy mire jutottam! :)
Jönne a következő kérdés :D
Meg lehet-e oldani valahogy, hogy a munkafüzet1-re felrögzített számlák/szállítólevelek adatait ami változó terjedelmű szortírozzak beszállítóként új munkafüzetre?
Pl:
Munkafüzet 1
Beszállító1:
A10:G10
Beszállító2:
A11:F25
Beszállító1:
A25:H30
és akkor Munkafüzet2 kiírja az A10:G10 tartományt és A25:H30
Munkafüzet3 pedig A11:F25-öt.
Ez persze folyamatosan nőni fog szóval valami keresés kellene rá csak az a baj, hogy nem tudom mekkora lesz a bevitt adatok határai. Mert lehet hogy 1 sor és mondjuk 3 oszlop de az is lehet hogy 10sor és 9 oszlop.
a dimenzió határai között lehetnek hülyeségek mert csak hasraütés szerűen írtam
Ez az indapassos izé nem valami halálos kór, az enyém is össze van kötve és túlélhető. Egyszerűen nem kell vele foglalkozni, és akkor nem zavar. Nem kapsz kéretlen leveleket stb. Csak mailcímmel kell belépni, ennyi.
Persze nekem sem tetszik, de mégis azt mondom, hogy csináld meg, mert nagy veszteség lenne a fórumnak, ha eltűnnél....