-
Fototrend
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
-
válasz
terencehIII
#34488
üzenetére
Ez alapján meg lehet csinálni: [link]
-
válasz
botond2225
#34469
üzenetére
felesleges a makró:
=HAHIBA(FKERES(...),"") -
válasz
róland
#30852
üzenetére
Ja, hogy a forrás listának range-et adsz meg - azt nem tudod megoldani, csak dinamikus range-dzsel.
Csináltam már ilyet, de kell hozzá néhány plusz oszlop és egy-két plusz bonyolultabb named range.
Array formula a Controls worksheet A oszlopban levő elemek deduplikálására (a D oszlop header-je ne szerepeljen egyszer se a deduplikált oszlopban), feltételezve, hogy az adatok 2-15 között vannak:
=IFERROR(INDEX(Controls!$A$2:$A$15, MATCH(0, COUNTIF(D$1:$D1, Controls!$A$2:$A$15), 0),1),"")Array formula, D2-be kel beírni (és CRTL+ENTER-rel bevinni) és célszerű lehúzni a deduplikált tábla aljáig
A headernek (D1) 0-t célszerű beállítani, mert így távolítja el az adatok között levő üres cellákat is.És utána egy olyan named range kell, ami levága az utolsó üres cellákat:
=OFFSET(Controls!$D$2,0,0,COUNTIF(Controls!$D$2:$D$15,">""""")-1,1)Ez kell beállítani egy Workbook-érvényességű named-range-be, és ezt a range-et adod meg a listába érvényesítésre.
-
válasz
RedHarlow
#30733
üzenetére
Sub CreateAfile
Dim fs, fileObj
Set fs = CreateObject("Scripting.FileSystemObject")
Dim v, ix
v = Range("A1:A1234").Value2
For ix = 1 to UBound(v,1)
Set fileObj = fs.CreateTextFile("c:\" & Trim(v(ix,1)) & ".doc", True)
fileObj.Close
Set fileObj = Nothing
Next
Set fs = Nothing
End SubCsak fejből, nem próbáltam ki élesben. A1:A1234 tetszés szerint beállítandó.
-
-
válasz
butch3r
#30300
üzenetére
Public Sub ttt()
Dim r1 As Range
Set r1 = Application.Intersect(Workbooks("Book1").Sheets("Sheet1").Range("B25:D65535"), Workbooks("Book1").Sheets("Sheet1").UsedRange)
Dim v1
v1 = r1.Value2
Dim r2 As Range
Set r2 = Application.Intersect(Workbooks("Book2").Sheets("Sheet1").Range("B25:D65535"), Workbooks("Book2").Sheets("Sheet1").UsedRange)
Dim v2
v2 = r2.Value2
Dim oldbound, newbound
oldbound = UBound(v1, 1)
newbound = oldbound + UBound(v2, 1)
Dim v_cel()
ReDim Preserve v_cel(1 To newbound, 1 To 3)
Dim ix, iy
For ix = 1 To UBound(v1, 1)
For iy = 1 To 3
v_cel(ix, iy) = v1(ix, iy)
Next
Next
For ix = 1 To UBound(v2, 1)
For iy = 1 To 3
v_cel(oldbound + ix, iy) = v2(ix, iy)
Next
Next
Dim r_cel As Range
Dim kezdosor
kezdosor = 10
Set r_cel = Workbooks("Book1").Sheets("Sheet2").Range("B" & kezdosor & ":D" & kezdosor + UBound(v1, 1) - 1)
r_cel.Value2 = v1
End Sub -
Ha sokat dolgozol cellákkal, akkor célszerű, ha nem közvetlenül Sheet.Cell vagy Sheet.Range-et piszkálod, hanem kimásolod az adatokat egy tömbbe, dolgozol rajtuk és a végén (ha változtattás rajta) visszamásolod.
Ezzel nagyságrendekkel gyorsíthatók a cella hozzáférést igénylő makrók (fél óra helyett akár fél perc alatt is lefut, tapasztalatból).Pl.
'értékek másolása cellákból tömbbe
'tömb címzés (1 to max_sor, 1 to max_oszlop)
Dim ertekek As Variant
ertekek = Sheet1.UsedRange.Value2
Dim sor As Long, oszlop As Long
For sor = 1 To UBound(ertekek, 1)
For oszlop = 1 To UBound(ertekek, 2)
'művelet az összes értéken
Next
Next
'visszaírás az eredeti területre
Sheet1.UsedRange.Value2 = ertekek -
válasz
kenguru99
#30171
üzenetére
Talán ez segítség (gyakorikerdesek.hu-ról):
A problémát a windows live 2009 levelező program okozza.
Az olyan csatolt fájlok kiterjesztését amelyik pontra végződik, kiegészíti egy aláhúzás jellel, amit aztán a windows nem tud megnyitni az ismeretlen kiterjesztése miatt.pl. "filenev 2012.09.07.xls" -> "filenev 2012.09.07._xls"
A legjobb megoldás, a levelezőt frissíteni a windows live 2011 verzióra, amelyik már nem szenved ettől a bug-tól.
Alternatív megoldás a már korábban említett társítás, ahol az _xls kiterjesztést az excelhez, az _doc kiterjesztést a word-höz (stb.) társítjuk. -
válasz
m.zmrzlina
#30145
üzenetére
Ha ki van jelölve a tartomány és szerkesztés módban vagy (F2), akkor a ctrl+enter bemásolja az értéket (vagy függvényt) a többi kijelölt cellába.
-
Tegnap sokat szenvedtem vele, de végül nem sierült megoldanom az array alapú konkatenálást csak makróval. Sikerült ez bárkinek függvénnyel megcsinálni?
-
-
válasz
Ricardo128
#30070
üzenetére
command line-ba (WIN+R + cmd):
cd /D könvtár_elérési_útja
dir *.jpg *.jpeg *.png | cliputána paste-vel beilleszted az excelbe
-
válasz
szabonagyur
#30030
üzenetére
Vagy mi lesz, ha 2014 első hetére vagy kiváncsi? Ezek a fix beálltások sosem vezetnek jóra

Neki kell veselkedni és átírni a függvényt - vagy ha nem akarod, akkor kell egy hasonló nevű függvényt csinálnod, ami kiszámolja - és akkor nem lesz átláthatatlan a hosszú függvények miatt. -
válasz
huliganboy
#29987
üzenetére
BTW az excel nem felkerekíti, csak felkerekítve jeleníti meg.
Amúgy van kerekítés függvény Access-ben (még ha egy kicsit hülyén is működik): RoundHa pl 1000-re akarsz kerekíteni, akkor
= 1000 * Round([MEZŐNÉV] / 1000, 0) -
válasz
dellfanboy
#29935
üzenetére
Kicsit barbár, de én ezt csinálnám elsőre, makróval:
- Cégnév mezőből kiszűrni az egyedi neveket
- végigiterálni a neveken
-- programozottan leszűrni a táblát a cégre
-- a leszűrt táblából a kívánt részt kikopizni és beilleszteni egy új munkalapraKb ennyi. Ehez még célszerűcsinálni egy template sheet-et és annak a másolatába másolni az eredményt érték szerint.
-
válasz
Viszlát
#29888
üzenetére
Levédett makróval lehet korlátozni.
Néhány alap dolog:
- very hidden sheet a jogosultságok és a levédett területek regisztrálására
- on change esemény lekezelése
- UserID lekérés (ha biztonság kell, akkor célszerű win apival, nem pedig Environment username és domain-nal) és ellenőrzése -
A hivatalos Excel (XML) szabványban benne van a rendes sor/oszlop alapú formázás, de plusz számítási igény miatt sajna ezt nem használja az excel (illeve, ha van valami módosítás, akkor a cella alapú formázás a fallback)... Azért hasznos is tud lenni a feltételes formázás.
Most is épp egy többszörös szűrés alapú kiválasztásos workseet-et kellett összedobnom, ahol named range alapú (erősen számolós) feltételes formázás van. Enélkül egyszerűen nem lehet rendesen kitölteni a munkalapot. -
válasz
baderoli
#29795
üzenetére
Ezek mind okozhatnak jelentős fájlméret növekedést:
- formázás (főleg az új excelben, nagyon sok sor és oszlop van)
- sok pivot tábla (minden pivot tábla számára az excelben van egy kis "mini adatbázis")
- named range (gyakorlatilag a range értékeinak másolata még egyszer a táblűban)
- rejtett mezők/munkalapok (bármi lehet bennük/rajtuk)
- beillesztett képek vagy objektumok (ezek lehetnek akármekkorák) -
válasz
Sátán44
#29757
üzenetére
T
ök jó hogy megkaptad a makróst isja az nem neked ment
Data validation nekem most egyszerűbb lett - némi megkötéssel:
- Minden óra elé kell a nap
- Kell egy mező amiben az 'x' van és mellette egy ami üres (sárgával alul, a sor eltüntethető)C2-t ki kell jelölni és a következő Named Range-et kézzel létre hozni:
SelectX =IF(COUNTIFS(Sheet1!C$2:C$28,"x",Sheet1!$A$2:$A$28,Sheet1!$A31)<2,Sheet1!$C$31,Sheet1!$D$31)Utána kijelölni az adatmezőket -> Data Validation -> List
=SelectXIgnore blank pipa kivevendő:

-
Mi ez a kígyó kód? Hibák:
1) használj kód beillesztést
2) miért nem FOR cilkust használsz
3) miért kell hátul tesztelni (igazából nem is hátul, hanem ciklusban, ha elöl is tesztelsz
4) mindent letesztelsz mindennel. Vsz az a probléma, hogy az utolsó tesztelés nem ad vissza semmit, mivel a j. (jé-edik) mezőbe rakod a megjegyzést, nem az i.(í-edik) mezőbe.
5) Dim i, j As Integer - ez csak a j változót deklarálja Integerre, i az Variant lesz.Sub Makró_hasonlító()
Dim i, j
For i = 2 To 833
Do
For j = 2 To 833
If (Cells(i, 1).Value = Cells(j, 6).Value) And (Cells(i, 2).Value = Cells(j, 7).Value) Then
Range("I" & i).Value = "Van egyezés"
Exit Do
End If
Next
Loop While False
Range("I" & i).Value = "Nincs egyezés"
Next
End Sub -
Makróval a legegyszerűbb:
Sub Feltolt()
Dim s As Worksheet
Dim r(), ix
ReDim r(1 To ActiveWorkbook.Worksheets.Count, 1 To 2)
ix = 1
For Each s In ActiveWorkbook.Worksheets
If s.Type = xlWorksheet Then
r(ix, 1) = s.Name
r(ix, 2) = s.Cells(1, 1).Value2
ix = ix + 1
End If
Next
Set s = ActiveWorkbook.Worksheets.Add(Before:=ActiveWorkbook.Worksheets(1))
s.Range(s.Cells(1, 1), s.Cells(ActiveWorkbook.Worksheets.Count - 1, 2)).Value2 = r
End Sub -
válasz
m.zmrzlina
#29706
üzenetére
Adj hozzá egy E oszlopot (E1):
=(C1>"")*4+(D1>"")*2
és rakd az alábbi sorrendbe
E - csökkenő számsorrend
C - A -> Z
D - A -> Z -
-
válasz
TrollBalint
#29532
üzenetére
-
válasz
TrollBalint
#29528
üzenetére
Array fügvényt nem sima enter-rel hanem shift+ctrl+enter-rel viszel be.
Illetve sima függvényként (ez előzőleg meghatározott Range-ek használatával) a következőnek is működnie kell:
=SUMPRODUCT(SUMIF(src_a,choises,src_b))Ez ráadásul működik úgy is, hogy nincs növekvő sorba rendezve az src_a
-
válasz
Delila_1
#29523
üzenetére
Sima lookup-nál nincs ilyen paraméter.
Érdekes módon a lookup (obsolete) működik, de a vlookup nem és az index+match sem.
Debugoltam egy kicsit és ez fogadott:
Named Range-ek:
src_s1 =MATCH(choises, src_a, 0)
src_s2 =INDEX(src_b,sch_s1)
src_s3 =IFERROR(sch_s2,0)=count(src_s1) -> 2
=counta(src_s1) -> 10
Eddig jó=count(src_s2) -> 1
=counta(src_s2) -> 1
Ez már nem jó...És a végén természetesen a SUM sem jó:
=SUM(src_s3) -> 3 (az első elem)Az INDEX valahogy elcseszi a tömb struktúrát (pedig ha lehúzom excelben a 10 mezőt, akkor jól kiírja az elemeket)
-
-
válasz
TrollBalint
#29515
üzenetére
sumifs szerintem a megoldás - amúgy miért gond az 52* lemásolás? megírod egyszer, és lehúzod az 52. sorig (sőt, ha több lapot kijelölsz egyszerre, akkor az összes lapon odamásolja a függvényt)
-
válasz
k78chriss
#18231
üzenetére
Őőőő? Nem egészen értem - a végén úgyis 0-t vonna ki, mert ez van az utolsó értékkel rendelkező sor után. Vagy én nem értek valamit? Mit jelent neked, hogy "értéket tartalmaz"?
Azt mondjuk meg lehet oldani, hogy egy csoportból (pl itt a C3
1000 oszlopból) az utolsó értéket vegye fel:
=HA(($D$1-OFFSET(C3,INDEX(COUNTA(C3
1000),1,1),0))<(A3-20);"oké";"NEM") -
Nekem megy angolosítva:
=IF(A1<0,"Negatív",IF(AND(A1>0, A1<=0.5),"Normál",IF(AND(A1>0.5,A1<=1.2),"Magas","Túlárazott")))csak hibás

-1 Negatív
-0.5 Negatív
0 Túlárazott
0.4 Normál
0.6 Magas
1 Magas
1.5 Túlárazott
2 Túlárazott
3 TúlárazottNem kellenek bele az és feltételek, mert alulról amúgy is folyamatosan szűkítjük a tartományt:
=IF(A1<0,"Negatív", IF(A1=0, "Nulla", IF(A1<=0.5, "Normál", IF(A1<=1.2, "Magas", "Túlárazott")))) -
Az alább linkelt cikk alapján csináltam - csak a több oszlophoz kellett plusz egy kis szűrés - no meg némi módosítás az eredeti képleteken. A cikkben szépen el van magyarázva miért és hogy működik a dolog.
[link]Elméletileg amúgy ha a Sheet1 A - C - E oszlopaiba belerakod a megfelelően struktulát adataidat, akkor bármennyi adatot (max 999 sor a jelenlegi képlet alapján) fel tudsz dolgozni, feltéve hogy a B - D - F oszlopokban a képletet lehúzod az A oszlop aljáig...
-
válasz
A_ScHuLcZ
#18120
üzenetére
Egy mezőben szerintem csak makróval tudod megoldani.
Két/három mezőben szerintem működhet:
- elsőben beviszed az adatokat ppp:mm alakban
- második (eltüntetett) oszlopba átszámolod a szövegből kizárólag másodperc alapra, ezzel tudsz összeget számolni és ezt tudod majd visszaalakítani ppp:mm alakra - így:
[B2]=INT(A2/60)&":"&TEXT(MOD(A2,60),"00") -
Szerintem makróval lehet csak 2-nél több szintet.
Két szinten még megoldottam excel fügvényekkel, de szerintem három szinthez szerintem már makró kell.
Legegyszerűbb úgy megoldani, hogy (oszloponként) a makró bemenete egy olyan terület, amit a következők alapján állítunk elő:
- az előző oszlop szűrése (a kiválasztott szöveg)
- az első elem címe (MATCH-el kinyerhető)
- a hozzá tartozó sorok száma (COUNTIF-fel kinyerhető)
- a választandó terület (OFFSET-el elkészíthető a fentiekkel)A makró csak annyit csinálna, hogy a megkapott listából kitörli a duplikált/üres elemeket és visszaadja a deduplikált tömböt. Ahogy néztem ezt segédtábla nélkül nem lehet megcsinálni.Úgy látom egész nap ültem rajta és már megcsinálta valaki... Sajnos a fájlt nem tudom megnézni, majd este ránézek

-
válasz
Geryson
#18086
üzenetére
Makróval:
Public Function Kerekit5(Value) As Integer
If Not (IsNumeric(Value)) Then
Kerekit5 = 0
Exit Function
End If
Value = Round(Value, 0)
lv = Value Mod 10
Select Case lv
Case 0 To 2
Value = Value - lv
Case 3 To 7
Value = Value - lv + 5
Case 8 To 9
Value = Value - lv + 10
End Select
Kerekit5 = Value
End Function -
válasz
m.zmrzlina
#18083
üzenetére
If Asc(Mid(cella.Value, i, 1)) > 47 And Asc(Mid(cella.Value, i, 1)) < 58 Then
helyett
If isNumeric(cella.Value, i) Then
egyszerűbb, és kevesebbet is számol (bár nem szükségszerűen annyira megbízható...) -
válasz
BenJoe80
#18052
üzenetére
feltételezve, hogy a szavaid az A oszlopban vannak és mondjuk a D oszlop szabad a D2-be beteszel egy ilyet:
=COUNTIF(A:A, A2) - magyar excelben asszem SZUMHA
Ezután lehúzod a képletet szótár aljáig, majd beállítasz egy szűrést és eltüntetsz minden olyan sort, amiben az érték 1.
A maradékot kigyomlálod, hogy mindből csak egy maradjon.
Új hozzászólás Aktív témák
- Autós topik
- Parkside szerszám kibeszélő
- PlayStation 5
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Sokkal jobb ajánlat lett elődjénél az iPhone 17e
- MWC 2026: Kezünkben a Vivo V70, megvan a magyar ára is
- Formula-1
- E-roller topik
- Vezeték nélküli fejhallgatók
- AMD off topik: VGA, CPU, APU és minden, ami AMD
- További aktív témák...
- Vírusirtó, Antivirus, VPN kulcsok GARANCIÁVAL!
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - 15% AKCIÓ
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Játékkulcsok ! : PC Steam, EA App, Ubisoft, Windows és egyéb játékok
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RTX 5080 16GB GAMER PC termékbeszámítással
- 232 - Lenovo Legion Pro 5 (16IAX10) - Intel Core U7 255HX, RTX 5070
- Újszerű iPhone 14 Plus 128GB Lila független, 1 Év garancia
- Samsung Galaxy A16 / 4/128GB / Kártyafüggetlen / 12Hó Garancia
- Lenovo T14s Gen 1 i5 10. gen., 16GB RAM, 256-512GB SSD, jó akku, számla, 6 hó gar
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest




65535-ről I25
65535-re



Fferi50