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.
Bocs, ez engem is érdekelne (mármint az a kérdés, hogy hogyan lehet pl. műveleteket végrehajtani a tömbbe rendezett értékekkel).
Pl. egy tömb elemeit (miután megadtad neki a cellaértékeket) lehet-e sorba rendezni anélkül, hogy bemásolnád a tömbértékeket egy egybefüggő excel-tartományba?
Nálam az FKERES tartományát kijelölve, majd F9-et nyomva ílyen lett a képlet:
=FKERES(F2;{0.80;1000.63;6000.48};2;1)
Szerintem is zseniális, tuljadonképpen azzal egyenlő, mintha a tartományt fixen adtam volna meg, de a képletben látszanak is a tartomány értékei. Az F9-es képlet bevitele után az FKERES tartománya kitörölhető.
1 Vállalat I. negyedév II. negyedév II. negyedév IV. negyedév Éves összesen Önköltségi ár Nagyker. ár Veszteség
2 AB Bt. 16 db 18 db 21 db 25 db 81 db 97 Ft
3 CD Kft. 1300 db 1495 db 1719 db 2063 db 6577 db 47 Ft
4 EF Rt. 231 db 266 db 305 db 367 db 1169 db 103 Ft
A táblázatom nem teljes, de nem volt türelmem több adatot beírni..
Feladat: Az Önköltségi ár oszlop tartalma: 0-999 db-ig 80 Ft, 1000-5999 db-ig 63 Ft, 6000 db éves termelés felett pedig 48 Ft.
A Veszteség oszlop tartalma a következők szerint alakul: a veszteség esetén (az önköltségi ár nagyobb, mint a nagyker ár) számítsa ki a veszteség mértékét, nyereségnél a nyereséges szó szerepeljen!
Próbáltam HA függvénnyel, de valamiért nem sikerül.
Nem tudom biztosan, de szerintem nem. Egy makró lefutása után az Excel nem őrizget a memóriában semmit, vagy ha igen, nem tudom, meddig, és milyen feltételek mellett. Ezzel már elég sokat szívtam korábban.
Inkább azt lehet csinálni, hogy írni külön egy Public Sub-ot arra, hogy ezeket a Set hozzárendeléseket megcsinálja, és minden makró első műveleteként ezt a Sub-ot meghívni.
Cellákat ugyanúgy fogsz tömbbe, mint bármi mást. Megcsinálod az 5 elemű tömböt, aztán egyesével értéket adsz nekik.
Sub teszt_3() Dim R(1 To 5) As Range Set R(1) = Range("A1") Set R(2) = Range("C2") Set R(3) = Range("F3") Set R(4) = Range("B9") Set R(5) = Range("A2") End Sub
A fenti kód lefutása után az R(1) változó az A1 cellára fog hivatkozni. A cellát felülírni tehát így kell :
R(1) = 123
értékét kiolvasni pedig:
x = R(1)
Ha az öt cellát együtt is tudni akarod kezelni, akkor esetleg érdemes az alábbi módon csavarintani rajta egyet:
Sub teszt_4() Dim R(0 To 5) As Range Set R(1) = Range("A1") Set R(2) = Range("C2") Set R(3) = Range("F3") Set R(4) = Range("B9") Set R(5) = Range("A2") Set R(0) = Union(R(1), R(2), R(3), R(4), R(5)) End Sub
Ekkor R(0) az 5 cella uniója.
Alternatív lehetőség, hogy nem Range, hanem String típusú tömböt hozol létre, amelyben a tartományok nevét tárolod el.
Sub teszt_5() Dim RN(1 To 5) As String
RN(1) = "első tartomány neve"
Range(RN(1)) = 123
x = Range(RN(1)) End Sub
De szerintem ez macerásabb és kevésbé áttekinthető. És mindenképpen szükséged lesz plusz egy Range típusú változóra, ha együtt akarod kezelni az öt cellát.
Excel2000-ben nem, 2003-ban már működik. 2000-ben azért nem, mert a lista szegényes, a hónapok szöveges kiírása csak dátummal lehetséges, idővel együtt nem, tehát előbb szét kell választani dátumra és időre, 2003-ban már működik, nyelv váltást azonnal felismeri.
(amint kiderült, amerikai stilusban volt elmentve a dátum és idö)
Tudom, hogy nem szeretsz sokat beszélni, de most kivételesen megtennéd, hogy leírsz pár részletet arról, mire akarod használni?
Ezzel ugyanis segítenél nekünk a megértésben. Én például elsőre azt gondoltam, hogy a "könnyebb kezelhetőség" azt jelenti, egy lépésben akarnád törölni vagy értékkel felülírni mind az öt cellát. Erre a célra alkalmas az, amit írtam. Ha azonban egyesével akarod őket elérni, arra nem alkalmas. Akkor viszont nem értem, hogy miért nem jó a cellák saját neve, és miért kell tömbbe szervezni. Találgathatnék még, meg futhatnánk itt a köröket feleslegesen, de talán egyszerűbb lenne, ha leírnád.
Létrehozol egy hatodik nevet (mondjuk azt, hogy "Mind") és a Name manager-ben mint az a terület amire hivatkoznak, az egyes már létező neveket viszed be vesszővel elválasztva.
Nagy nehezen kiderült, acces2000 és excel2000 hiba, 2003-asban működik, illetve ott az aposztrófokat ki kell venni, mert arra figyelmeztetést ad cellánként.;)
Nem kell. Az összesítő táblázatban megkeresem az A oszlopban lévő kezdő és befejező dátum celláinak sorszámát, majd ezt a két értéket adom meg amikor csere van. meg. Pl 2011.04.01-2011.04.20-ig: 93-112-es. Ha más intervallumot szeretnék akkor szimplán csak ezt a két számot cseréltetem ki a makróval.
Az adott grafikon összes adatsorában kicseréli az összes számot, tehát: =ADATSOR(Összesítő!$V$1;Összesítő!$A$43:$A$67;Összesítő!$V$43:$V$67;4)
Ezt mind a 7-8 adatsoromban kicseréli.
Szóval beírom hogy a 43-at és a 67-et cserélje ki teszem azt 33-ra és 57-re és már újra is rajzolta nekem az egész grafikonomat, alá pedig kiírja hogy melyik dátumtól melyik dátumig van.
Ahhoz, hogy ne 93-at és 112-t, hanem 2011.04-01-et és 2011.04-20-at kelljen megadnom én balfék vagyok, de így is nagyon egyszerűen és gyorsan működik a dolog. :)
Sziasztok ! Köszönöm szépen a fáradozásodat, végülis másképp sikerült megoldanom....
Sub ChangeSeriesFormula() ''' Just do active chart If ActiveChart Is Nothing Then '' There is no active chart MsgBox "Klikkelj a grafikonra és próbáld újra.", vbExclamation, _ "No Chart Selected" Exit Sub End If
Dim OldString As String, NewString As String, strTemp As String Dim mySrs As Series
OldString = InputBox("Add meg a változtatni kívánt értéket:", "Régi érték")
If Len(OldString) > 1 Then NewString = InputBox("Ez lesz megváltoztatva: " & """" _ & OldString & """:", "Új cella") '' Loop through all series For Each mySrs In ActiveChart.SeriesCollection strTemp = WorksheetFunction.Substitute(mySrs.Formula, OldString, NewString) mySrs.Formula = strTemp Next Else MsgBox "Nincs semmi amit meg tudok változtatni.", vbInformation, "Adj meg valamilyen értéket :)" End If End Sub
Ezzel a makróval ( amit egy kicsit átvariáltam az én buta szintemen ) meg tudom adni, hogy melyik cellától melyik celláig rajzolja ki a grafikont. A series-t változtatja meg. Amiben pl A oszlophoz adom meg a V oszlopot, tehát A14-V30-at ki tudom cserélni pl A 20 és V50-re. Raktam ki egy gombot a munkafüzetre amivel futtatom a makrót, szépen működik...