- Pánikbetegség, szorongás
- Luck Dragon: Asszociációs játék. :)
- Carlytoo: Pánikszindróma #3
- sziku69: Fűzzük össze a szavakat :)
- Ndruu: Segíts kereshetővé tenni a PH-s arcképeket!
- gban: Ingyen kellene, de tegnapra
- sziku69: Szólánc.
- sh4d0w: Netflix? Ugyan, VW előfizetés!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
-
LOGOUT
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
-
dellfanboy
őstag
gyors fkeres kérdésem lenne van 1 cella amire keresek másik táblából. a keresett celle így néz ki: szöveg xyyyxxy(TGDF)
a zárójelben lévő 4 jegyű karaktereket kellene megkeresnem egy másik táblában.
ctr-f el ha rákeresek csak a 4 jegyű karakterekre, simán megtalálom, de fkeres nem keresi.. mi lehet a probléma? esetleg egyéb ötletek. -
nimmy001
csendes tag
Sziasztok, nem tudom, excelben meg lehet-e oldani, vagy máshol kellene keresni.
Hálózatban használt gépekkel kapcsolatban egyetlen géppel van problémánk. Többen használjuk ugyanazt az excel fájlt ugyanonnan, makró van benne.
A gépekre Windows 7 van telepítve, 1 gépen Office 2010 (ha kell, itt kerül módosításra a makró, a háttéradatbázis, stb.), a többi gépen Office 2007. Az egyik gépen a makró nem fut, hibaüzenetet dobál vissza néhány hete (történt pár windows frissítés, a rendszervisszaállítás - arra az időpontra, amikor még működött, a makróban azóta változtatás nem történt - kidobta a gépet a tartományból, folyamatban van ez a megoldás, de hogy a makró rendesen fog-e menni utána, azt nem tudjuk), a többi gépen működik rendesen. Van olyan excel, makró megoldás, amivel "át lehetne verni" ezt az egy másképp működő gépet, vagy máshol lehet a hiba? Hardver és kor tekintetében nem egyformák, a 2010-es Office-t futtató gép a legújabb az összes közül.
Előre is köszönöm, bárki bármit tud tanácsolni, ami megoldás lehet. -
Geryson
addikt
Kis segítséget kérnék, mert megakadtam. Azt szeretném, hogy ha a cellában DARABOLASI KLT. vagy FUVARKOLTSEG van írva, akkor 0 legyen az eredmény, egyéb esetben induljon az FKERES képlet.
Ameddig csak egy kritériumot adtam meg, addig ment, tehát valamit a VAGY függvénnyel szúrok el...
=HA(B2=VAGY("DARABOLASI KLT.";"FUVARKOLTSEG");0;FKERES(F2;Forrás!$A$1:$I$546;9;HAMIS))
-
Pl. megkérdezem a gyerekeket, hogy egy é három között értékeljék, hogy mennyire szeretik a fagyit. 1 pontot ad rá 1 gyerek 2 pontot ad rá 3 gyerek és 3 pontot ad rá 10 gyerek. Tehát az első oszlop tartalmazza az adható ponstzámokat: 1,2,3, a másik pedig a válaszok megoszlását: 1, 3, 10. Ezek alapján szeretnék szórást számolni.
Amit nem szeretnék: ha kézzel bepötyögöm egymás után, jelen példa szerint pl. 1 2 2 2 3 3 3 3 3 3 3 3 3 3, akkor ezeket már kijelölhetném, és egy szórás vagy szórásp függvénnyel pillanatok alatt kiszámolom. Csakhogy több ezer válaszadó van, úgyhogy ezt nem szívesen teszem.
-
Sziasztok! Egy olyan dologra lenne szükségem, hogy van egy skálám 1-től 9-ig, és mellette szerepel, hogy a minta hány példányára igaz (mindegyik példányra csak egy szám jellemző). Szórást szeretnék számolni, de lehetőleg a nélkül, hogy ki kellene bontanom, hogy mondjuk volt 79 példány, akik 8 pontot ért el, és akkor leírom 79-szer, hogy 8. Gyanítom van rá megoldás, csak én vagyok tudatlan....
-
Delila_1
veterán
A törzsdokumentumba beviszel egy táblázatot, aminek a mezőiben lesznek az adataid.
Az első mezőbe beszúrod az adatmező(ke)t. Kapcsold be a "Körlevélmezők kiemelése" funkciót.
A második mező kitöltését azzal kezdd, hogy a Beszúrás | Szöveg | Kész modulok menüponttal beszúrod a Next mezőt. Ez a táblázatodban «Következő rekord» -ként jelenik meg. Ez alá beszúrod a többi adatmezőt. A táblázatodnak ezt a mezőjét már másolhatod. -
Kobe
veterán
válasz
Delila_1 #17884 üzenetére
Igen de sok vba ban megirt vlookupnal elojon ez a hiba, eleg sok eset van neten errol. Gyakorlatilag az excel valamiert ugy erzekeli h a megadott munkafuzet nincs megnyitva ezert mar ertekadasnal nem tud hivatkozni ra, viszont ez hulyeseg, ott virit mellette a masik munkafuzet
-
biker
nagyúr
válasz
Delila_1 #17883 üzenetére
az a baj, hogy ezekkel az ALAP körlevél, boríték kérdésekre kaptam csak korábban választ, ahol egy oldal/egy levél van
címkénél laponként 30-50-100 is lehet, és ott minden cimke mezőbe egyesével kellene a mezőket hozzáadjam, mert az elsőbe felviszem, miket írjon bele, és nem mutatja a másodikon
de majd akkor ctrl+C ctrl+V-vel végigmásolom ezen az egy lapon, és onnan már generálja a többit
-
biker
nagyúr
-
Kobe
veterán
válasz
Delila_1 #17879 üzenetére
Gyak ugyanazt csinaltam, mint amit te is mutattal a kodban, kicsit aktualizaltam a fileneveket de a valtozokhoz nem nyultam. Igazabol utananeztem neten es nagyon gyakran elojon ez a hiba vba s vlookupnal, csak epp mindig mas indokkal...igy eleg nehez sajna megoldast googlizni ra
-
Delila_1
veterán
válasz
MarKoo #17876 üzenetére
Arra az esetre írtam a makrót, mikor a 12 lapon az A oszlopban van a dátum, B-ben az adatok. A hónapok után szerepel az Összesítő nevű lap, annak az A1:A3 tartományába írja be a lapnevet, a dátumot, és a legnagyobb értéket.
Sub Legnagyobb()
Dim sor%, lap%, nagy!, lapnev$, kelt As Date
Dim WF As WorksheetFunction
Set WF = Application.WorksheetFunction
For lap% = 1 To 12
If WF.Max(Sheets(lap%).Range("B:B")) > nagy! Then
nagy! = WF.Max(Sheets(lap%).Range("B:B"))
sor% = WF.Match(nagy!, Sheets(lap%).Range("B:B"), 0)
kelt = Cells(sor%, "A")
lapnev$ = Sheets(lap%).Name
End If
Next
With Sheets("Összesítő")
.Range("A1") = lapnev$
.Range("A2") = kelt
.Range("A3") = nagy!
End With
End Sub -
Delila_1
veterán
válasz
elmouse #17874 üzenetére
Szívesen.
A változóknak igyekszem olyan neveket adni, ami utal a tartalmukra, ez biztosan segít a megértésben.
A változó végén lévő % jel azt jelenti, hogy -32768 és 32768 közötti egész számot fogadhat, a !-es végű törtet, jó nagy tartományban. A Long típusú változó is egész számokat fogad, szintén nagy tartományban. -
Delila_1
veterán
Be van kapcsolva az Excelben az Analysis ToolPak, és az Analysis ToolPak - VBA? Lehet, hogy ezeket hiányolja. Eszközök | Bővítménykezelő menüpontban kapcsolhatod be.
Mivel láttam, hogy xls a kiterjesztés, 2003-as verzióban írtam a makrót, a bővítmények bekapcsolása után működnie kell.
-
biker
nagyúr
van egy táblázatom, 1400 sor, 6 oszlop
szeretném cimkére kinyomtatni, egy cimke a sor 6 oszlopa megadott módonhow to?
egy órája küzdök, van office 2010 és libreoffice
cimkenyomtatás csak wordben/writerben van, de az adatforrás xls
-
MarKoo
addikt
Van egy táblázatom 12 munkalappal. (Januártól Decemberig). Adott néhány feladat, amiben meg kell határozni, hogy pl. az év melyik napján volt a legmelegebb, vagy esett a legtöbb csapadék? Hogyan tudnám ezt függvényekkel megcsinálni?
-
Kobe
veterán
válasz
Delila_1 #17867 üzenetére
köszi
igazából pont fordítva megy, de az nem gáz, csak meg kell cserélni hogy melyik excel filet adod meg a WS változóban.
Egész pontosan úgy megy, hogy van a temporary.xls nevű file (ez egy adatbázis letöltés, access hozza létre és először ezt nyitja meg), és van a test.xls. A temporary.xls-ből szeretnék adatokat másolni a test.xls-be, de a többi úgy megy, ahogy leírtad - a test.xls INT nevű lapján az AB oszlopban található azonosítót keresem a temporary.xls ben, és a test.xls/INT lap T oszlopára írom vissza az értéket.
Viszont a makró nem tudom miért, de ennél a sornál elakad (ez az amit már átírtam, hogy a másik filera hivatkozzon):
Set WS = Workbooks("temporary.xls").Worksheets("Report")
gondoltam hogy nem találja a filet, ezért próbáltam a teljes hivatkozást berakni a filehoz így:
Set WS = Workbooks("C:/Users/Desktop/database test/test.xls").Worksheets("Report")
de sajnos ez esetben sem működött. Az excel azt írja hogy Run-time error 9: Subscript out of range
-
Delila_1
veterán
Felvettem 2 változót. Az egyik a WS, ami Worksheet típusú, és a test.xls INT nevű lapját adtam meg értékének. A másik, WF, WorksheetFunction típusú. Ezt azért vettem fel, hogy a VLookup-ot tartalmazó sor könnyebben olvasható legyen.
Ha jól értettem, az indító füzet aktuális lapján az AB oszlopban lévő adatot keresed a test.xls INT lapjának A oszlopában, és a találat sorában az E oszlop tartalmát íratod az indító füzet T oszlopába.
Betettem a Vlookup sor elé egy hibaelhárítást arra az esetre, ha a keresett érték nem szerepelne a másik füzetben (On Error Resume Next).Sub Keres()
Dim sor As Long, usor As Long, WS As Worksheet, WF As WorksheetFunction
Set WS = Workbooks("test.xls").Worksheets("INT")
Set WF = Application.WorksheetFunction
usor = Range("AB" & Rows.Count).End(xlUp).Row
For sor = 2 To usor
If Cells(sor, "AB") > "" Then
On Error Resume Next
Cells(sor, "T") = WF.VLookup(Cells(sor, "AB"), WS.Range("A:P"), 5, 0)
End If
Next
End Sub -
Kobe
veterán
válasz
Delila_1 #17863 üzenetére
valszeg valamit elrontottam a ctrl c ctrl v nél
Cells(sor, "X") & "-" & Round(Cells(sor, "W"), 0)
erre van emgadva az érték, de így nem működik. Igazából az érdekelne, hogy a VLOOKUP os részt hogyan kellene átírni ahhoz, hogy ugyanúgy működjön, mint a korábbi concatenates subod, hogy csak azokra a sorokra leressen rá, ahol az eredeti concatenates sub is
-
Kobe
veterán
válasz
Delila_1 #17724 üzenetére
helló
arra esetleg van valamilyen tipped, hogy a későbbiekben hogy lehetne dinamikusan azokra a cellákra hivatkozni pl VLOOKUP függvényben, amiket ez a sub amit mutattál kitöltött ?
Kicsit részletesebben: van ugye egy változó sorú adattábla ahol az egyik oszlopban Hazai vagy Külföldi van írva. Ez a sub kitölt egy oszlopot a Hazai sorokra. Ezt a "Hazai" sorokra visszakapott értéket én egy azonosítónak szánom, és egy vlookup függvénnyel egy másik fileból az ehhez tartozó plusz információkat szeretném bemásolni vele.
Az egyetlen gondom az, mint ami az eredeti subnál is volt: csak azokba a sorokba szeretnék beíratni valamit ahol az X oszlopban "hazai" volt, tehát valahogy dinamikusan szeretnék hivatkozni a VLOOKUP függvényben az Y oszlop kitöltött soraira.
Próbáltam úgy, hogy definiálok egy változót, tovább folytatva a te Subodat. Alul a konkrét kód, a hivatkozások és oszlopok kicsit mások lehetnek benne, mert ez már a végleges változat ami fut.
ez gyakorlatilag ugyanaz, mint amit te írtál, és klasszul működik: ehhez akarom majd hozzáépíteni a Vlookupot
Dim lnglastrow as Long
Dim lnglastrow2 as Long
lnglastrow2=Range("L"&Rows.Coun).End(xlUp).Row
For lnglastrow=2 to lnglastrow2
If Cells(lnglastrow,"R")="Hazai" then Cells(lnglastrow,"AB")=Cells(lnglastrow,"O")&"-"&Round(Cells(lnglastrow,"L"),0)
Nexta Vlookupot próbáltam így hhozzáépíteni:
Dim IDNUMBER as Long
IDNUMBER= Cells(lnglastrow,"AB")=Cells(lnglastrow,"O")&"-"&Round(Cells(lnglastrow,"L"),0)
For lnglastrow=2 to lnglastrow2
If Cells(lnglastrow,"R")="Hazai" then Cells(lnglastrow,"T")= "=VLOOKUP(IDNUMBER,'C:/test/[test.xls]INT'!$A$1:$P$65536,5,FALSE)"
Nexta Vlookup rendben le is fut, azonban az eredménycellákba csak ?#NAME hibaüziket ír vissza, mert rosszul hivatkoztam az IDNUMBER változóra. Ha az IDNUMBER-t manuálisan kicserélem pl AB1-re, akkor már a jó értéket írja vissza az eredménycellába.
Tudnátok segíteni mit kellene updatelnem ?
-
Delila_1
veterán
válasz
elmouse #17852 üzenetére
Igaza Van Muttnak a hibakezelést illetően a 17853-as hozzászólásban. Pótoltam a hiányt.
Sub atlag_50()
Dim sor As Long, usor As Long, oszlop%, uoszlop%, atlag!
Dim WF As WorksheetFunction
Set WF = WorksheetFunction
uoszlop% = Cells(1, Columns.Count).End(xlToLeft).Column
For oszlop% = 1 To uoszlop%
usor = Cells(1, oszlop%).End(xlDown).Row
If usor - 49 > 2 Then
atlag! = WF.Average(Range(Cells(usor - 49, oszlop%), Cells(usor, oszlop%)))
Cells(usor + 2, oszlop%) = atlag!
Else
Cells(usor + 2, oszlop%) = "Kevesebb, mint 50 tétel"
End If
Cells(usor + 2, oszlop%).Font.ColorIndex = 3
Next
End Sub -
-
Kobe
veterán
válasz
Fire/SOUL/CD #17857 üzenetére
A belinkelt kod egy valos kod resze. Annyi a csavar a dologban hogy azt a codeot egy access adatbazis hozza letre az excel fileban. Mivel a kod ilyenfajta excel automatizmuson keresztul "szuletik", az excel fileban alapjaraton a Module1 VBA kodlapjara kerul beillesztesre, ahonnan perpillanat meg nem tud sikeresen lefutni mert az excel fileban tobb munkalap van, es a kodban nincs munkalap hivatkozas,igy az excel nem tudja eldonteni pontosan melyik munkalapon kene futtatni.
nem szeretnem az egesz kodot atirni, mert baromi sok sor es eleg macera minden hivatkozas ele meg egy munkalap hivatkozast is betenni. Szeretnem valahogy a Private sub utan determnalni, hogy a kod tovabbi resze csak es kizarolag az INT munkalap tartalmara fusson le. Az eredeti if feltetel igy kicsit pontatlan volt: nem azt szeretnem, hogy akkor fusson le ha van INT nevu munkalap a fileban, hanem azt, hogy a kod maga az INT nevu munkalapon fusson le
-
1. Ha az a korábbi kód egy valós kód volt(és nem csak valamit betettél példának), akkor az a kód minden esetben az épp aktív munkalapon dolgozik, ergo mindegy hány darab és nevű munkalap van a munkafüzetben, mindig azon végzi el a módosításokat/feladatát, ami épp ki van jelölve, azaz aktív.
2. Az is egyértelműen leírtad, hogy az INT nevű munkalap minden esetben biztosan létezikEbből kiindulva ennyi az egész ("if munkalap neve = INT, lefut a makró, else nem fut le" - olyan nincs, hogy else nem fut le)
Private Sub MyMacro()
Dim lngLastRow
If ActiveSheet.Name = "INT" Then
lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
Columns("X:X").Select
Selection.Insert Shift:=xlToRight
Range("X1").Select
ActiveCell.FormulaR1C1 = "common_id"
Range("X2").Select
.
.
.
.
End If
End Sub -
Kobe
veterán
válasz
Fire/SOUL/CD #17855 üzenetére
igen valami hasonlóra gondoltam, de ez nem definiálja, hogy a kód maradék része azon a munkalapon fusson le. Vagy igen ?
-
-
Kobe
veterán
na sziasztok
végre hosszas szenvedés után sikerült egy olyan keretet írni accessben az excel makrónak, ami képes egy modulet rendesen beszúrni, abba a kódot illeszteniés futtatni, valamint a végén a memóriát is kitakarítja utána.
Az egyetlen problémám az, hogy ezt a kódot ugye Module- ra illeszti be, viszont nekem a makrót mindig egy adott worksheeten kell futtatni - no problem, megfelelő hivatkozással a Sheet-re megoldható a moduleról is, de mivel a végleges makró maga elég hosszú lesz, nem szeretnék minden hivatkozást pl Activeworkbook.Worksheet("Sheet1").Range....bla bla bla formátumra átírni - nem túl elegáns, meg sajnos nem is működne, mert:
a munkalap neve mindig INT a fileban amin a makrót futtatni szeretném, viszont a visualbasices neve változhat: mivel a file manuálisan van összerakva, így a user lehet az adatokat a Sheet1-re, máskor a Sheet2-re rakja, viszont a Sheetet magát mindig INT-re nevezi át. Ezt a problémát orvosolandó, gondoltam már a Sub legelején definiálni kéne valahogy, hogy a további része csak az INT munkalapra fusson le
Pl egy if függvénnyel, if munkalap neve = INT, lefut a makró, else nem fut le
valaki tudna segíteni, hogy lehet ezt a feltételt pontosan megírni VBA ban ?
az alábbi kód elejére kellene beilleszteni
Private Sub MyMacro()
Dim lngLastRow
lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
Columns("X:X").Select
Selection.Insert Shift:=xlToRight
Range("X1").Select
ActiveCell.FormulaR1C1 = "common_id"
Range("X2").Select
.
.
.
.
End Sub -
Mutt
senior tag
válasz
elmouse #17845 üzenetére
Hi,
Makró nélküli változat (ha 50-él kevesebb érték van az oszlopban, akkor is műxik):
=ÁTLAG(ELTOLÁS(A$1;DARAB2(A:A)-1;0;-MIN(50;DARAB2(A:A))))Még több hibakezeléssel pedig ez megy:
=ÖSSZESÍT(1;6;ELTOLÁS(A$1;DARAB2(A:A)-1;0;-MIN(50;DARAB2(A:A))))Illetve m.zmrzlina függvénye is jó.
üdv.
-
Delila_1
veterán
válasz
elmouse #17845 üzenetére
Sub atlag_50()
Dim sor As Long, usor As Long, oszlop%, uoszlop%, atlag!
Dim WF As WorksheetFunction
Set WF = WorksheetFunction
uoszlop% = Cells(1, Columns.Count).End(xlToLeft).Column
For oszlop% = 1 To uoszlop%
usor = Cells(1, oszlop%).End(xlDown).Row
atlag! = WF.Average(Range(Cells(usor - 49, oszlop%), Cells(usor, oszlop%)))
Cells(usor + 2, oszlop%) = atlag!
Cells(usor + 2, oszlop%).Font.ColorIndex = 3
Next
End SubMost a különböző hosszúságú oszlopoknál az utolsó érték alá 2 cellával írja be az átlagot piros színnel.
Ha van egy fix sorod, ahol már biztosan nincs adat, akkor a Next előtti 2 sorban az usor+2 helyett ezt a sorszámot add meg, akkor az átlagok azonos sorban jelennek meg. -
whatnot
őstag
Nem próbáltam ki, de gyanúm szerint a következő miatt nem fog menni.
Van nekem ugye egy Ttime nevű, Date típusú változóm.
A 04/06/2013 09:00:00 stringet beledobom ebbe a változóba, szépen meg is eszi. Amikor lépésről lépésre nézem a kódot, a Locals Window-ban lehet nézni a változók aktuális értékeit. A fenti string pedig 2013.04.06 09:00:00 formátumban kerül be egyből a Ttime változóba, tehát a hiba már meg is történt. Azaz eleve rosszul értelmezi a napot, hónapot.Persze elvileg meg lehet csinálni regular expression-nel, de valami elegánsabb, kevésbé bonyolult megoldást keresek. No meg nem is csináltam még regex-et excelben.
-
lapa
veterán
ja, megtaláltam. CDO bigyóval outlook nélkül lehet spammelni.
ehhez annyit, hogy ezzel amúgy teljesen automatizált szerveroldali riportolást lehet csinálni, pölö:
-van egy szervered (mondjuk terminálszerver) excellel
-csinálsz egy excelt auto_open makróval
-tötöjkéz a makró, elmenti magát a kész fájl valami néven
-cdo makró elküldi a tündéreknek a riportot
-file bezárja excelt application.quit-tel
-beállítod a szerveren ütemezett feladatnak, hogy egy (megfelelő jogokkal rendelkező) júzer nevével minden nap elindítsa a fájlttada. csak gondoltam hasznos lehet.
-
elmouse
aktív tag
válasz
Delila_1 #17658 üzenetére
Szia!
Az általad írt makróról lenne kérdésem.
A feladat most is hasonló, tehát egy adott oszlop utolsó 50 tagjának kellene kiszámolni az átlagát, de ciklusban. Vagyis először az A oszlop utolsó 50 tagjának az átlagát,aztán a B oszlopét is így tovább, míg van adatokat tartalmazó oszlop.
A kérdés persze nem csak neked szól. Bárki segítségét elfogadom.
Előre is köszönöm! -
lapa
veterán
válasz
whatnot #17843 üzenetére
én inkább biztosra szoktam menni és összetákolom dateparttal. mittomén ilyesmi:
datenow = DatePart("yyyy", Date) & Right("0" & DatePart("m", Date), 2) & Right("0" & DatePart("d", Date), 2) & Right("0" & DatePart("h", Time), 2) & Right("0" & DatePart("n", Time), 2)
elég favágás, de ha meló van inkább befavágom ezt 5 mp alatt.
más: volt régen egy olyan makró, amivel úgy tudtam emailezni a táblát, hogy nem jött a görcsi outlook figyelmeztető üzenet. megvan ez valakinek, vagy kezdjek turkálni? köszi.
(ja, amúgy a gombicsek-csinálást nem felejti el a Citrix, szóval minden szuper.)
-
whatnot
őstag
Sziasztok!
Makróban van dátum/időpont formázási problémám.
Adott formátumban, stringként van megadva az időpont:nn/hh/éééé óó:pp:mm
Ezt kéne alábbi formátumba rakni:
éééé.hh.nn óó:pp
Tehát pl. 25/04/2013 09:00:00 -> 2013.04.25 09:00
A fenti példát az alábbi kódom egyszerűen meg is oldja:
For i = 2 To LastRow
If Cells(i, 9).NumberFormat <> "yyyy.mm.dd hh:mm" Then
Ttime = Cells(i, 9).Value
Cells(i, 9).Value = Format(Ttime, "yyyy.mm.dd hh:mm")
End If
NextA probléma ott kezdődik, amikor a dátumban a hónap és a nap látszólag érvényesen felcserélhető lenne. Pl. ebben az esetben:
04/06/2013
Ebből ugyanis ez lesz: 2013.04.06, a 2013.06.04 helyett.Sajnos az nem segít, hogy én előre letisztázom neki, az adott cellákban a formátum nn/hh/éééé óó:pp:mm és ebből legyen szíves átalakítani.
Ötlet?
-
Caipi
tag
-
Delila_1
veterán
válasz
m.zmrzlina #17834 üzenetére
Aktuális terület 1 cellából nézve az, amit 4 irányból határol 1-1 üres oszlop, ill. üres sor.
A területen belül állva Ctrl+a, vagy Ctrl+t jelöli ki. Próbáld ki foghíjas területekkel. -
Caipi
tag
válasz
m.zmrzlina #17838 üzenetére
:-D
Hálistennek a hibázási lehetőségek száma nem sok, főleg ha a függvényes cellák zároltak.
Azt már látom, hogy csak simán nem megy az A1<>D1, mivel az első táblázatba fgv-el jönnek az adatok.
Darab(A1)<>darab(D1) szintaktika a működő az esetemben. -
Caipi
tag
válasz
m.zmrzlina #17833 üzenetére
Köszönöm,
Már csinálom a függvényt, a többi része rendben lesz, bár jó hosszú lesz
Még ki kell tesztelnem, hogy minden hibára jelezzen, amit el lehet követni -
m.zmrzlina
senior tag
Amíg meg nem kapod a rendes megoldást addig használd ezt a förmedvényt:
=HA(A1<>ELTOLÁS(A1;0;7);"Ez a sor hibás!";HA(B1<>ELTOLÁS(B1;0;7);"Ez a sor hibás!";HA(C1<>ELTOLÁS(C1;0;7);"Ez a sor hibás!";HA(D1<>ELTOLÁS(D1;0;7);"Ez a sor hibás!";HA(E1<>ELTOLÁS(E1;0;7);"Ez a sor hibás!";"")))))
Értelemszerűen ez az F1 cella képlete.
Biztos vagyok benne, hogy létezik egy szebb fv erre a problémára. -
Caipi
tag
válasz
m.zmrzlina #17830 üzenetére
Köszönöm szépen,
A makrókat igyekszem kerülni, mivel a cégnél alapból le van tiltva a makró az excelekben és elég nehézkes elmagyarázni az emberkéknek, hogy mit is tegyenek, ha dolgozni akarnak ebbe a fájlbaEzért igyekszem mindent függvénnyel megoldani
-
Delila_1
veterán
válasz
m.zmrzlina #17830 üzenetére
A saját kijelölés kiküszöbölésére a for each fölött a
Range("A1").Select
Selection.CurrentRegion.Selectkijelöli a szükséges területet.
-
m.zmrzlina
senior tag
Szerintem egy ötletnek ez jó lesz.
Sub ellenoriz()
Range("F:F").EntireColumn.ClearContents
For Each cella In Selection.Cells
If cella.Value <> cella.Offset(0, 7).Value Then
Cells(cella.Row, 6).Value = "Ez a sor hibás!"
End If
Next
End SubMielőtt futtatod ki kell jelölni a függvények által képzett (az "A" oszlopban kezdődő) tartományt.
-
Delila_1
veterán
válasz
alfa20 #17828 üzenetére
Az én makrómban 1× szerepelt a Dim sorban az usor%, amit Te végül nem dimenzionáltál.
Az utolsó sor (usor) értékét a
usor = Range("U" & Rows.Count).End(xlUp).Row
sor szerint a lap U oszlopából veszed az A helyett. Ha az U oszlopban nincs adat, vagy nem annyi van, mint az A-ban, hibásan működik a makró. -
alfa20
senior tag
válasz
Delila_1 #17818 üzenetére
Szia Delila_1,
Kipróbáltam reggel, át ültettem a táblába, előbb volt egy hiba üzenet a "Dim sor%, usor%, szoveg$" ", usor%"-nál:
"Compire error:
Duplicate declaration in current scope
mivel van már 'usor' a táblába így a 'Dim' sorbol kivettem a többi 'usor%'-ot át írtam 'usor'-ra, így már végigfut, de csak egy üres ablak jelenik meg. próbáltam, hogy rögzítem a képletet hogy csak szöveg legyen a cellában, de akkor is csak üres ablakot dob fel.
Azt is megpróbáltam, hogy másik makróba tettem csak ezt a részt és egy 'CTRL+K'-val futtattam, de ez sem segített.
most így néz ki:
Dim sor%, szoveg$
Dim OK%, AH%
usor = Range("U" & Rows.Count).End(xlUp).Row
For sor% = 2 To usor
If InStr(Cells(sor%, 1), "OK") Then OK% = OK% + 1
If InStr(Cells(sor%, 1), "ADAT HIBA!") Then AH% = AH% + 1
Next
If OK% > 0 And AH% > 0 Then szoveg$ = "Adathibák száma: " & AH% & " db."
If OK% > 0 And AH% = 0 Then szoveg$ = "Nincsenek hibák."
MsgBox szoveg$viszont ami érdekes, ha egy üres munkafüzetbe teszem bele csak ezt a részt, akkor szépen működik, akkor meg szépen teszi a dolgát.
lenne ötleted?
-
Caipi
tag
Szia,
Köszönöm szépen, a függvényre volt szükségem :-)
Megint nem láttam a fától az erdőt, nem jutott eszembe ez az egyszerű megoldás.A bal oldali táblázatba kézzel bevitt összegek kerülnek. A feladvány az, hogy a kézi beírás ugyanabba az oszlopba/oszlopokba kell történnie, mint a függvénnyel átemelt értékeket tartalmazó jobb oldali táblázatban.
Ezen felül még a táblázat sorainak végösszegei meg kell egyezzenek egy harmadik helyen bevitt adatokkal.
De ennek segítségével már megy is az egész :-)
Még1x köszönöm :-) -
Mutt
senior tag
válasz
koxkids #17813 üzenetére
Hello,
Ő ugye bármilyen változásra lefut, hogy lehetne, hogy csak akkor fusson le, ha lent átváltok a Munka2-re?
Ahogy írod is a Workbook_SheetChange esemény minden alkalommal lefut, amikor bármelyik lapon változás történik.Neked a Munka2-es lap Activate eseményére kell tenned a kódot.
Private Sub Worksheet_Activate()
<kódod>
End Sub
üdv.
-
Mutt
senior tag
Hello,
Szeretném valahogy levizsgálni, hogy a kézi rögzítés a bal oldali táblázatnak megfelelő oszlopba/oszlopokba történik-e.
Hogyan kerülnek be az adatok a bal oldaliba? Mindegyik cella ki lesz ott töltve?
Egyszerre több sor is kerülhet be a bal oldaliba?Ha realtime (vagyis ahogy a balba egy cella bekerül) szeretnéd ellenőrízni, akkor a makróval ezt tudod kezelni, pl:
Private Sub Worksheet_Change(ByVal Target As Range)
'ha az első 5 oszlopban változik adat (kivétel az első sor)
'akkor a cella kitöltése után jobbra ugrunk 7-et
If Target.Row > 1 And Target.Column <= 5 Then
Cells(Target.Row, Target.Column).Offset(, 7).Activate
End If
End SubHa utána akarod összehasonlítani a bal és jobb táblázatot, akkor pedig egy sima = vagy <> összehasonlítással tudod megtenni. Pl.
=(A2<>H2)+(B2<>I2)+(C2<>J2)+(D2<>K2)+(E2<>L2)
Ha ez a függvényt 0-t ad, akkor a sorban azonos a két táblázat, különben pedig annyi helyen van eltérés.
üdv.
-
Mutt
senior tag
válasz
Bocimaster #17803 üzenetére
Hello,
Ha tényleg 35GB-os a text fájl akkor szerintem Excel-t felejtsd el, vagy előbb PowerPivot kiegészítőd rakd fel. Ezt inkább adatbáziskezelővel kellene feldolgozni.
A lenti makró megcsinálja azt amit kérsz, egy 70MB-os 400.000 soros text fájlon nekem kb. 5 perc kellett neki. Egy 35 GB-oson 41 óra lenne a beolvasás, szóval mielőtt ráereszted egy kisebb szeleten is próbáld ki.
Saját felelősségre itt a kód.
Sub ImportTxtFile()
Dim myFileName As String
Dim myLine As String
Dim FileNum As Long
Dim sor As Long
Dim splitLine
Dim i As Long
Const chrDelimiter = vbTab
'fájl hozzárendelése
myFileName = "C:\test.txt"
FileNum = FreeFile
Close FileNum
Open myFileName For Input As FileNum
'képernyő frissítés kikapcsolása
Application.ScreenUpdating = False
sor = 1
'fájl beolvasás kezdete
Do While Not EOF(FileNum)
Line Input #FileNum, myLine
'sorok felszabdalása
splitLine = Split(myLine, chrDelimiter)
'sorok cellákba mentése
If UBound(splitLine) > 0 Then
For i = 1 To UBound(splitLine)
ActiveSheet.Cells(sor, i) = splitLine(i - 1)
Next i
End If
sor = sor + 1
'új munkalap nyitása - ha már nincs több sor
If sor > Rows.Count Then
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Activate
sor = 1
End If
Loop
Application.ScreenUpdating = True
End Subüdv.
-
Mutt
senior tag
válasz
koxkids #17797 üzenetére
Hello,
Tehát amint írok be az első munkalapon új céget, a 2. munkalapon amint bekerül a sorok közé az új adat, automatikusan csökkenő sorrendben jelenjen meg.
Ha érdekel, akkor makró nélkül is meg lehet oldalni a NAGY (LARGE) függvény és vmilyen kereső függvény (FKERES, ELTOLÁS stb.) eltolásával is meg lehet oldalni.
Felraktam ide egy egyszerű példát, az első táblázatba felvitt értékeket a másodikban csökkenő sorrendben jeleníti meg.
üdv.
-
Caipi
tag
-
Delila_1
veterán
válasz
alfa20 #17815 üzenetére
Talán így megfelel.
Sub Valami()
Dim sor%, usor%, szoveg$
Dim alma%, korte%
usor% = Range("A" & Rows.Count).End(xlUp).Row
For sor% = 2 To usor%
If InStr(Cells(sor%, 1), "alma") Then alma% = alma% + 1
If InStr(Cells(sor%, 1), "körte") Then korte% = korte% + 1
Next
If alma% > 0 And korte% > 0 Then szoveg$ = "Van " & alma% & " db almád és " _
& korte% & " db körtéd."
If alma% > 0 And korte% = 0 Then szoveg$ = "Van " & korte% & " db körtéd."
If alma% = 0 And korte% = 0 Then szoveg$ = "Nincs semmid."
MsgBox szoveg$
End Sub -
alfa20
senior tag
válasz
Delila_1 #17816 üzenetére
Bocsi,
szóval azt szeretném, hogy adott egy oszlop (legyen "A") amiben vannak állítások (több száz sor):
- ideális esetben csak "OK" szerepel, ekkor írja ki: "minden ok"
- az oszlopban szerepel az "OK" és a "STÁTUSZ HIBA!", ekkor írja ki: "Státusz hiba, javítsa!"
- az oszlopban szerepel az "OK" és az "ADAT HIBA!", ekkor írja ki: "Adat hiba, javítsa!"
- az oszlopban szerepel az "OK", a "STÁTUSZ HIBA!" és az "ADAT HIBA!", ekkor írja ki: "Státusz és adat hiba, javítsa!"a lényeg hogy csak egy ablak ugorjon fel.
remélem sikerült leírnom amit szeretnék...
-
alfa20
senior tag
szerintem:
'A' oszlopban vannak az állítások tetszőlegesen (pl: egy, kettő, három, négy)
'B' oszlopba megadod az állításokat:
B2: egy
B3: kettő
B4: három
B5: négy'C' oszlopba:
C2: =DARABTELI(A:A;"egy")
C3: =DARABTELI(A:A;"kettő")
C4: =DARABTELI(A:A;"három")
C5: =DARABTELI(A:A;"négy")'D' oszlop %-ot számol ennek megfelelően legyen % a cella formátum:
D2: =C2*(1/SZUM(C$2:C$5))
D3: =C2*(1/SZUM(C$2:C$5))
D4: =C2*(1/SZUM(C$2:C$5))
D5: =C2*(1/SZUM(C$2:C$5))Aztán márt csak a diagram van hárta
-
válasz
koxkids #17797 üzenetére
Mégis lenne egy kérdésem
Itt a sorbarendező kód:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveWorkbook.Worksheets("Munka2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Munka2").Sort.SortFields.Add Key:=Range("H1"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Munka2").Sort
.SetRange Range("B1:H322")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubŐ ugye bármilyen változásra lefut, hogy lehetne, hogy csak akkor fusson le, ha lent átváltok a Munka2-re?
Mert ha az Munka1-en írom be az adatok, zavaróan felvillan. Mintha átlátszana a Munka1-es lap, az adatok nekem ugyis csak akkor kellenek, ha megnézem a Munka2-t.Köszi
-
Delila_1
veterán
válasz
alfa20 #17811 üzenetére
Itt legalább látszik a makróban a tagolás.
A ciklust a 2. sortól indítottam, feltételezve, hogy van címsorod.Sub Valami()
Dim sor%, usor%, szoveg$, f As Boolean
usor% = Range("A" & Rows.Count).End(xlUp).Row
For sor% = 2 To usor%
If InStr(Cells(sor%, 1), "alma") And _
InStr(Cells(sor%, 1), "körte") Then
szoveg$ = "Van almád és körtéd"
f = True: GoTo Kiiras
End If
If InStr(Cells(sor%, 1), "alma") Then
szoveg$ = "Van almád"
f = True: GoTo Kiiras
End If
If InStr(Cells(sor%, 1), "körte") Then
szoveg$ = "Van körtéd"
f = True: GoTo Kiiras
End If
Kiiras:
If f Then
MsgBox szoveg$
Else
MsgBox "Semmid sincs"
End If
szoveg$ = "": f = False
Next
End Sub -
alfa20
senior tag
Delila_1
Köszönöm a másik fórumon a válaszod, mivel látom itt aktívabb vagy inkább itt kérdeznék:és ha én egy egész oszlopban szeretnék kerestetni?
igazából négy állításra kellene az üzenet.pl:
ha 'A' oszlop tartalmazza az 'alma' szót, akkor írja ki: 'van almád'
ha 'A' oszlop tartalmazza az 'körte' szót, akkor írja ki: 'van körtéd'
ha 'A' oszlop tartalmazza az 'alma' és a 'körte' szót, akkor írja ki: 'van almád és körtéd'
ha 'A' oszlop egyiket sem tartalmazza, akkor meg azt írja: 'semmid sincs'előzmények:
kérdés:
Makróba 'HA' függvénybe belehet ágyazni az 'MsgBox'-ot?
Azt szeretném, ha lefut a makró összerakja nekem a táblát, és ha 'X'
sorban talál egy bizonyos szöveget, akkor fel dobjon egy üzenet ablakot, amit csak le kell 'OK'-ézni, ha viszont nem találja akkor egy másik üzenet jelenjen meg.válaszod:
Sub Kerdesek()
If Range("A5") = "Egyik szöveg" Then
MsgBox "Tudomásul vettem."
Else
MsgBox "Nem találom. :("
End If
End SubHa egy ciklusban keresel, kicsit másképp alakul.
-
Vicoo
senior tag
Üdv!
Excel guruk segítsetek ! Hogyan tudok egy oszlopból tortadiagramot készíteni, ha négyféle szöveges adat fordul elő , de van hogy egy cellában többféle is, de maximum négy? Szóval azt szeretném, hogy mind a négy szöveg számát tudjam, hogy hányszor fordul elő az oszlopban, és utána az előfordulásuk alapján százalékos megoszlást írni róluk amit torta diagramba teszek. -
Delila_1
veterán
válasz
Agostino #17807 üzenetére
A DARABTELI függvény ad majd számokat.
Ha az adataid az A oszlopban vannak, akkor az új oszlop 2. sora (címsort feltételezve) legyen =DARABTELI(A$2:A2;A2). Figyelj a $ jelre!
Ezt a függvényt lemásolod a többi sorba. Minden sorba azt írja be, hányadik alkalommal fordul elő az adat az oszlopban.
Ahol 1 az érték, az a sor marad, a többit törölheted. -
Delila_1
veterán
-
Agostino
addikt
üdv
adott egy hatalmas excel file, amiben kb 65 000 sornyi adat található, sok adattal és szemre látom, hogy kb a 2/3 ismétlődik. hogyan lehetne ezeket kiszűrni a legegyszerűbben? feltételes formázás - cellakijelölés szabályok - ismétlődő értékek nem vezetett eredményre, teljesen leterheli a gépet és lefagy az egész. igazából az adatok ismétlődések eltávolítása lenne az igazi, az viszont csak az adott oszlopból teszi és nem töröli ki a sort, amelyben az ismétlődés található, csak az oszlop értékeit tolja felfelé, de ezzel az egész használhatatlan lesz. ha azt mondom tegye mindent bővített kijelöléssel, akkor meg semmit sem talál. hogyan lehetne a második módszer aszerint ötvözni, hogy megtalál minden duplikációt az adott oszlopon belül, majd a duplikációval érintett sort is törli - ezáltal nem csúsztatva el mindent?
-
Kobe
veterán
hat ez valami kibaxott nagy access issue lesz, vagy nem tudom
Kiprobaltam mindent amit leirtal, vegigbogarasztam a teljes CPearson fele VBA programming szekciot, gyakorlatilag mindenhol ugyanezt a emgoldast hasznaljak, amit te is mutattal, nalam ez is errorra fut. Minden valtozo definialva van rendesen, ennel a linenal viszont errorra fut :
Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)
mondvan a vbext_ct_StdModule nincs definialva mint valtozo, ami tok erdekes mivel ugye ez standard VBA komponens es kulon definialas nelkul is mennie kene...
-
Bocimaster
csendes tag
Sziasztok!
Erre lehetne megoldás? (macroval)
- egy txt fájlba kaptam adatbázis adatot - tudom töltöttem is már be kisebbet nagyobbat.
DE egy egy 35 gigás .......- office 2013 használok, 1 millió sor azt még lekezeli.
Kérés: létezik olyan macro amely meghívja a txt fájt és 1 millió sorként új lapfület vagy új fájt nyithatna ...
előre is köszi, a válaszokat
-
m.zmrzlina
senior tag
A probléma:
Adott egy tartomány (2 oszlop, a másodikban színes hátterű cellák). A tartomány leszűrve a 2. oszlop színes celláira.
Ezt a leszűrt tartományt (csak a leszűrt értékeket) akarom másolni.
Ennek az eredménye egyik gépen rendben van (csak a kívánt sorokat másolja) a másikon az egész tartományt, hiába csak a szűrt sorokat látom.Ha a cellatartalomra szűrök akkor mindkét gépen rendben van a szűrt tartomány kijelölése és másolása.
Nyilván valami excel beállítás az oka de vajon mi?
-
alfa20
senior tag
megint én:
most olyat szeretnék, hogy kész a táblám nagyon szépen működik de még olyat szeretnék, hogy ha egy adott sorban talál egy szöveget, akkor egy 'MsgBox'-ot dobjon fel, ha meg másik szöveg akkor egy másikat, és egy harmadik félét, ha egyik szöveg sem szerepel az oszlopban:amit kipróbáltam az nem működik, nem tetszik neki, gondolom nem ennyire egyszerű
Range("AB1").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(COUNTIF(C[-7],""STÁTUSZ HIBA!""),COUNTIF(C[-7],""ADAT HIBA!"")), msgbox(Ellenőrizd a Státuszokat és az adatokat!),IF(AND(COUNTIF(C[-7],""STÁTUSZ HIBA!""),COUNTIF(C[-7],""OK"")),msgbox(Ellenőrizd a státuszokat!),IF(AND(COUNTIF(C[-7],""OK""),COUNTIF(C[-7],""ADAT HIBA!"")),msgbox(Ellenőrizd az adatokat!),IF(AND(COUNTIF(C[-7],""STÁTUSZ HIBA!"")=0,COUNTIF(C[-7],""ADAT HIBA!"")=0),msgbox(GRATULÁLOK! ma jó napod van!),4))))"
Új hozzászólás Aktív témák
Hirdetés
- Huawei 4G CPE Pro3 4G Router
- Telefon felvásárlás!! Xiaomi Redmi Note 10, Xiaomi Redmi Note 10s, Xiaomi Redmi Note 10 Pro
- GYÖNYÖRŰ iPhone 13 Pro 256GB Graphite -1 ÉV GARANCIA - Kártyafüggetlen, MS3074, 100% Akkumulátor
- Felsőkategóriás Gamer PC-Számítógép! Csere-Beszámítás! I9 13900K / RTX 4080 / 32GB / 1TB SSD
- BESZÁMÍTÁS! MSI Z390 i7 8700 32GB DDR4 512GB SSD RTX 2060 Super 8GB Zalman S3 TG Corsair 600W
Állásajánlatok
Cég: FOTC
Város: Budapest