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.
Hogyan? Rengeteget szerencsétlenkedtem már ilyen chartokkal, de csak XY Scattered típussal jött össze, hogy az X tengelyen aktuális értékek legyenek, ne csak Cimke. lehet ezt valahogy vonalassal is?
erre az adatsorra rányomok egy vonalas diagramot, lekérem a 3. foku polinomikus trendvonalat, a dög Excel gyönyöruen ráfekteti, lekérem az egyenletet:
y=-0,0016*x^3+0,0247*x^2-0,0003*x+0,116
es ennek köze nincs az adataimhoz!
Mit csináltam rosszul?
Az egyenlet nem igazan érdekel, mert elökerestem egy ostoba kis dos-os programot meg '90-bol, azzal
meglett, de én Excelben szeretném!
Korlátok között vagyunk hardverileg.
Legyen pl: 19 cm, amit te be akarsz rácsozni század pontossággal.
Ez 19*100 = 1900 pixelt igényelne, a monitor felbontás 1024*768 esetén sem oldható meg - 1024 helyre nem tudunk 1900 pontot leültetni.
Mit tehet az excel, vagy mi: valahogyan kerekítünk.
Lehet semmi hasznát nem veszed, de írtam eljárást az automatikus és betűméretből kapott sormagasság összehasonlítására. Ha ábrázolod diagramon az eltérést, látszik, hogy nem göngyöli a hibát, valahogy korrigál.
Sub sormagasság()
'A: szöveg; B: betűméret; C: automatikus sormagasság
'D: 27,5 % a betűméretre E: eltérés
Dim r, c, x As Long
Sheets("Munka1").Select
For r = 1 To 50
Cells(r, 1).Select
x = 8 + 2 * r
Selection.Font.Size = x
ActiveCell.FormulaR1C1 = "gg"
x = Selection.Font.Size
Cells(r, 2).Select
Selection.Font.Size = x
ActiveCell.FormulaR1C1 = x
Cells(r, 3).Select
ActiveCell.FormulaR1C1 = ActiveCell.RowHeight
If r > 1 Then
Cells(r, 4).Select
ActiveCell.FormulaR1C1 = "=RC[-2]*1.275"
Cells(r, 5).Select
ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]"
End If
Next
End Sub
Én is sokaat próbálkoztam már ezzel, de az a baj, hogy ez sem tökéletes. Két hibaforrás van:
A VBA nem mindig pontosan azt adja át az Excelnek, amit az utóbbi fogad (tényleg! bár az eltérés minimális, de ha jól emlékszem, akkor néhány szám esetén néhány századdal más megy át. Debung-gal ellenőriztem)
Miután az Excelbe beállítod az oszlop szélességét (pl. 8.36-tól 8.49-ig bármit), akkor azt magától átállítja egy kicsit nagyobbra vagy kisebbre (a fenti példánál 8.43-ra).
Ez a két hiba azért kellemetlen, mert ha fél centiméteres rácsot szeretnél csinálni, akkor az 5. oszlop és sor környékén már miliméteres hiba lesz, míg a 15. oszlop és sor környékén már egy-egy rács el is van csúszva.
Én megoldásként a következőt találtam ki:
Miután az első sorba és az első oszlopba beírom a kívánt cella méretet cm-ben, elkezdem beállítani:
B oszlop szélessége: B1-es cellába írt szám átváltva a M$-által megkövetelt pontra (mint ahogy a LordFinesse linkjén csinálták).
C oszlop szélessége: B1+C1 átváltva pontokra, mínusz a B oszlop Excel által beállított pontok
D oszlop szélessége: B1+C1+D1 átváltva pontokra, mínusz a B és C oszlop Excel által beállított pontok
A sorokkal ugyanígy.
Szerintem ezt teljesen jogosan teszi az excel, mármint a sormagasság pontban történő megadását.
Pl: a word is pontban adja a betűméretet(gondolom a nyomdaipar tekintélyes múltja miatt). Alapból az excel 10 pontos betűméretet kínál fel, és ehhez a 12,75 pont magasságú cellát tartja kényelmesnek, így is van. Ha a betűméret nem irritál, rá kell tenni 2,75% -ot és meg van a sormagasság.
>>>Excel migyen mértékegységben
számolja az oszlopok szélességét és a somagasságot?
Ez tényleg elég abszurd. A sormagasságot 'point'-ban adják meg. Ez egy tipográfiai mértékegység, ugyanaz, mint amit a betünagyságnál használnak.
1 inch (hüvelyk)= 6 pica = 72 point = kb. 2.54 cm.
1 point = kb. 0.035cm.
Az oszlopszélességet karakterszámban adják meg. Viszont! A betükészleteket megkülönböztetik aszerint, hogy egyforma szélesek a betüik (pl. az l ugynannyi helyett foglal, mint a W, ilyen pl. a courier) vagy nem. A proportional fontoknál, ahol a betük szélessége változik (szinte az összes ilyen), a 0 karakter szélességét veszi figyelembe. A 12-es oszlopszélesség tehát azt jelenti, hogy 12 db 0 karakter fér el benne.
A VBA-ban van pl. CentimetersToPoints metódus, amit használni lehet. Ezenkívül a Width tulajdonság megadja a szélességet point-ban, a ColumnWidth tulajdonság pedig a karakterszámban mért szélességet. Ezekböl aztan lehet kombinálgatni.
Visszatérve az eredeti kérdésre:
>>Hogy lehetne beállítani hogy ezt metrikusan tegye vagy mi az átváltási érték?
Irjál egy makrót erre, tudomásom szerint máshogy nem lehet.
Az egész amúgy tenyleg hülyeség, nem tudom, hogy mi a logika emögött, de ha hozzáveszed, hogy a világon Burma és Libéria, 2 kurva fejlett :-)) országon kívül csak az USA nem használja az SI mertékegységrendszert, ezen nem csodálkozhatsz!
Volna egy kis gondom. Valaki meg tudná mondani hogy az Excel migyen mértékegységben
számolja az oszlopok szélességét és a somagasságot? Hogy lehetne beállítani hogy ezt
metrikusan tegye vagy mi az átváltási érték?
Más megoldás, kevésbé igényes ,de egyszerű. (Kovalcsik Géza könyve alapján)
Be kell szúrni egy új munkalapot "Tartalom" lapnévvel és futtatni a modult.
Sub tarjegy()
Const Fo = "Tartalom"
Const Vissza = "<-"
Dim o, s As Integer
Dim Akt As Object
s = 3
o = 2
For Each Akt In Worksheets
If Akt.Name <> Fo Then
With Worksheets(Fo)
.Cells(s, o) = Akt.Name
.Hyperlinks.Add Anchor:=Cells(s, o), Address:="", SubAddress:=Akt.Name & "!A1"
End With
With Akt
.Cells(1) = Vissza
.Hyperlinks.Add Anchor:=Cells(1), Address:="", SubAddress:="Tartalom!A1"
End With
s = s + 1
If s = 14 Then
s = 3
o = o + 2
End If
End If
Next Akt
End Sub
A probléma: munkalap beszúrása esetén, csak a "Tartalom" munkalapon helyez el működő linket, az új lapról a vissza link nem működik.
Nekem is szükségem lenne egy kis segítségre. Olyan makrót akarok írni, ami egy munkafüzet munkalapjainak nevét lekéri és kívánság szerint az egyiket aktivizálja. sajnos nem az akarásommal van a probléma...
Köszi
Nekem az lenne a celom, hogy irjak egy olyan tablat, ami azonnal kidob nekem millio kis eredmenyt, amint frissitem a hivatkozasul szolgalo masik munkalapot
De nagyjabol kezdek sikeres lenni. Azert koszi a segitseget.
Sziasztok
Ujabb problema (lassan kezdem ugyerezni, hogy en tartom fenn a topicot)
Szoval van egy reszletes lista, ahol bizonyos beerkezesek datumhoz vannak rendelve. Azt szeretnem elerni, hogy ha megadom a honapot, akkor az ahoz a honaphoz tartozo sorokat kiggyujtse egy masik sheet-re
Valami olyasmire gondoltam, hogy =IF(es itt kene valami olyan, hogy A2 mezo >06-2000 AND <04-2001)
Na most tudom, hogy a fenti igy hulyeseg (voltak mar jobb probalkozasaim is) de gondoltam igy erthetobb, hogy mit akarok.
Bocsi, Tiba. Picit módosítok a kódodon.
Sub részösszeg()
hanysor = Cells(1, 1).CurrentRegion.Rows.Count
x = hanysor / 3
For i = 4 To hanysor + x Step 4
Rows(i).Insert
Cells(i, 1) = Cells(i - 1, 1) + Cells(i - 2, 1) + Cells(i - 3, 1) 'ha az oszlop alatt van az összeg
Next
End Sub
hanysor= cells(1,1).currentregion.rows.count
for i= hanysor+1 to 1 step -3
row(i).insert
cells(i,4)=cells(i-1, 3) + cells(i-2, 3) 'ha a 4. oszlopban van az összegző
next
Kisreb:
// Ha nagyon uncsi, vegyél egy másik üres oszlopot is pl. "Y", töldsd fel (0,1,2,3,4,5...) számtani sorozattal, és az X2-be a képlet: =INT(Y2/3)+1 //
Ez felesleges, mert (maradva a fenti példánál)
X2 képlete: = 1
X3 képlete: = 1
X4 képlete: = 1
X5 képlete: = X2
Az X5 képletét pedig már le is lehet másolni.
Pl. megoldás az excel kezelő felületén:
használd ki az adatok/részösszegek menüpontot.
Vedd valamelyik üres oszlopot -legyen ez pl. "X" -,töldsd fel (1,1,1,2,2,2,3,3,3,4...). Ez az oszlop adja a csoportosítási alapot a részösszegekhez.
// Ha nagyon uncsi, vegyél egy másik üres oszlopot is pl. "Y", töldsd fel (0,1,2,3,4,5...) számtani sorozattal, és az X2-be a képlet: =INT(Y2/3)+1 //
Ezeket az oszlopokat el is rejtheted (:
sorbarendezés X oszlopszerint majd adatok / részösszegek
Sziasztok emgint.
A kovetkezo kerdesem lenne:
Meg lehet-e azt csinalni valahogyan, hogy az Excel automatikusan minden harmadik sor utan nyisson egy uj sort (insert row) es bemasolja oda a felette levo harom cella osszeget (SUM)?
tiba>> aféléket kérdeznék én is, mint te, de kzs664 nem mond többet a probémáról.
/Semmi jelentősége, de eltévesztettem a számolást, a cells(260) helyett a cells(300)-zal példálóztam. Az első sor 256 cellája után jön a második sor, cells(257)=A2, cells(258)=B2, cells(259)=C2 és cells(260)=D2./
Vagy hasznalhatod az Office Web Component Spreadsheet Control-t, ami az Office XP-vel jön, bár azt hiszem lehet hasznalni pl. a 2000-el is. Talan még letölteni is lehet. Ez 18 278 oszlopot és 262 144 sort tud kezelni. De ez csak egy spreadsheet control, nem pedig Excel. Azért sok mindent tud!!!
Ha jól gondolom, akkor Access nem jöhet szóba. Az Excel 2000 is csak 256 oszlopot ismer.
VB-kel persze meg lehetne oldani (elvileg), de az 400 oszlopnál rengeteg memóriát foglal, gyakorlatilag hasznláhatatlan lenne.
Mindenképpen Excellel szeretnéd megoldani?
Hány sorod van?
Milyen gyakran kerülnek a táblába új sorok?
A különböző oszlopok hogyan függnek egymástól (pl: irányítószám - város vagy olyan oszlop, amely az előző oszlopokból számítódik)?
Feladattól függ.>>
1) tényleg el kellene helyezni 400 oszlopot. A logikai meghosszabítást nem igazán értem, mert hogy az excel tömbként kezeli a munkalapok celláit, sorfolytonosan számozva azokat. A cells(300) például, a D2 cella. Innéttől kezdve én már képtelen lennék figyelni.
1.1)Marad a táblázat előremegfontolt felosztása, pl. több munkalapra
1.2)A probléma megoldásához másik alkalmazás választása (Az excel 2000 is csak 256 oszlopot tud?)
2) megoldható-e a probléma ( mert ott van, mint a hegy), lehet inkább a VB listán kellene érdeklődni.
Feladattól függ. Az Excelben hiába van 256 oszlop, nem arra találták ki, hogy tele is legyen. Ha már telerakod, akkor logikailag meg lehet hosszabítani a következő munkalapon. Ha odafigyelsz, akkor működhet. Bár végül is a munkalap is csak egy objektum, amelynek egy tulajdonsága, hogy 256 oszlop van benne, így meg is lehet változtani, de ebbe nem mennék bele.. ;-)