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.
Nem kell lementened. A makró első lépésben külön lapokra dobja szét az adatokat. A lapok neve az ügyfélszámhoz tartozó név lesz (FKERES).
Második lépésben a lapokat egyenként átteszi 1-1 új fájlba, amiknek az ügyfélkód nevet adom. Ezeket lementi – a makró elején – általad megadott könyvtárba.
Érdemes egy másolatot készíteni a füzetedről, és abban kipróbálhatod.
Robbantómester biztosan segít a levelezésben. :)
A fórummotor a backslash-ekkel táplálkozik, most is lenyelte az utvonal = "E:Eadat" sorban.
Helyesen utvonal = "E\:Eadat\". Remélem, most átviszi.
Annyit csináltam meg, hogy az egyes ügyfélszámokhoz tartozó sorokat külön lapokra átmásolja. A lapok nevét az FKERES függvénnyel kikeresett névvel látja el, és ezeket a lapokat egyenként új füzetbe teszi át, majd lementi az adott könyvtárba az ügyfélkód nevével. A levelezést majd valaki beírja a Mentés nevű részbe. Ehhez meg kell adnod, melyik levelezőt alkalmazod.
Az ügyfélkódokat a V, a hozzájuk tartozó neveket a Z oszlopba tettem – innen veszi az FKERES a neveket –, a másolást soronként az A:K cellára írtam meg.
Sub Ugyfelek() Dim sor As Double, usor As Double, usor_1 As Double, nev$, WS1 As Worksheet Dim utvonal$, lap%
utvonal = "E:Eadat" 'itt írd be a saját útvonaladat ehelyett usor = Cells(Rows.Count, "A").End(xlUp).Row Set WS1 = Sheets("Munka1") 'ide jön a saját indító lapod neve
'Másolás lap%okra For sor = 2 To usor nev$ = Application.WorksheetFunction.VLookup(WS1.Cells(sor, "A"), _ WS1.Range("V:Z"), 2, 0) 'itt a V:Z módosítandó az fkeres függvényhez On Error GoTo Uj_lap usor_1 = Sheets(nev$).Cells(Rows.Count, "A").End(xlUp).Row + 1 If usor_1 = 2 Then Range(WS1.Cells(1, "A"), WS1.Cells(1, "K")).Copy Sheets(nev$).Cells(1) Range(WS1.Cells(sor, "A"), WS1.Cells(sor, "K")).Copy Sheets(nev$).Cells(usor_1, "A") Next
'Mentés, zárás For lap% = 1 To Sheets.Count - 1 nev$ = utvonal & Sheets(1).Cells(2, "A") Sheets(1).Move
uj munkakoromben fantasztikus feladatokat kapok, melyet szeretnek leegyszerusiteni. Adott egy adatbazis, A oszlopaban ugyfelszamok, B ben a rendelt termekek, a tobbi nem erdekes.
pl
A B
001 alma
001 korte
001 malna
002 alma
002 malna
003 korte
004 alma
stb
A feladatom, hogy ugyfelszamonkent kulon fajba mentsem a megrendeleseket es elkuldjem az ugyfelnek. Egymas adatait nyilvan nem lathatjak, igy nem tartalmazhatja oket a file.
Arra gondoltam, hogy ez annyira manualis, hogy macroval kellene megoldani, de sajnos Makroban meg nem tartok ott, hogy irjak is egyet, csak felvenni tudok es azt modositgatni, ha valamit elront.
Szoval valami olyat keresek, hogy gyujtse ki a 001 ertekeket az A ban, es mentse el egy kulon fajlba 001 nev alatt. Aztan keresse ki a 002-ket, mentse le, es igy tovabb. Kb 150 kulon ugyfelszam van, nehany ezer sorral.
A masik kerdesem, hogy ugyanezeket el is kellene kuldenem mailben. Egyazon szoveg nelkuli levelet mas mas melleklettel, mas mas cimekre. Azt szeretnem tudni, hogy lehet-e olyat, hogy egy makro automatikusan megnyit egy levelet, egy listabol megcimezi, es automatikusan minden levelbe beteszi a megfelelo mellekletet? az elkuldest mar vallalnam, ha az gond :-)
Lehetseges ilyen makrokat letrehozni, ill tudtok ebbe segiteni?
Van egy problémám, amire nem sikerül megoldást találnom. Ha tudtok, segítsetek.
Az excel táblázat azt tartalmazza, hogy egy termék aktuálisán mennyibe kerül. Az "A" oszlop celláiban vannak a kezdő dátumok, a "B"-ben pedig a vég dátumok. A "C" tartalmazza azt, hogy a megadott dátumintervallumban mennibe került a termék. Az alábbi kis példából látható, hogy mit kellene megoldani.
Tételezzük fel, hogy az alábbi excel táblám van:
A1: 2012.01.01
A2: 2012.01.18
A3: 2012.01.24
B1: 2012.01.17
B2: 2012.01.23
B3: 2012.02.15
C1: 25000
C2: 30000
C3: 35000
E1: 2012.01.19
F1: képlet, ami az "E1" cella éréke alapján megkeresi a "C" oszlopban azt az értéket, aminek a dátuma "A" és "B" oszlop értéke között van. Az eredménynek ennek a konkrét példában 30000-nek kellene lenni.
Van erre a problémára valamilyen beépített képlet?
Remélem érthető, amit szeretnék. Ha ismered az SQL-t, akkor abban így oldanám meg: SELECT 'C' FROM tablazat WHERE 'E1' BETWEEN 'A' AND 'B';
Hát, a bonyolultság az a dologban, hogy ha az Excel éppen nem aktív (és nem aktív, mert pont az a baj, hogy más program aktív és eltakarja) akkor hiába is programozol rá valamit bármelyik billentyűre Excelben...
A sima mezei Alt+Tab nem felel meg, esetleg? Csak blöffölök.
Esetleg még azt lehet megcsinálni (nem tom lehetséges-e), hogy az Excel sose engedje át semmilyen más programnak a fókuszt.
Én élek a gyanúperrel, hgoy itt valami excel-en kívüli megoldás működhet.
Kiváncsi vagyok mások mit mondanak, mert ezért van itt egy-két feketeöves Event kezelő nindzsa...
Egy egyszerű kérdésem lenne, bár a megoldást rá nem találom.
Arról lenne szó, hogy van egy excel munkafüzetem, melyben elinduláskor egy VBA makró fut, és amely automatikusan elrejti az excel munkafüzetet a VBA formok mögül (application.visible = false programkóddal) , és a windows tálcáról egyaránt.
Ha a programom használata közben másik programot is be kell töltenem, akkor az eltakarja az én programomat, és zavaróan hosszadalmas, amíg minden takaró programot lepálcázok (Kis méretre rakok a tálcára), hogy az én programom újra látható legyen. Szeretném, ha egy billentyű (Pl.: ALT) megnyomására az én programom jönne fel a legfelső programnak.
(Ugye a windows tálcáról nem tudom felnagyítani, mert a makrókód eltűnteti a tálcán lévő excel megjelölést).
A ×60 esetében percben kapod meg. Be kell szorozni még ×24-gyel és még egyszer ×60-nal is (az idő az Excelben [0;1] tartományba eső tizedestört, ahol 0 a 00.00.00, az 1 pedig a 24.00.00).
Sub izé() Dim Src As Range, Dst As Range, c As Range Dim MaxCount As Long, i As Long, j As Long, RandX As Long, RandY As Long Dim VoltMár As String
Set Src = Range("C4:G16") Set Dst = Range("I4") Dst.Resize(13, 5).ClearContents For Each c In Src If Application.WorksheetFunction.CountIf(Src, c.Value) > MaxCount Then MaxCount = Application.WorksheetFunction.CountIf(Src, c.Value) If MaxCount > 13 Then MsgBox "A következő szám:" & c.Value & " többször forfdul elő, mint 13. Így a feladat nem megoldható." Exit Sub End If End If Next VoltMár = "_" For i = MaxCount To 1 Step -1 For Each c In Src If (Application.WorksheetFunction.CountIf(Src, c.Value) = i) And (InStr(VoltMár, "_" & c.Value & "_") = 0) Then For j = 1 To i Do RandY = Int(Rnd() * 13) Loop Until (Application.WorksheetFunction.CountIf(Dst.Offset(RandY).Resize(, 5), c.Value) = 0) _ And (Application.WorksheetFunction.Count(Dst.Offset(RandY).Resize(, 5)) < 5) Do RandX = Int(Rnd() * 5) Loop Until Dst.Offset(RandY, RandX) = "" Dst.Offset(RandY, RandX) = c.Value Next VoltMár = VoltMár & c.Value & "_" End If Next Next End Sub
A dolog lényege az, hogy előfordulási gyakoriság szerint csökkenő sorrendben szórom szét a számokat egy 13x5-ös mezőben. Először tehát mindig annak keresek helyet, aki a legtöbbször fordul elő. Holtverseny esetén az kerül sorra előbb, akivel a C4:G16 tartományban (balról jobbra majd fentről lefelé haladva) hamarabb találkozom. Ennélfogva a számok elhelyezése nem teljesen véletlenszerű (hiszen a fenti szabályszerűség benne van). De a célnak talán megfelel.
A másik dolog, hogy létezhet olyan kiindulási számsor, ahol a fenti algoritmus zsákutcába (végtelen ciklusba) fut. Minél kevesebb az egyedi szám, vagyis minél több az ismétlődés a kezdeti számok között, annál nagyobb a zsákutca esélye. Ilyenkor Ctrl+Break gombokkal lehet leállítani a makrót, aztán meg lehet próbálni újraindítani. Ha többször/mindig végtelen ciklusba kerül, az szívás, és nincs rá megoldásom.
Nem vagyok valami rutinos exceles, csak néha kell használnom, így aztán erről a függvényről nem is tudtam, de aztán a szomszéd srác telefonon felhomályosított. Mindenesetre köszi a segítséget! Próbálkoztam, hátha mázlim lesz, és van itt épp valaki, aki azonnal válaszolni tud. :)