- Motorola Edge 60 és Edge 60 Pro - és a vas?
- Xiaomi 15 - kicsi telefon nagy energiával
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Android alkalmazások - szoftver kibeszélő topik
- Amazfit Active 2 NFC - jó kör
- Telekom mobilszolgáltatások
- Samsung Galaxy S24 - nos, Exynos
- Redmi Note 13 Pro 5G - nem százas, kétszázas!
- Vivo X200 Pro - a kétszázát!
- Samsung Galaxy A56 - megbízható középszerűség
-
Mobilarena
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
-
bteebi
veterán
válasz
batmanéhes #29859 üzenetére
Ez nagyon jó, a shift+F10-et nem ismertem, pedig rendkívül hasznos
. Ezek alapján az érték beillesztése egyszerű(bb)en: ctrl+C, aktuális cella kiválasztása, és vagy a helyi menü gomb, vagy shift+F10 után "é" (érték). Egész gyors és viszonylag kényelmes.
-
bteebi
veterán
válasz
PistiSan #29835 üzenetére
A munkalapnevek nem (sem) ismertek, de azért ebből már el tudsz indulni:
=INDIREKT(CÍM(HOL.VAN(1111;'Munka1'!A1:A200;0)+n-1;1;4;1;"Munka1"))
Az n értéke azt adja meg, hogy hány sorral kezdődik lentebb a táblázatban az első kereshető érték. Ha pl. a 3. sorban van a fejléced, és a 4. sorban kezdődnek a kereshető értékek, akkor az n értéke 3 (mert 3 sorral van lejjebb az 1. sornál). A "-1" pedig azért kell, hogy az egy sorral fentebb lévő értéket találd meg. Ha az 1111 helyett szöveg lenne, akkor dupla idézőjelbe kell tenni, pl. "Érték".
#29836: Feltételes formázással. D2-n állva: Feltételes formázás → Új szabály → A formázandó cellák kijelölése képlettel → =$B$2=3.
-
bteebi
veterán
válasz
huliganboy #29831 üzenetére
Nem figyeltem eléggé.
=HA(ÜRES(C12)=HAMIS;HA(C12>=0;"VÉGE";"LEJÁTSZANDÓ");"LEJÁTSZANDÓ")
-
bteebi
veterán
válasz
huliganboy #29829 üzenetére
Már értem. Akkor egyszerűen csak meg kell vizsgálni, hogy üres-e a cella. Ha az, akkor ne jelenítsen meg semmit (""), ha meg van benne valami, akkor vizsgálja meg a tartalmát.
=HA(ÜRES(C12)=HAMIS;HA(C12>=0;"VÉGE";"LEJÁTSZANDÓ");"")
-
bteebi
veterán
válasz
huliganboy #29825 üzenetére
=HA(C12>=0;"VÉGE";"LEJÁTSZANDÓ")
-
bteebi
veterán
válasz
Fire/SOUL/CD #29820 üzenetére
Persze hogy működik, ki is próbáltam
, a kétség csak amiatt volt bennem, hogy vajon jól értettem-e a kérdését
.
-
bteebi
veterán
válasz
PETEE78 #29814 üzenetére
Miben működött úgy? Excel 2003-ban? Valószínűleg Excel 2007-től ugyanúgy (de ettől eltérően) van, ami úgy tűnik, hogy ctrl+c, majd alt+ővé <enter>. (Ő: Kezdőlap, V: Beillesztés, É: érték). A ctrl+alt+v amúgy elvileg megjeleníti az Irányított beillesztés párbeszédpanelt, de nekem nem működött.
-
bteebi
veterán
válasz
sztanozs #29768 üzenetére
Vagy csak simán Ctrl+F3-at nyom. Vagy kijelöli a tartományt, és a név mezőbe (bal oldalon, ahol a te screenshotodon az "A1" kiírás látszik) beírja a kívánt nevet, és entert nyom. Ha ugyanitt később rákattint a nyílra, akkor megnézheti az összes elnevezett tartományt.
-
bteebi
veterán
válasz
Delila_1 #29754 üzenetére
Nem kell azonosnak lennie. Nyilván időt veszít azzal, hogy minden sorban a UsedRange széléig megy, de még mindig sokkal jobb, mintha a teljes sort (256 vagy 16384 cella) végignézné. De akár azt is megtehetné, hogy minden sornak megnézi a jobb szélét, és csak addig menne a makró:
oszlopig = Cells(sor, Columns.Count).End(xlToLeft).Column
Persze ha teljesen fix a táblázat, akkor jó (gyorsabb), ha csak a fix tartományok vannak megadva.
-
bteebi
veterán
válasz
coldfirexx #29736 üzenetére
Érdekes. Szemre jónak tűnt, ki is próbáltam, és nekem működött. Mondjuk neked is volt, ahol jó volt...
-
bteebi
veterán
válasz
m.zmrzlina #29731 üzenetére
Megvan a hiba, bocs. Természetesen user error, méghozzá a hülyébb fajtából B. A 3. sortól kellett volna kezdeni
. A 2. sor üres volt, nem csoda, hogy nem működött. Most már viszont jó
. Ahogy keresgéltem közben a megoldást, legalább annyi kiderült, hogy egy On Error Resume Next nem árt a makróba
.
-
bteebi
veterán
válasz
m.zmrzlina #29731 üzenetére
Úgy működik. Lehet, hogy megpróbálom kerülőúton úgy megcsinálni, hogy a képletet írja a cellába (és az majd visszaadja a helyes értéket), de jobb lenne, ha eleve csak az érték kerülne bele.
-
bteebi
veterán
válasz
m.zmrzlina #29729 üzenetére
Sajnos így is ugyanaz a hiba. Mindenesetre akkor - látszólag - szintaktikailag rendben van, amit írtam. Végiggondolom még egyszer, hogy mi lehet a hiba oka, de egyelőre elég tanácstalan vagyok, mert látszólag szerintem rendben van a kód.
-
bteebi
veterán
Sziasztok!
Van egy Excel file két munkalappal ("adat" és "forras"), az "adat" munkalapra szeretnék másolni a "forras" lapról úgy, hogy az "adat" 1. oszlopában lévő érték alapján bemásolok a 2. oszlopba egy értéket a "forras" lap 2. oszlopából, amihez az FKERES-t használnám. Mindkét munkalapon változó nagyságú tartomány van, viszont az "adat" 1. oszlopában szereplő érték a "forras" 1. oszlopában biztos, hogy megtalálható (és csak egyszer).
Sub kivalaszt()
Dim ar As String, lastrow As Integer, lr As Integer, sor As Integer
lastrow = Sheets("forras").UsedRange.Rows.Count
lr = Sheets("adat").UsedRange.Rows.Count
For sor = 2 To lr
ar = WorksheetFunction.VLookup(Sheets("adat").Cells(sor, 1), Sheets("forras").Range("A1:B" & lastrow), 2, False)
Sheets("adat").Cells(sor, 2) = arErre run-time errort kapok (1004): "WorksheetFunction osztály VLookup tulajdonsága nem érhető el." Vajon mi lehet a hiba? Előre is köszönöm a segítségeteket!
-
bteebi
veterán
válasz
Melack #29125 üzenetére
Szia!
Konvertáld a tartományokat táblázattá. Beszúrás → Táblázat. Dinamikusan fognak bővülni. Az ismétlődő elemeket ki tudod szűrni (Adatok → Speciális → Más helyre másolja → Csak az egyedi rekordok megjelenítése), de ez egy kicsit macerás.
A 4. táblázatot mindig megcsinálhatnátok frissen, makróval (makrórögzítővel is elég jól meg lehetne oldani, pláne, ha fixek a nevek, talán csak a tartományokat kellene átírni ActiveCell.Currentregion-re, vagy valami hasonlóra).
-
bteebi
veterán
A képlet elején lévő cellahivatkozások rossznak tűnnek, el kell eltolni egy oszloppal, tehát C helyett D, és B helyett C. Nem az aktuális árból vontad ki az év végit, hanem az év végiből a vételárat.
Szerintem valami ilyesmi kell, de nem biztos, hogy jól értettelek:
=HA(D3>C3;HA(D3>B3;0;B3-D3);D3-C3) -
bteebi
veterán
válasz
karlkani #29083 üzenetére
"akkor a megjegyzésben eredményül nem 400 Ft/liter jelenik meg, hanem 4000 Ft/liter. Ezzel lehet valamit kezdeni?"
Lehet. A probléma ott van, hogy a hozzáfűzött szövegrészben van egy felesleges 0. A hozzáfűzött rész egy sztring, formátumot nem állít:
Range("I" & Target.Row).Comment.Text Text:=ertek & "0 Ft/liter"
Elég, ha a "0 Ft/liter" helyett csak " Ft/liter"-t írsz. A SZÖVEG függvénnyel egyébként be tudod állítani a formátumot, és ahhoz fűzöd hozzá a szöveget.
Range("I" & Target.Row).Comment.Text Text:=WorksheetFunction.Text(ertek, "0") & " Ft/liter"
Nem próbáltam ki, de jónak kell(ene) lennie.
-
bteebi
veterán
válasz
PETEE78 #29074 üzenetére
Mindig a filenév végén van a dátum, tehát itt például 1510160939, illetve ebből a 151016? A végén lévő dátum mindig négy karakter? Mert ha igen, akkor a megnyitás után írd bele a makróba azt, hogy
fnev = ActiveWorkbook.Name
If Mid(fnev, Len(fnev) - 14, 6) <> WorksheetFunction.Text(Date, "yymmdd") Then
ActiveWorkbook.Close savechanges:=False
End IfA 14 azt jelenti, hogy ennyi karakterrel a teljes filenév (pl. 221_ALMA_20151016_20151016_1510160939.csv) előtt indul a keresés, és 6 karakter hosszú (mert amit keresünk, az ugye ééhhnn formátumú).
#29075: Amúgy igen, nagyon nyakatekert lenne
. Ez se a legegyszerűbb, mert előbb megnyitja a file-t, némi eséllyel feleslegesen...
-
bteebi
veterán
válasz
Gandalf80 #26268 üzenetére
Szia!
A dátumot és az időt egyszerűen a kiindulási dátum tört, illetve egészrésze adja. A dátumot 1900. január 1-jétől eltelt napok számaként tárolja (1900. január 3-a számként így 3 lenne), csak a formátuma más. Az egészrészt az INT függvénnyel tudod meghatározni, a törtrészt pedig úgy, hogy kivonod az eredeti számból az egészrészét.
A dátum: =SZÖVEG(INT(A1);"éééé.hh.nn")
Az idő: =SZÖVEG(A1-INT(A1);"óó:pp")Ebben az esetben az A1-es cellában van az átalakítandó időpont. A formátumokat úgy adod meg, ahogy jólesik. "hhh" esetén 3 betűs rövidítést ad (pl. már, ápr), "hhhh" esetén kiírja a hónap nevét (március, április), "óó" esetén az egy számjegyből álló órák elé nullát tesz (pl. 08, 09, de 10), "ó" esetén pedig egyszerűen kiírja a számot (8, 9, 10).
#26266: Pedig prózai a megfejtés. Egyszerűen nem ismerik az &-es összevonást
. Én spec. az ÖSSZEFŰZ függvényt nem ismertem viszonylag sokáig.
-
bteebi
veterán
Szia!
Minden név egymás alatt van, egy oszlopban, vagy például az "A" sorban van az, hogy "Csoport neve", és mondjuk a "B"-ben vannak a nevek? A "Csoport neve" fixen szerepel a cellákban (tehát pl. "1. Csoport neve", "2. Csoport neve", stb.)? Ha igen, akkor a "bal" vagy a "jobb" függvénnyel szűrve lehetne keresést végezni a DARABHATÖBB függvénnyel. Mindenesetre makró nélkül szerintem csak nagy gányolással menne, nem lehetne rendesen automatizálni. Makróval viszont megoldható, bár jó lenne látni egy mintatáblát tesztadatokkal (képként beszúrva is jó, csak látszódjon az elrendezés).
-
bteebi
veterán
Sziasztok!
Van egy mintatáblázatom:
hétfő kedd szerda csütörtök péntek szombat vasárnap
1. hét 160 180 nincs adat 190 leltár 230 270
2. hét 185 150 200 210 130 110 290Ezt szeretném ábrázolni vonal diagramként (jelölőkkel), az adattábla megjelenítésével (adattábla megjelenítése: diagram kijelölése, majd Diagrameszközök → Elrendezés → Adattábla → Adattábla megjelenítése jelmagyarázat-jelekkel). Alapvetően működik, viszont két problémám van vele. Van két szöveges mező ("nincs adat", illetve "leltár"), amiket az adattáblában 0-nak jelez, tehát nem magát a szöveget jelzi ki. Ráadásul azt szeretném, ha a "nincs adat" mezők nem látszanának (vagyis ott nem lenne semmilyen kijelzett érték a diagramon), a "leltár" értéke (0) jó úgy, ahogy van. Így néz ki:
Azt szeretném, hogy így nézzen ki (sajnos ez csak egy rajzolt kép):
Sok fórumot megnéztem már, de sajnos nem találtam rá megoldást. Az első probléma (a szöveges elemek kijelzése) tudom, hogy megoldható, mert láttam már olyan ábrát, aminél jól voltak kijelezve, az utóbbi (az egyik szöveges elem ábrázolásának elhagyása) viszont nem biztos, hogy megoldható. Van ötletetek?
Előre is köszönöm a segítségeteket!
-
bteebi
veterán
válasz
Fferi50 #26166 üzenetére
Szia!
Közben elég sokféleképp próbálkoztam. A jelenlegi változatnál "Subscript out of range" hibaüzenetet dob ennél a sornál:
cellap.Cells(19 + 2 * adat, oszlop) = Left(Workbooks(fajlnev).Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16), _
Len(Workbooks(fajlnev).Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16) - 1))Sub masol()
Set cellap = ThisWorkbook.ActiveSheet
Set ablak = Application.FileDialog(msoFileDialogOpen)
ablak.Filters.Clear
ablak.Filters.Add "Excel fájlok", "*.xls, *.xlsx, *.xlsm"
ablak.Filters.Add "Excel 2003 worksheet (.xls)", "*.xls"
ablak.Filters.Add "Excel 2010 worksheet (.xlsx)", "*.xlsx"
ablak.Filters.Add "Excel makró (.xlsm)", "*.xlsm"
ablak.FilterIndex = 1
FileChosen = ablak.Show
ablak.Title = "Válaszd ki a file-t"
ablak.InitialFileName = ThisWorkbook.Path
ablak.InitialView = msoFileDialogViewList
If FileChosen = -1 Then
fajlnev = ablak.SelectedItems(1)
Workbooks.Open (fajlnev)
Else: Exit Sub
End If
For adat = 1 To 10
For oszlop = 2 To 10 Step 4
cellap.Cells(19 + 2 * adat, oszlop) = Left(Workbooks(fajlnev).Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16), _
Len(Workbooks(fajlnev).Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16) - 1))
cellap.Cells(19 + 2 * adat, oszlop) = cellap.Cells(19 + 2 * adat, oszlop) * 1000
cellap.Cells(19 + 2 * adat, oszlop).NumberFormat = "0"
Next oszlop
Next adat
Workbooks(fajlnev).Close savechanges:=False
End SubHa az End If az utolsó előtti sorban van, akkor lefut a kód, csak nem csinál semmit; nem másol és nem zárja be a megnyitott file-t. A Workbooks(fajlnev) helyett próbálkoztam ActiveWorkbook-kal is, de úgy se ment, akkor "Type mismatch" hibaüzenetet ad.
-
bteebi
veterán
válasz
Fferi50 #26163 üzenetére
Szia!
"Ez azt jelenti, hogy mindig van a szám után egy betű és a formátum szöveg?"
Basszus, igazad van (ebben is)!
Minden bizonnyal emiatt nem ment a szorzás, mert az eredeti cella szöveg formátumú volt (vagyis általános). Viszont valamiért az adatmásolás továbbra sem megy. Szerintem itt van a probléma, valószínűleg a "fajlnev" (vagy épp a "cellap") miatt:
Set cellap = ThisWorkbook.ActiveSheet
...
cellap.Cells(19 + 2 * adat, oszlop) = Left(fajlnev.Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16), Len(fajlnev.Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16) - 1))A végén pedig szeretném bezárni a megnyitott file-t, de a Workbooks.Close (fajlnev) paranccsal nem megy, pedig a Workbooks.Open (fajlnev) parancsra megnyitja
.
-
bteebi
veterán
Sziasztok!
Van egy file-om egy modulban lévő makróval. A file különböző - de megegyező struktúrájú - lapjaira szeretnék más Excel file-okból adatokat bemásolni. A másolandó adatokon minimális változtatást végeznék: az eredeti adatok általános formátuma pl. "3.2k", ezt - az utolsó karakter levágása után - felszorzom 1000-rel, és azt szeretném bemásolni, a számformátumot "0"-ra állítva.
Összességében egy dialógusablakkal szeretném megnyitni az adatforrásként szolgáló file-t, viszont nem tudom, hogy hogyan kell(ene) meghivatkozni ahhoz, hogy menjen a másolás.
A jelenlegi makró:
Sub kitoltes()
Dim ablak As FileDialog, fajlnev As String, FileChosen As Integer
Set ablak = Application.FileDialog(msoFileDialogOpen)
FileChosen = ablak.Show
ablak.Title = "Válaszd ki az importálandó file-t"
ablak.InitialFileName = ActiveWorkbook.Path
ablak.InitialView = msoFileDialogViewList
ablak.Filters.Clear
ablak.Filters.Add "Excel 2003 worksheet", "*.xls"
ablak.Filters.Add "Excel 2010 worksheet", "*.xlsx"
ablak.Filters.Add "Excel makró", "*.xlsm"
ablak.FilterIndex = 1
If FileChosen = -1 Then
fajlnev = ablak.SelectedItems(1)
Workbooks.Open (fajlnev)
Else: Exit Sub
End If
Dim adat As Integer, oszlop As Integer
For adat = 1 To 10
For oszlop = 2 To 10 Step 4
'ebben a sorban valószínűleg több hiba is van:
ActiveSheet.Cells(19 + 2 * adat, oszlop) = 1000 * (Left(fajlnev.Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16), Len(fajlnev.Sheets("Sheet1").Cells(36 + 2 * (adat - 1), 16) - 1)))
ActiveSheet.Cells(19 + 2 * adat, oszlop).NumberFormat = "0"
Next oszlop
Next adat
End SubHa benne van az 1000-rel való szorzás, akkor "Type mismatch" hibát dob, ezért jobb híján beszúrtam egy plusz sort, így már legalább az a része működik:
ActiveSheet.Cells(19 + 2 * adat, oszlop) = ActiveSheet.Cells(19 + 2 * adat, oszlop) * 1000Tudnátok segíteni a hibák kijavításában? Előre is köszönöm!
-
bteebi
veterán
válasz
Fferi50 #25182 üzenetére
Szia!
Köszi az észrevételeket!
Az átzárójelezés elég buta hiba volt (igazából azt a részt érthetetlen módon nem ellenőriztem le, mondván, hogy az úgyis jó - mert ha nem lenne jó, akkor szólna az Excel
), ezt az eseménykezeléses dolgot viszont nem tudtam. Egyelőre nem működik tökéletesen, de majd futok vele még egy kört, hátha sikerül megreparálnom.
-
bteebi
veterán
Sziasztok!
Van egy viszonylag nagy táblázatom, és alatta ugyanaz, értékek nélkül. A felső táblázatban alapvetően számok vannak, de van néhány szöveges mező is. Fontos, hogy ezek a szöveges értékek ki legyenek szűrve. Az alsó táblázatba a felső táblázat adatait szeretném bizonyos szűrő feltételek mellett bemásolni. A szűrő feltétel az S130-as cellában lévő érték; ha attól nagyobb a cella értéke, akkor szűrésre kerül, a szűrt érték pedig "" (üres cella) lesz. A két táblázat formailag megegyezik, annyi, hogy 72 sornyi különbség van köztük.
Ehhez még nem kellett volna makró, de a szűrő bonyolódása után már nem tudtam megoldani egyszerű képlettel. Ha az első (5.) oszlopban lévő szám nagyobb lenne a szűrőnél, de a mellette lévő (6.) oszlopban a szűrés után is van érték, akkor annak kell az 5. oszlopba kerülnie. A többi oszlopnál (6-11.) pedig, ha az alapérték szűrésre kerül, de a mellette lévő szomszédos oszlopok értékei nem, akkor annak a két szomszédos oszlopnak az átlagát kellene beilleszteni.
Valószínűleg túl sok volt az argumentum, egyébként valami ilyesmi volt:
=HA(VAGY(F5>=$S$130;SZÁM(F5)=HAMIS);HA(ÉS(SZÁM(E5)=IGAZ;SZÁM(G5)=IGAZ);ÁTLAG(E5;G5);HA(SZÁM(F5)=IGAZ;HA(F5<$S$130;F5;"");"")))
Kicsit talán nehezen érthető a probléma, ezért feltettem egy képet:
Tegyük fel, hogy a szűrő értéke 100, tehát az ennél nagyobb értékeket szeretném kiszűrni. Ebben az esetben a B2-es cella értéke ki lenne szűrve - a mellette, a C2-es cellában lévő szám azonban nem, ezért a C2 értékét kellene lemásolni 72 cellával lentebbre. A D3-as cella viszont üres, de a mellette lévők (C3 és E3), ezért a szűrés során a C3 és E3 átlagát kellene továbbvinni.
Írtam rá egy makrót, de valamiért nem csinál semmit, pedig lefut. A makró a "proba" nevű laphoz van rendelve.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sor As Integer, oszlop As Integer
If Target.Address = "$S$130" Then
For sor = 77 To 139
If Sheets("proba").Cells(sor - 72, 5) < Sheets("proba").Range("S130") Or WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 5) = True) Then
Sheets("proba").Cells(sor, 5) = Sheets("proba").Cells(sor - 72, 5)
ElseIf WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 5) = False) Then
If WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 6) = True) Then
Sheets("proba").Cells(sor, 5) = Sheets("proba").Cells(sor - 72, 6)
Else: Sheets("proba").Cells(sor, 5) = ""
End If
End If
For oszlop = 6 To 11
If Sheets("proba").Cells(sor - 72, oszlop) >= Sheets("proba").Range("S130") Or WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop) = False) Then
If WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop - 1) = True) And WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop + 1) = True) Then
Sheets("proba").Cells(sor, oszlop) = WorksheetFunction.Average(Sheets("proba").Cells(sor - 72, oszlop - 1), Sheets("proba").Cells(sor - 72, oszlop + 1))
ElseIf Sheets("proba").Cells(sor - 72, oszlop) < Sheets("proba").Range("S130") And WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop) = True) Then
Sheets("proba").Cells(sor, oszlop) = Sheets("proba").Cells(sor - 72, oszlop)
Else: Cells(sor, oszlop) = ""
End If
End If
Next oszlop
Next sor
End If
End SubHol rontottam el? Előre is köszönöm a segítségeteket!
-
bteebi
veterán
válasz
slashing #23982 üzenetére
slashing, Fferi, Delila, köszönöm!
slashing: Tényleg elég képként, sőt máshogy nem is nagyon lehet. Közben amúgy még tegnap este magamtól is módosítottam a makrón emiatt, mert ha csak lemásoltam a diagramot (tehát "élő" hivatkozás volt a forrásadatra), akkor hiába generálta le mind az 50 ábrát, csak egyfélét jelzett ki (a legutolsót), mivel fix adatokra hivatkozott
. A változás egyébként minimális, ActiveSheet.Paste
helyett
ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)". Amúgy képpel tényleg könnyebb dolgozni. Jártam már úgy, hogy a szerkeszthetőség miatt először csak simán bemásoltam az ábrákat Wordbe, de kicsit szétcsúsztak, úgyhogy végül képként lett beillesztve az összes.A Worddel még majd futok egy kört.
Fferi50: Köszönöm, ki fogom próbálni. Az utóbbi két válaszodból egyértelműen kitűnik, hogy nem ártana (valahonnan) megtanulnom az alapokat, hogy ne kérdezzek alapvető hülyeségeket is
.
Delila: Köszönöm, hasznos infó ez is.
-
bteebi
veterán
válasz
Fferi50 #23979 üzenetére
Köszi a segítséget!
Így már (első közelítésben) működik, még ha nem is a legszebb/leggyorsabb.
"A select csak az aktív munkalapon használható."
Ezt nem tudtam/nem gondoltam rá, pedig logikus...Az activate/select-et amúgy nem lehet megkerülni? Próbáltam úgy, hogy
Sheets("Adatok").ChartObjects("Diagram 1").ChartArea.Copy
Sheets("Diagramok").Cells(3 + (i - 1) * 29, 2).Paste,de sajnos nem működik. Lehet valahogy "rendesen" diagramot másolni?
-
bteebi
veterán
Sziasztok!
Van egy táblázatom, aminek a sorai alapján (1-50-ig) diagramokat generálok. Úgy van megcsinálva, hogy ha egy adott cellában (jelen esetben az A1-ben) lévő számot megváltoztatom, akkor a diagram annak megfelelően dinamikusan változik. Át szeretném másolni az összes diagramot egy másik munkalapra, egymás alá: egy adott sorban az lenne kiírva, hogy hanyadik ábra, alatta pedig a diagram lenne. Word dokumentumba még jobb lenne, de sajnos egyelőre még csak ott tartok, hogy egy másik lapra másolja át. Pontosabban még ott se, mert valamiért nem működik. (Ráadásul nem is "elegáns".)
Sub graphcopy()
Dim i As Integer
For i = 1 To 50
Sheets("Adatok").Range("A1") = i
Sheets("Adatok").ChartObjects("Diagram 1").Activate
ActiveChart.ChartArea.Copy
Sheets("Diagramok").Cells(2 + (i - 1) * 28, 2) = i & ". ábra"
Sheets("Diagramok").Cells(2 + (i - 1) * 28, 2).Font.Bold = True
Sheets("Diagramok").Cells(3 + (i - 1) * 28, 2).Select
ActiveSheet.Paste
Next
End SubAzt írja, hogy "Range osztály Select metódusa hibás". Mi a baj? Nem túl elegáns egyébként a makró; próbáltam úgy is megcsinálni, hogy Sheets("Adatok").ChartObjects("Diagram 1").Copy, de úgyse ment, a makrórögzítős gagyi megoldással (ActiveChart.ChartArea.Copy
és ActiveSheet.Paste) működött, de ha egymás alá akarom tenni a diagramokat, akkor nem megy. -
bteebi
veterán
-
bteebi
veterán
válasz
HS 2142 #23692 üzenetére
Ha nem kellenek a nyers adatok, csak a transzponált táblázat, akkor azt meg tudod csinálni, hogy a vágólapra helyezett táblázatot irányított beillesztéssel bemásolod képként (Enhanced metafile), majd ezt elforgatod Wordben 90°-kal. Jó minőségű és gyors, de sajnos az adatok nem lesznek szerkeszthetőek.
Vagy:
Elforgatod az összes szöveget 90°-kal, a sormagasságokat oszlopszélességűre veszed és fordítva, és akkor jó lesz. -
bteebi
veterán
válasz
Carasc0 #23567 üzenetére
1. Gagyi és jelen esetben valószínűleg nem túl gyors, de egyszerű megoldás, ha lehúzod a képletet, és a megfelelő részt lecseréled Ctrl+H-val (mondjuk a C-t D-re, de ha ez soronként változik, akkor nem jó). Feladattól függően elég macerás is lehet (itt most valószínűleg túl körülményes lenne).
2. Makróval. Kiindulásnak valami ilyesmi jó lehet, ezt kell kicsit átírnod:Dim i As Integer
For i = 1 To 40
Cells(i, 2).Value = WorksheetFunction.If(Sheets("Nyilvántartás").Range("C2") = Range("CX1"), WorksheetFunction.If(Sheets("Nyilvántartás").Range("D2") >= Range("K2"), WorksheetFunction.If(Sheets("Nyilvántartás").Range("D2") <= Range("K8"), 1, 0), 0), 0)
Next iHa a Range("hivatkozás") helyett mindenhol a Cells(sor, oszlop)-ot használod, akkor azt úgy paraméterezed ciklusban, ahogy csak szeretnéd, és akkor könnyen megvan az egész. A fenti példában a B1-es cellába (ami a Cells(1,2) cella) írt képlet van.
-
bteebi
veterán
válasz
tgumis #23494 üzenetére
Át kell írnod a file elérési útvonalát. Ctrl+H → Egyebek → Hatókör: Munkafüzet (esetleg a "Listába mind" is legyen bepipálva, és akkor láthatod, hogy hol vannak ilyen hivatkozások), és a megfelelő részt (a file elérési útvonalát) kicseréled. Keress szögletes zárójelre vagy \-re, az biztosan lesz benne.
-
bteebi
veterán
válasz
m.zmrzlina #23488 üzenetére
Köszönöm mindkettőtöknek!
#23491: Van benne valami.
-
bteebi
veterán
válasz
m.zmrzlina #23486 üzenetére
Akkor nem véletlenül nem találtam
. Köszönöm, ki fogom próbálni.
-
bteebi
veterán
Sziasztok! Azt meg lehet adni, hogy a "For Each" egy tartományban soronként vagy oszloponként haladva fusson le?
-
bteebi
veterán
- amikor megnyitom a fájlt akkor kérje be a nevet (Ok gomb ha megadta- addig szürke legyen)
- ha nincs ilyen név akkor írja ki hogy " Nincs beosztva"Szerintem jobb lenne, ha begépelés helyett inkább egy legördülő lista lenne, ahol mindenki kiválaszthatja a saját nevét. Ha be kell gépelni, akkor hibázni fognak, ráadásul kevésbé kényelmes. A begépeléshez egy mezei InputBoxra lenne szükséged, a legördülő lista viszont valamelyest macerásabb, ahhoz UserForm kell ComboBoxszal.
-
bteebi
veterán
válasz
Fferi50 #23410 üzenetére
Nagyon köszönöm a segítséged
, már majdnem jó
.
Sub osszeir()
Dim ws As Worksheet, i As Integer, cella As Range
i = 2
For Each ws In ActiveWorkbook.Worksheets
If Left(ws.Name, 5) = "Lista" Then
For Each cella In ws.UsedRange
If cella.Interior.Color = RGB(141, 180, 226) Then
Sheets("Összefoglaló").Cells(j, 3).Value = ws.Cells(5, (cella.Column \ 2) * 2) & " - " & ws.Cells(cella.Row, 1) & " - " & ws.Cells(6, cella.Column)
i = i + 1
End If
Next
End If
Next
End SubA Sheets("Összefoglaló").Cells(j, 3).Value = ws.Cells(5, (cella.Column \ 2) * 2) & " - " & ws.Cells(cella.Row, 1) & " - " & ws.Cells(6, cella.Column) sornál akad el, "Application-defined or object-defined error"-ral. Sajnos nem megy se ws-sel, se anélkül.
#23411: Neked is köszönöm Delila
. Az összevont cellás részt egyébként megoldottam így: (cella.Column \ 2) * 2. A "\" (mint újonnan ismét megtanultam) egész osztást végez, a mod (ezt is el szoktam felejteni) pedig a maradékos osztás maradékát adja meg. Például 14\3 = 4, 14 Mod 3 = 2.
-
bteebi
veterán
Sziasztok!
Van több munkalapon néhány táblázat, amikben bizonyos cellák kék hátterűek (RGB kód: 141, 180, 226). Ezeket a cellákat kellene kigyűjtenem egy külön lapra ("Összefoglaló") bizonyos elnevezési szabály alapján. A kép alapján érthető(bb) lesz.
Vegyük mondjuk a C12-es cellát. Kék hátterű, és úgy kellene kiírni az "Összefoglaló" lapra (a C2-es cellától kezdve lefelé), hogy Város 1 - 20150106 - du.; a többi kék cella ennek az analógiájára lenne elnevezve.
A munkafüzetben nagyon sok munkalap van, és csak a "Lista" névvel kezdődőeknél vannak ilyen cellák, ezért összességében felgyorsítaná a folyamatot, ha csak ezeket a lapokat nézné végig a makró.
Egyelőre eddig jutottam, de minden bizonnyal több hiba is van benne. Tudnátok segíteni a kijavításában?
Sub osszeir()
Dim ws As Worksheet, i As Integer, j As Integer, cella As Range
j = 2
For i = 1 To Worksheets.Count
If Left(ws.Name, 5) = "Lista" Then
ws.Activate
For Each cella In ActiveSheet.UsedRange
If cella.Interior.Color = RGB(141, 180, 226) Then
Sheets("Összefoglaló").Cells(j, 3).Value = Cells(5, cella.Column) & " - " & Cells(cella.Row, 1) & " - " & Cells(6, cella.Column)
j = j + 1
End If
Next
End If
Next i
End Sub -
bteebi
veterán
válasz
slashing #23384 üzenetére
Azt amúgy hogy lehetne megcsinálni, hogy csak szóköz(öke)t ne adhasson meg névnek? Mert ez
Loop Until nev <> "" And nev <> " " Or nev = False
csak egy karakternyi szóközig működne, n db esetén már nem.Némi keresgélés után sikerült megoldanom, de az azért érdekelne, hogy meg lehetne-e szebben is írni (egyszerűbben minden bizonnyal nem):
Do
nev = InputBox("A mérést végző személy Teljes neve:")
ujnev = WorksheetFunction.Substitute(nev, " ", "")
Loop Until ujnev <> "" Or nev = False -
bteebi
veterán
válasz
Delila_1 #23286 üzenetére
Na, így már működik - vagyis egyszer lefut, jól. Azt hogy lehetne megoldani, hogy mindig legyen új inputbox, amíg cancel-t nem nyomok? Úgy a makró újraindítása nélkül több szót is le lehetne cserélni egymás után.
Sub csere()
Dim ws As Worksheet, cserelni As String
On Error Resume Next
Application.DisplayAlerts = False
cserelni = Application.InputBox(Prompt:="Írja be a cserélendő szót.", _
Title:="Csere", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
For Each ws In ActiveWorkbook.Worksheets
ws.Cells.Replace What:=cserelni, Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
Next
End Sub -
bteebi
veterán
válasz
bteebi #23281 üzenetére
És azt hogy lehetne megcsinálni, hogy egy input box-ba beírt értéket cseréljen le (mindig ugyanarra, ""-re)? Beírnám az értéket, lecseréli, és addig menne, amíg cancel-t nem nyomok.
Mások kódjai alapján egyelőre eddig jutottam, minden bizonnyal több hiba is van benne.
Először is: le se fut, "Object required" hibát ír ki. Meg minden bizonnyal a ws.Cells.Replace What rész se stimmel. Meg tudnátok mondani, hogy hol hibáztam?
Sub csere()
Dim ws As Worksheet, cserelni As String
On Error Resume Next
Application.DisplayAlerts = False
Set cserelni = Application.InputBox(Prompt:="Írja be a cserélendő szót.", _
Title:="Csere", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
If cserelni Is Nothing Then
Exit Sub
Else
For Each ws In ActiveWorkbook.Worksheets
ws.Cells.Replace What:="cserelni", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
Next
End If
End Sub -
bteebi
veterán
Delila_1, m.zmrzlina, köszönöm!
-
bteebi
veterán
Sziasztok!
Olyat szeretnék csinálni makróval, hogy egy adott file összes munkalapján kicseréljek egy adott szót, pl. az almát körtére. Makró nélkül könnyen meg lehet oldani, hatókörnek a munkafüzetet kell megadni:
Ilyen opciót azonban VBA-ban sehol se találtam, ezért úgy gondoltam, hogy ciklusban lefuttatom az összes munkalapon. A kód:
Sub csere()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Cells.Replace What:="alma", Replacement:="körte", LookAt:=xlPart, _
SearchOrder:=xlByRows
Next
End SubAz aktív lapon lefut jól, de a többinél valamiért nem megy. Mi lehet a baj?
-
bteebi
veterán
válasz
Fferi50 #23065 üzenetére
Köszi a segítséget!
Szemre jónak tűnik-tűnt, viszont valamiért ez is hibát dob: Method 'Italic' of object 'Font' failed. El se tudom képzelni, hogy miért
. Próbáltam úgy is, hogy .Font.FontStyle = Italic, de arra meg azt írja, hogy Method 'Italic' of object 'Font' failed. Vajon mitől lehet?
-
bteebi
veterán
Sziasztok!
Van egy munkafüzet vagy 20 lappal, és majdnem az összes lapján van feltételes formázás. A formázási szabályon szeretnék változtatni, hogy a félkövér dőlt helyett csak dőlt legyen a font. Egyelőre eddig jutottam:
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Columns("A:Z").Select
With Selection.FormatConditions(1).Font
.Bold = False
.Italic = True
End With
Selection.FormatConditions(1).StopIfTrue = True
NextEzt a hibaüzenetet kapom: Method 'Italic' of object 'Font' failed. Olyan munkalap is van, hogy több formázási szabály is van. Ezeket - ha jól vettem ki más bejegyzésekből - a FormatConditions.Count segítségével elvileg ciklusba lehetne szedni. Megpróbáltam, de azt írja, hogy Object required:
For i = 1 To FormatConditions.Count
With Selection.FormatConditions(i).Font
.Bold = False
.Italic = True
End With
Selection.FormatConditions(i).StopIfTrue = True
Next iVan valami ötletetek? Előre is köszönöm a segítséget!
-
bteebi
veterán
válasz
Delila_1 #21880 üzenetére
Nagyon köszönöm a segítséged, működik!
Először amúgy valamiért nem akart menni, de aztán modulba raktam, és utána már lefutott. Kell neki a modul, vagy valami más gond lehetett először szerinted?
Az is fura amúgy, hogy ha a
Sheets(lap%).Select
Range("E10").Select
részt összevonom így: Sheets(lap%).Range("E10").Select, akkor megint csak nem megy ("Range osztály Select metódusa hibás"). Pedig szokott működni ez az összevonás... -
bteebi
veterán
válasz
PistiSan #21877 üzenetére
Kiindulásnak ez bőven jó, de ez se rossz. Ez pedig egy nagyon rövid összefoglaló. Ha komolyabban is érdekel, akkor ezt a könyvet érdemes lehet beszerezned. Amúgy rengeteg segédlet van a neten (elsősorban angolul persze), többek között a Youtube-on is, érdemes keresgélni.
Erre esetleg lenne valakinek ötlete? Közel vagyok a megoldáshoz, de sajnos nem tudom, hogy hol van a hiba.
-
bteebi
veterán
Sziasztok!
Adott a képen látható táblázat. Adott háttérszínű (mondjuk piros, de igazából lényegtelen) cellához tartozó sorok, oszlopok neveit szeretném összefűzni. Az 5. sorban (2 cellánként) számok vannak "00" formátummal, a 6. sorban pedig ehhez tartozó azonosítók, az A oszlopban pedig időpontok. Tehát ha mondjuk a "G9" cella piros hátterű lenne, akkor az összefűzött név úgy nézne ki, hogy 03-B-2.00h. Ezeket az összefűzött neveket egy külön lapra ("osszeir") szeretném kigyűjteni egymás alá. Több munkalapon is van ilyen táblázat. Az általam írt makró valamiért sajnos nem működik. Egyelőre itt tartok:
Sub osszeir()
Dim lap%, i As Integer, cella As Range, tartomany As Range
i = 1
For lap% = 1 To Worksheets.Count
Sheets(lap%).Activate
If Sheets(lap%).Name <> "osszeir" Then
Set tartomany = ActiveSheet.UsedRange
For Each cella In tartomany
If cella.Color.Interior = 255 Then
Sheets("osszeir").Cells(i, 1).Value = ActiveSheet.Cells(5, Int(cella.Column / 2) * 2) & "-" & ActiveSheet.Cells(6, cella.Column) & "-" & ActiveSheet.Cells(cella.Row, 1) & "h"
i = i + 1
End If
Next cella
End If
Next lap%
End SubMeg tudnátok mondani, hogy mi lehet a gond? Valószínűleg a cella.Column nem (se) tetszik neki, viszont nincs ötletem, hogy hogy lehetne máshogy megírni. Nagyon köszönöm a segítségeteket!
-
bteebi
veterán
válasz
Delila_1 #21498 üzenetére
(Most már) nálam is
. Elsőre lefut hiba nélkül, de ha utána újra lefuttatom, akkor előjön ez a hiba. Második futás után - nem tudom miért - azt csinálja, hogy már eleve szétbontja oszlopokra a szöveget. Ezek szerint nem csak minden indítás után végzi el a tagolást, ami számomra meglepő. Ráadásul a munkafüzetben bárhová másolom az adatokat, akkor is szétbontja oszlopokra. Valószínűleg emiatt van a hibaüzenet is, bár nem világos, hogy miért.
#21500: Köszönöm neked is! Ismertem amúgy ezt a funkciót, bár még talán csak egyszer-kétszer használtam korábban.
-
bteebi
veterán
Sziasztok!
Vágólapra helyezett, szóközökkel tagolt táblázatot szeretnék Excelbe importálni, és a végén az oszlopokat auto szélességűre állítani.
Sub TextToColumns()
ActiveSheet.Range("A1").Select
ActiveSheet.Paste
Range("A:A").SpecialCells(xlCellTypeConstants).TextToColumns _
Destination:=Range("A1"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Space:=True
ActiveSheet.UsedRange.Columns.AutoFit
End SubAz ActiveSheet.UsedRange.Columns.AutoFit sorig úgy működik, ahogy szeretném, utána viszont 400-as kódú hibaüzenettel leáll. Ha külön makróként lefuttatom ezt az egy sort, akkor működik. Mi lehet a baj?
-
bteebi
veterán
válasz
Salex1 #21457 üzenetére
Sub osszefuz()
Dim i As Integer, lastrow As Integer
lastrow = Range("B" & Rows.Count).End(xlUp).Row
Range("K1") = ""
For i = 1 To lastrow
If Cells(i, 13).Value = True Then
Range("K1") = Range("K1") & Cells(i, 2).Value & ", "
End If
Next i
Range("K1") = Left(Range("K1"), Len(Range("K1")) - 2)
End Sub -
bteebi
veterán
válasz
Petium001 #21322 üzenetére
Az ár helyett a kódra kell keresned. Az FKERES függvény szemléletesen azt csinálja, hogy egy adott értéket, jelen esetben a cikkszámot (A2 cella) megkeresi egy adott táblázatban (ami a te esetedben E2:F9), majd a táblázat x-edik oszlopát adja eredményül (neked a 2. oszlop eredménye kell), tehát:
=(FKERES(A2;E2:F9;2;HAMIS)-B2)/B2*100
A VKERES hasonlóan működik, csak az vízszintesen (sorokban) keres. -
bteebi
veterán
-
bteebi
veterán
Sziasztok!
Van egy nagyon sok lapból álló munkafüzetem. A munkalapok adott tartományaiba fixre szeretném beállítani a megjelenített tizedesjegyek számát, attól függően, hogy egy adott cella (B17) értéke milyen nagyságrendbe esik. Az első kérdésem: meg lehet ezt az alábbi makrónál egyszerűbben oldani? Nekem elsősorban az "And"-es összevonás nem tetszik, de azt valószínűleg nem lehet megkerülni.
Sub tizedesszam()
If 0.001 < Sheets("Adatok").Range("B17").Value And Sheets("Adatok").Range("B17").Value <= 0.01 Then
Selection.NumberFormat = "0.00000"
ElseIf 0.01 < Sheets("Adatok").Range("B17").Value And Sheets("Adatok").Range("B17").Value <= 0.1 Then
Selection.NumberFormat = "0.0000"
ElseIf 0.1 < Sheets("Adatok").Range("B17").Value And Sheets("Adatok").Range("B17").Value <= 1 Then
Selection.NumberFormat = "0.000"
ElseIf 1 < Sheets("Adatok").Range("B17").Value And Sheets("Adatok").Range("B17").Value <= 10 Then
Selection.NumberFormat = "0.00"
ElseIf 10 < Sheets("Adatok").Range("B17").Value And Sheets("Adatok").Range("B17").Value <= 100 Then
Selection.NumberFormat = "0.0"
End If
End SubAz a gond, hogy azok a tartományok, amelyekre a szűrést szeretném elvégezni, a munkalapok különböző részein vannak, ráadásul több tartományban. Van arra ötletetek, hogy hogy lehetne azt viszonylag egyszerűen megoldani, hogy csak a kívánt cellákban állítsam át a formátumot? Esetemben van (lehet) egy viszonylag egyszerű megoldás, mert ezek a cellák feltételes formázással kék színűre vannak állítva (kék színűek, amíg üresek, ha van bennük érték, akkor már nincs háttérszín) - szóval az elvileg működhetne, hogy az összes lapon végigfutva az adott színű cellák formátumát átállítsam.
Ezen kívül még egy gondom van: hogy tudnám azt elérni, hogy a tizedesjegyek száma ne változzon akkor se, ha máshonnan adatokat illesztek be? Ha irányított beillesztést használnék (akár makróval), az szerintem viszonylag kényelmetlen lenne, úgyhogy nagyon örülnék neki, ha nem lenne muszáj azt használni.
Előre is köszönöm a segítségeteket!
-
bteebi
veterán
Ahhoz a laphoz rendeld a makrót, amelyiken a legördülő lista van, a $A$1 helyére pedig a legördülő listát tartalmazó cellát írd.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$3" Then
Worksheets(Range("B3").Value).Activate
ActiveSheet.PrintOut
End If
End Sub -
bteebi
veterán
válasz
mulli86 #21240 üzenetére
Törölni kell az üres (y) értékekhez tartozó adatcellák (x) értékét. Vegyük úgy, hogy az A sorban vannak az x értékek, a B-ben pedig az y értékek. Ez a makró megoldja a gondot:
Sub diagram()
Dim sor As Long, usor As Long
usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = 1 To usor
If Range("B" & sor) = "" Then
Range("A" & sor) = ""
End If
Next sor
End SubAnnyi, hogy csak akkor működik, ha már ábrázoltad a diagramot, mivel ha az ábrázolás előtt futtatod le, akkor nem lesz egybefüggő az ábrázolandó tartomány, több tartományt pedig (tudtommal) nem tudsz egyben ábrázolni. Ha esetleg valamiért a jövőben még szükséged lenne az üres y értékekhez tartalmazó x értékekre, akkor (a fenti példánál maradva) érdemes az A oszlopot átmásolnod a B-be, elkészíteni a diagramot a B és a C oszloppal, majd a B oszlopon elvégezni a szűrést a makróval.
-
bteebi
veterán
válasz
pirit28 #21184 üzenetére
A munkaidőhöz hozzáadni? Nem csak külön a szünetet kellene megszámolni? Talán majd jönnek szebb, egyszerűbb megoldások, de ez működik:
Sub szunet()
Dim i As Integer, lastrow As Integer
lastrow = Range("B" & Rows.Count).End(xlUp).Row
For i = 2 To lastrow
Cells(i, 4).Value = Cells(i, 3) - Cells(i, 2)
If Cells(i, 2).Value < 8 / 24 And Cells(i, 3).Value > 8 / 24 Then
Cells(i, 4).Value = Cells(i, 4).Value + 30 / 1440
End If
If Cells(i, 2).Value < 10 / 24 And Cells(i, 3).Value > 10 / 24 Then
Cells(i, 4).Value = Cells(i, 4).Value + 10 / 1440
End If
If Cells(i, 2).Value < 12 / 24 And Cells(i, 3).Value > 12 / 24 Then
Cells(i, 4).Value = Cells(i, 4).Value + 10 / 1440
End If
If Cells(i, 2).Value < 14 / 24 And Cells(i, 3).Value > 14 / 24 Then
Cells(i, 4).Value = Cells(i, 4).Value + 10 / 1440
End If
If Cells(i, 2).Value < 16 / 24 And Cells(i, 3).Value > 16 / 24 Then
Cells(i, 4).Value = Cells(i, 4).Value + 10 / 1440
End If
If Cells(i, 2).Value < 18 / 24 And Cells(i, 3).Value > 18 / 24 Then
Cells(i, 4).Value = Cells(i, 4).Value + 30 / 1440
End If
Cells(i, 4).NumberFormat = "[h]:mm"
Next i
End SubA kódban a B és a C oszlopban (2. és 3. oszlop) a 2. sortól van a munkaidő kezdete és vége, és a D (4.) oszlopba írja ki a munkaidő+szünet összegét.
-
bteebi
veterán
válasz
Delila_1 #21100 üzenetére
Együtt lehet élni ezzel, csak ismerni kell
. Valószínűleg egyébként jobb, hogy így van (kisebb rá az esély, hogy véletlenül hibázzon az ember), de persze nem logikus.
Amúgy azért se lett gyanús, hogy ez egy cellaformátum miatti hiba lenne, mert láttam már hasonlót: képlet másolása után (akár "lehúzás", akár copy/paste) a másolt cellában a képletet szövegként jelenítette meg, pedig a forrás cellában még jól működött. Erre van esetleg ötleted? Bár még csak elvétve jött elő ez a hiba, de egyébként nagyon idegesítő tud lenni, és sehogy se jöttem rá, hogy hogy lehet következetesen megoldani. Előbb-utóbb megoldódott, de nem logikusan (pontosan már nem is emlékszem rá, hogy hogyan/mitől).
-
bteebi
veterán
válasz
Delila_1 #21098 üzenetére
Basszus, összességében már vagy 15 éve dolgozom Excellel, de ezt nem tudtam
(amúgy nem én állítottam arra, ezt más táblázatában készítettem). Szerintem egyébként a következetességében van egy kis anomália, legalábbis az én értelmezésemben. Ha már egyszer bevette a képleteket, akkor állíthatom bármire a formátumot (akár szövegre is), akkor is a képlet értékét fogja kijelezni, fordítva viszont nem.
Számomra úgy lenne logikus, hogyha visszaállítom szöveg formátumúra, akkor a cella tartalmát, és ne a képlet (hivatkozás) értékét jelezze ki. Azon persze lehet vitatkozni, hogy jobb lenne-e úgy; valószínűleg nem, de nekem logikusabb lenne. Már csak amiatt se gondoltam volna, hogy a cellaformátum miatt van ez a probléma, mert ez így egy aszimmetrikus reláció (cellaformátum - képlet), az meg nem jó
.
-
bteebi
veterán
válasz
Delila_1 #21076 üzenetére
Nagyon köszönöm!
Huhh, hát ez egy kicsit elegánsabb és egyszerűbb, mint az enyém
. Valamiért egyébként azt csinálja, hogy bár beírja az adott cellákba a képletet (tehát pl. =$G$11), de nem az ehhez tartozó érték jelenik meg, hanem a képletet írja ki. Ez vajon mitől lehet? Excel bug?
-
bteebi
veterán
Sziasztok!
Van egy 8×12-es tömböm a G11
18-as tartományban. Azt szeretném, ha ezen cellák tartalmát a D sorba (D2-től lefelé) egy makró "meghivatkozná" képletként - tehát a értéke D2 az lenne, hogy "=G11", a D3-é az, hogy "=H11", a D97-é pedig az, hogy "=R18" - tehát ha bármit megváltoztatnék a tömbben, akkor az automatikusan átíródna a D oszlopban. Ezt a makrót írtam rá:
Sub masolas()
Dim i As Integer, j As Integer
For i = 1 To 12
For j = 1 To 8
If Cells(j + 10, i + 6) <> "" Then
Cells(1 + (j - 1) * 12 + i, 4).Formula = Cells(j + 10, i + 6).Formula
Else: Cells(1 + (j - 1) * 12 + i, 4).Value = ""
End If
Next j
Next i
End SubAlapvetően működik is, de csak az adott cella értékét írja be, nem pedig képletként hivatkozik rá. Hogy kellene átírnom? Előre is köszönöm a segítségeteket!
-
bteebi
veterán
-
bteebi
veterán
Sziasztok!
Egy tartományban szeretném megszámolni azon cellákat az AH4:AH87 tartományban, amelyek értéke 10 alatti, illetve 10 és 20 közé esik. Az utóbbinál a darabteli függvényt csak kerülőúton tudtam úgy paraméterezni, hogy jó legyen: =COUNTIF(AH4:AH87,">=10")-COUNTIF(AH4:AH87,">=20").
Van erre jobb ötletetek? Vagy segédcellák (oszlopok) nélkül nem lehet elegánsabban megoldani? Igazából az ÉS (AND) függvényt kellene valahogy beágyazni, de azt sajnos nem tudtam megoldani.Előre is köszönöm a segítségeteket!
-
bteebi
veterán
válasz
z123456789 #20861 üzenetére
Ahogy gondolod
. Amúgy összességében egyszerűbb a megoldásod, én is azt használnám inkább. Nem gondoltam végig, hogy makró nélkül is meg lehet csinálni
.
-
bteebi
veterán
válasz
Psytróger #20857 üzenetére
Ha jól értettelek, akkor ez jó lesz:
Sub melleir()
Dim i As Integer, LastRow As Integer
LastRow = Columns(1).Find("*", SearchDirection:=xlPrevious).Row
For i = 1 To LastRow
If Cells(i, 1).Value = "" Then
i = i + 1
End If
If Cells(i, 1).Value = Cells(i, 2).Value Then
Cells(i, 4) = 1
Else: Cells(i, 4) = 2
End If
Next i
End SubMűködésre bírni az itt leírtak alapján tudod. Nem kell semmit se lemásolnod, az egész tartományra működik.
-
bteebi
veterán
válasz
Psytróger #20851 üzenetére
Erre ez működik:
Sub melleir()
Dim i As Long
For i = 1 To Rows.Count
If Cells(i, 1).Font.ColorIndex = 3 Then
Cells(i, 3).Value = Cells(i, 1).Value '"P"
End If
Next i
End SubEbben az esetben az A oszlopban lévő cella tartalmár írja a C oszlopba. Ha a "P" elől kitörlöd a Cells(i, 1).Value-t és az aposztrófot, akkor minden piros betűs cella mellé P betűt tesz.
-
bteebi
veterán
válasz
z123456789 #20849 üzenetére
Most akkor végülis működik? Amúgy meg azt csináld, hogy miután beírtad a kódot, a munkalapon Alt+F8-at nyomsz, és akkor ki tudod választani és el tudod indítani a makrót. De egyébként tudsz hozzá gyorsbillentyűt is rendelni (pl. Ctrl+r, vagy Ctrl+Shift+r), de akár egy gombot is csinálhatsz neki: egyszerűen rajzolsz egy téglalapot, jobb gomb → Szöveg szerkesztése (beírod mondjuk azt, hogy "Makró indítása"), majd szintén jobb gomb → Makró-hozzárendelés. Így már gombbal (is) tudod indítani, frissíteni
.
#20847: Idézőjel és WorksheetFunction nélkül működik?
#20851: Feltételhez kötötten, vagy csak simán? Makróval?
Új hozzászólás Aktív témák
Hirdetés
- Óvodások homokozója
- Motorola Edge 60 és Edge 60 Pro - és a vas?
- Xiaomi 15 - kicsi telefon nagy energiával
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- E-roller topik
- Miskolc és környéke adok-veszek-beszélgetek
- Mibe tegyem a megtakarításaimat?
- BestBuy ruhás topik
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- További aktív témák...
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Honor 400 Lite 256GB Kártyafüggetlen 1Év Garanciával
- ÁRGARANCIA! Épített KomPhone i5 14600KF 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- T Phone Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Dell Latitude 5590 - i5-8GEN I 8GB I 256SSD I 15,6" FHD I HDMI I CAM I W11 I Gari!
- Dell D6000 univerzális dokkoló USB-C/ USB-A, DisplayLink & Dell WD15 (K17A) USB-C + 130-180W töltő
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest