- Mobil flották
- Apple Watch Sport - ez is csak egy okosóra
- iPhone topik
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Megjelent a Poco F7, eurós ára is van már
- Milyen okostelefont vegyek?
- Xiaomi 15 - kicsi telefon nagy energiával
- Redmi Watch 5 - formás, de egyszerű
- Magisk
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
-
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
-
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. -
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.
-
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?
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #17688 üzenetére
Ilyesmi vizsgálatra gondoltam:
Sub vanemar()
Dim ws As Worksheet
Dim bolVanemar As Boolean
bolVanemar = False
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = "munkalapodneve" Then bolVanemar = True
Next
If bolVanemar = True Then
Exit Sub
Else
'ide jön a makró aminek le kell futni
End If
End Sub -
m.zmrzlina
senior tag
Az a kérdés, hogy az alábbi kódrészletben, hogyan lehet a rngForras változónak értéket adni (és persze utána használni is a változót) úgy, hogy nem nyitom meg a tartományt tartalmazó mappát.
Sub reftest2()
Dim rngForras As Range
Dim rngMunka As Range
Workbooks.Open ("C:\Users\gipszjakab\próbafájlok\test\forrásadatok.xlsx")
Set rngForras = ActiveWorkbook.Worksheets("adatok").Range("A:B")
Set rngMunka = ThisWorkbook.Worksheets("Munka1").Range("B1:B14")
For Each cella In rngMunka.Cells
cella.Value = Application.WorksheetFunction.VLookup(cella.Offset(0, -1), rngForras, 2, 0)
Next
End Sub -
m.zmrzlina
senior tag
Köszi a választ.
Ezt a tulajdonságot ismerem csak azt reméltem, hogy lehet a függvények relatív cellahivatkozásához hasonlóan elérési útra is hivatkozni úgy hogy nem "betonozod" bele a makróba a teljes elérési utat.Az lesz a megoldás, hogy a <ThisWorkbook.Path> legutolsó "\" utáni karaktereit kicserélem a forrásfájl nevére mivel a forrásfájl mindig eggyel makrót tartalmazó mappa feletti mappában van.(a képen ez a test mappa) és a két fájl relatív helyzete mindig ugyanaz.
-
m.zmrzlina
senior tag
Van egy a fentihez hasonló fájlszerkezet. Az 1, 2, 3, mappákban .xlsm fájlok amelyekben a makrók a forrásadatok.xlsx-ből dolgoznak.
Hogyan hivatkozzak a forrásadatok.xlsx-re a makróban, hogy a test mappa szabadon áthelyezhető legyen de a makrók hivatkozásai továbbra is működjenek.
Ide sem merem írni milyen megoldásokkal próbálkoztam eddig.
-
m.zmrzlina
senior tag
válasz
Delila_1 #17593 üzenetére
Ez a módszer miért nem működik ha nem használsz objektumváltozót?
Én ugyanis kipróbáltam úgy hogy:
For Each cella in Selection.Cells
cella.Value=cella.Value * 1
Nextde ez még az általam Szöveggé formázott számokon sem működött.
Úgy működött csak, ha nem helyben akartam szorozni, hanem odébbtettem egy másik cellába a végeredményt.
-
m.zmrzlina
senior tag
Vagy próbáld így:
Sub formaz()
Range("D2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
For Each cella In Selection.Cells
cella.NumberFormat = "0.00"
Next
End SubTermészetesen a szám formátumát állítsd az általad kívántra!
-
m.zmrzlina
senior tag
válasz
Dr. Student #17556 üzenetére
Csak az elv.
=HA(DARABTELI(A:T;V1)>=1;"X";"")
Az A:T tartományban van az az adat amiben keresel, a V oszlopban egymás alatt a tételek amit keresel.
A képletek a W oszlopban vannak és minden V-ben szereplő tétel után tesz egy "X"-et ha az legalább egyszer szerepel az A:T tartományban. -
m.zmrzlina
senior tag
Köszönöm ezt a valóban kimerítő parádés választ.
Igaz a végleges megoldásba a makrós megoldás jobban illeszkedett mivel az egész megoldás makróra épült. Egy szedett-vedett munkafüzetből kellett kimazsolázni a fontos adatokat és (nyilván a nem kellő átgondoltság miatt) az adatok ide-oda rakosgatásával menet közben elfelejtett a dátum dátumként viselkedni.
Ráadásul ez a hiányzó dátum ellenőrzés már csak bónusz volt a feladatban de Delila konvertálós megoldása egyetlen makrósorban megoldotta a problémát.
Köszi még egyszer!
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #17537 üzenetére
Hát persze hogy elírtam.
Egy zárójel elfelejtődött bezáródni.
=HA(HIBÁS(FKERES(I20;J20:K23;2;1));"";FKERES(I20;J20:K23;2;1))
-
m.zmrzlina
senior tag
válasz
Melorin #17536 üzenetére
Mert Delila válaszában az FKERES() utolsó argumentuma 1 ami azt jelenti, hogy a függvény ha nem találja a keresett értéket akkor beéri az ahhoz legközelebbi értékkel. Ha ezt kicseréled 0-ra (ekkor a fv pontos egyezőséget keres) akkor azokra a számokra ami nincs megadva a segédtáblában #HIÁNYZIK eredményt fog adni.
Ha ezt el szeretnéd kerülni akkor Delila képletét módosítsd így:
Excel2007-2010 esetén
=HAHIBA(FKERES(I20;J20:K23;2;1);"")Korábbi verziók esetén:
=HA(HIBÁS(FKERES(I20;J20:K23;2;1);"";FKERES(I20;J20:K23;2;1))Talán nem írtam el.
Így a képlet hiba esetén üres cellát fog adni.
-
m.zmrzlina
senior tag
válasz
Delila_1 #17512 üzenetére
Te hekkeled a gépemet?
Sub szamol()
Cells(1, 27).Value = "szám"
Cells(1, 28).Value = "darab"
For i = 1 To 30
For Each cella In Selection.Cells
If cella.Value = i Then
mennyi = mennyi + 1
End If
Next
Cells(i + 1, 27).Value = i
Cells(i + 1, 28).Value = mennyi
mennyi = 0
Next
End SubItt van készen majdnem ugyanez,
-
m.zmrzlina
senior tag
válasz
Sanyuc #17508 üzenetére
Első körben csak a módszer miatt aztán ha kell módosítani még lehet faragni:
Sub szamol()
For i = 1 To 30
For Each cella In Selection.Cells
If cella.Value = i Then
mennyi = mennyi + 1
End If
Next
Debug.Print "Összesen " & mennyi & " db " & i & " szám található a kijelölt tartományban."
mennyi = 0
Next
End SubEz a kód az Immediate ablakba írja ki az eredményt, és ki kell jelölnöd azt a tartományt amiben számolni akarsz.
-
m.zmrzlina
senior tag
válasz
Delila_1 #17489 üzenetére
A dátumok szerintem akkor változnak szöveggé amikor a cellatartalomból először munkalapnév lesz aztán a munkalapnévből megint visszakerülnek egy másik cellába.
Azért ilyen bonyolultan oldom meg mert a forrásfájlban mindenféle hibák lehetnek. (ismétlődő, nem megfelelő szerkezetű vagy oda nem illő munkalapok-ezeket törölni kell illetve nem is mindig időrend szerint vannak a munkalapok) Csak miután rendbetettem a munkafüzetet lehet listát csinálni a munkalapokról és minden más csak ezután jöhet.
Az alapfeladat szépen működik is (mondhatnánk, hogy első körben készen vagyunk) csak ez az ellenőrzés nem megy.
-
m.zmrzlina
senior tag
válasz
Delila_1 #17483 üzenetére
Azt szeretném a makróval, hogy jelezze, hogy a fenti példánál pl febr 23.-a hiányzik. Most az van, hogy mivel a makrónak minden cellaérték 2013,02 így már az első ellenőrzéskor (19-20-nál) jelez.
Jelenlegi cellaformátum Általános. _Nem Dátum vagy Szöveg Az első sorba a munkalapnevek beolvasásával kerülnek az értékek.
(a szerkesztőlécen F2 képlete)
-
m.zmrzlina
senior tag
válasz
Delila_1 #17481 üzenetére
Nem igazán. Ez a kód:
intSzamlalo = 1
For Each wshMunka In ActiveWorkbook.Worksheets
If wshMunka.Name <> "összesítő" Then
wshOsszesito.Cells(1, intSzamlalo + 5) = format(Cells(1, intSzamlalo + 5), "yyyy.mm.dd")
'wshOsszesito.Cells(1, intSzamlalo + 5).NumberFormat = "yyyy.mm.dd"
wshOsszesito.Cells(1, intSzamlalo + 5).Value = wshMunka.Name
intSzamlalo = intSzamlalo + 1
End If
NextKikommentezve a tied alatt ott az én megoldásom de mindkettő ugyanúgy nem jó. A következő ciklussal szeretném kiértékelni az 1. sorban lévő dátum(nak látszó) értékeket:
wshOsszesito.Range("F1").Select
Do While ActiveCell.Offset(0, 1).Value <> ""
If Val(ActiveCell.Offset(0, 1).Value) <> Val(ActiveCell.Value) + 1 Then
intValasz = MsgBox("Az importált adat nem folytonos. Mégis folytatod?", vbYesNo)
If intValasz = vbNo Then
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End
End If
End If
ActiveCell.Offset(0, 1).Select
Loop -
m.zmrzlina
senior tag
Van egy cellám (mondjuk "A1") amiben dátum van a következő formában: 2013.02.19(.) A pont azért van zárójelben mert a problémám ponttal és pont nélkül is uagyanaz
Az =ÉRTÉK("A1") fv. a következő eredményt adja 41324.
A következő programsor Val(Cells(1,1)) pedig ezt: 2013,02Miért van ez és hogyan tudnám makróval kinyerni a cellából a képlet eredményét?
Valójában le szeretném ellenőrizni, hogy az A1:A30 tartományban folytonosak-e a napok, vagyis a kezdő és a záró dátum között nem hiányzik-e egy a sorból.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #17470 üzenetére
Úgy tűnik találtam egy megoldást. (de hogy miért mindig 5 perccel azután, hogy kiposztolom a kérdést)
-
m.zmrzlina
senior tag
Van egy munkafüzetben változó számú munkalap (5-30). Minden lapon egy naphoz tartozó adatok. A dátum megtalálható a lapokon B2:B1500 tartományban (minden cellában) a következő formátumban: ééé.hh.nn ó:pp. Természetesen az óra perc változik de ez nem probléma.
A feladat: időrendi sorrendbe kell rendezni a lapokat (legkorábbi elöl)
Próbáltam a lapokat a hozzájuk tartozó dátumra átnevezni, de hogyan tovább?
-
m.zmrzlina
senior tag
válasz
dellfanboy #17438 üzenetére
Első körben a DARABTELI()-re gondolnék.
pl: =DARABTELI(C:C;1) megadja, hogy a C oszlopban hány 1-es van.
Vagy =DARABTELI(D:D;"ló") a D oszlopban hány ló.
-
m.zmrzlina
senior tag
válasz
motinka #17220 üzenetére
Lehet az a gond, hogy makróként szeretnéd használni. Ez ugyanis egy függvény amit az Excel egyéb függvényeihez hasonlóan kell használni. Nyitsz egy modult a munkafüzetben, bemásolod oda a függvényt és ezután a munkalapon tudod használni ahogyan az Excel beépített függvényeit.
Ha adsz egy címet küldök egy munkafüzetet.
-
m.zmrzlina
senior tag
válasz
motinka #17208 üzenetére
Itt értekeztünk hasonló dolgokról.
Annyi különbséggel, hogy ott a betűszín volt az összegzés kritériuma nem a háttérszín, és nem a cellák számát határozta meg hanem a tartalmukat összegezte.
Az alábbi fv ennek a módosítása:
Function SZINESÖSSZEG(minta As Range, tartomany As Range)
Dim cella As Range, osszeg As Double
szin = minta.Interior.ColorIndex
For Each cella In tartomany
If cella.Interior.ColorIndex = szin Then
osszeg = osszeg + 1
End If
Next cella
SZINESÖSSZEG = osszeg
End Function -
m.zmrzlina
senior tag
Létezik e az Application.ScreenUpdating-nek oprendszer szinten is működő változata.
Az a gondom, hogy van egy makróm ami azt csinálja, hogy
1. megnyit egy fájlt
2.kiír belőle bizonyos adatokat
3.bezárja a fájlt
4. GoTo 1 (kb 1000-szer)Ezalatt a tálcaikonok folyamatosan változnak (a megnyitás-bezárások miatt) egy kicsit "hektikussá" téve a makró futását.
Ezért szeretném letiltani a képernyőfrissítést rendszerszinten.
-
m.zmrzlina
senior tag
válasz
Delila_1 #17185 üzenetére
Ez lett belőle:
Range("C" & intMeterfejlec & ":D" & intMeterfejlec_vege).Select
Set ranPorthol = Selection.Find(What:=strPort, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not ranPorthol Is Nothing Then
If Mid(Cells(ranPorthol.Row + 4, 5).Value, 9, 4) <> "UNDF" Then
strPortmap(1, intKovport) = Mid(Cells(ranPorthol.Row + 4, 5).Value, 9, 4)
intKovport = intKovport + 1
Else
strPortmap(1, intKovport) = Empty
intKovport = intKovport + 1
End If
Else
strPortmap(1, intKovport) = "NONE"
intKovport = intKovport + 1
End IfÉs láss csodát....működik.
Megint köszönöm.
-
m.zmrzlina
senior tag
Van egy ilyen kódrészletem:
Range("C" & intMeterfejlec & ":D" & intMeterfejlec_vege).Select
On Error GoTo hianyzoport:
intPorthol = Selection.Find(What:=strPort, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
If Mid(Cells(intPorthol + 4, 5).Value, 9, 4) <> "UNDF" Then
strPortmap(1, intKovport) = Mid(Cells(intPorthol + 4, 5).Value, 9, 4)
intKovport = intKovport + 1
Else
strPortmap(1, intKovport) = Empty
intKovport = intKovport + 1
End If
hianyzoport:
If Err.Number <> 0 Then
strPortmap(1, intKovport) = "NONE"
intKovport = intKovport + 1
End IfEz egy számlálós ciklus belsejében van és azt csinálja, egy kijelölt tartományon belül megkeres egy értéket (strPort változó) és ettől a cellától meghatározott (sor, oszlop) távolságra lévő cella tartalmának bizonyos részét beleírja egy tömb megfelelő helyére (ha az megfelel bizonyos feltételeknek) Ha nem találja a strPort változót akkor hibára fut és a kérdéses tömbelem "NONE" lesz.
A probléma az, hogy az első hibánál szépen lefut a hibakezelés (elugrik a kód a hianyzoport: cimkére) a második esetben azonban Object variable or With block variable not set (Error 91) hibával kiakad.
Kérdés: miért fut le először jól és miért akad ki ugyanannál a hibánál másodszor?
-
m.zmrzlina
senior tag
Köszönöm, működik.
-
m.zmrzlina
senior tag
válasz
Herczi #17160 üzenetére
Az nem működik, hogy egy következő lépésben a képlet eredményével (B1) felülírod az A1 cellát?
Másolás > Irányított beillesztés > Értéket
Egyébként az előző képlet a 2,5-tel maradék nélkül osztható értékeket is felkerekíti. pl 90 ből 92,5 lesz. Ha ezt el akarod kerülni akkor használd a következő képletet:
=HA(MARADÉK(A3;2,5)<>0;A3+(2,5-MARADÉK(A3;2,5));A3)
-
m.zmrzlina
senior tag
Ez kiváló pont ilyesmire van szükségem.
Hogyan lehet ezt a linkedcell értéket futásidőben változtatni?
Az lenne a cél, hogy (megkönnyítendő az adatbevitelt) egér használata nélkül:
1. pl A1-be írok egy számot
2.Linkedcell értéke AktiveCell.Offset(0,1)
3.Enter-re megkapja a Combobox a fókuszt
4.kiválasztom a ListfillRange elemeiből a kívántat
5.Enterre beíródik a Combobox tartalma LinkedCell-be, ez esetben ("B1")
6.(A oszlop első nem üres cellája).Select (eggyel lejjebb ugrik az aktív cella)
7. GoTo 2 -
m.zmrzlina
senior tag
Ki lehet nyerni valahogy makró segítségével egy fájlból a fájl létrehozásának dátumát?
Text fájlról van szó (nem txt kiterjesztéssel) de a fájl maga nem tartalmazza az adatot.
-
m.zmrzlina
senior tag
Köszi a választ.
Az egybefüggő tartományos módszert ismerem. A te javaslatodról mondanál pár szót?
Mennyiben különbözik ez a megoldás a validált listástól? Ott ugyanis ALT+lefelenyíl > PgDown(PgUp) vagy a kurzornyilak segítségével lehet a kívánt elemhez navigálni. Merthogy ettő keresek egy rugalmasabb megoldást. (kb 200-250 elemről van szó)
-
m.zmrzlina
senior tag
válasz
Delila_1 #17069 üzenetére
Az On Error Resume Next megadásakor nem áll le a program, hanem a következő sorra ugrik.
És ezt mindaddig csinálja amíg az Az On Error Goto 0 ki nem kapcsolja.
Ez volt a probléma. Korábban volt egy Resume Next és nem volt utána Goto 0
Köszi
Az automatikus kiegészítére valakinek valami ötlet?
-
m.zmrzlina
senior tag
válasz
Delila_1 #17064 üzenetére
Érdekes dolgot vettem észre.
A Worksheets(intI).Name = Int(Worksheets(intI).Range("B10").Value) sor után betettem ezt:
If Err.Number <> 0 Then Debug.Print Err.Number
A látszólag jól lefutó átnevezések után is hibakódot ír (9-t) de ott sem áll meg a futás.
Az On Error Resume Next csak az azt követő sorra van hatással, vagy a kód további részében minden hibánál továbblép?
-
m.zmrzlina
senior tag
Még egy kérdés, az előbbitől teljesen független.
Van egy tartomány (mondjuk legyen az "A" oszlop). A felhasználónak ezt kell kitöltenie olyan tartalommal (csak szöveg) amit kb 250 különböző tételből választhat ki, ezen kívül itt nem fordulhat elő más tartalom.
Szeretném a tartomány kitöltését megkönnyíteni de nem validált listával mert 250 elem esetén már macerás.
Az lenne a legegyszerűbb ha az egyébként az excelben már működő automatikus kiegészítést tudnám úgy használni, hogy ha elkezdi begépelni a szöveget akkor felkínálja a begépelt tartalom alapján lehetséges választásokat.
Van eree valamilyen lehetőség?
-
m.zmrzlina
senior tag
Van egy ilyen makrórészlet:
For intI = Worksheets.Count To 1 Step -1
If Worksheets(intI).Name <> "összesítő" Then
If Worksheets(intI).Range("B1").Value = "valami" Then
Worksheets(intI).Name = Int(Worksheets(intI).Range("B10").Value)
Else
Application.DisplayAlerts = False
Worksheets(intI).Delete
Application.DisplayAlerts = True
End If
End If
NextAz a bajom vele, hogy ha két munkalapon a B10-es cella (egészrésze) megegyezik akkor (várakozásom szerint) annak kellene történnie, hogy a makró az első munkalapot átnevezi a másiknál pedig hibára fut mivel már van egy olyan nevű munkalap amire az aktuálisat nevezni kellene. (ezt a második munkalapot egyébként törölni szeretném a későbbiekben)
Ezzel szemben az történik, hogy hibaüzenet nélkül végigfut a makró és a második munkalapnak meghagyja az eredeti nevét.
Miért van az hogy nem fut hibára a makró az átnevezésnél és hogyan lehet legegyszerűbben detektálni a névütközést?
(ellenőriztem: nincsen "úgymaradt" Application.DisplayAlerts = False parancs sehol a kódban korábban.)
-
m.zmrzlina
senior tag
Ismerem egy excel fáljnak az elérési útját és a nevét.
Hogyan tudom makróból legkönnyebben lekérdezni, hogy az adott fájl nyitva van-e?
-
m.zmrzlina
senior tag
válasz
Delila_1 #16871 üzenetére
Range("J3:J15000") = "=COUNTIFS(A:A,G3,B:B,H3,C:C,I3)"
Ennél a sornál hal most meg nekem a makró (ld #16868. hszt)
Egyszerűen nem írja ki munkalapra a makró a megadott cellába a képletet. Ha kitörlöm az "="- t a fv neve elől akkor kiírja munkalapra (szövegként természetesen, és persze nem számol)
Maga a fv jó mert ha kézzel
odabiggyesztek elé egy "="-t akkor jó eredményt ad.
A baj az hogy makróval nem tudom kiírni a fv-t a munkalapra.Illeteve nekem úgy is jó lenne ha a makró számolná ki az eredményt és már csak azt írná ki munkalapra. (ez volt az eredeti koncepció #16867 hsz)
-
m.zmrzlina
senior tag
válasz
Delila_1 #16869 üzenetére
Szia, köszi a választ!
Azért ragaszkodom a makrós megoldáshoz mert nem én fogom használni a munkalapot ezért szeretnék mindet amit lehet a "gombnyomásig" leegyszerűsíteni. Ha nekem kellene akkor a DARABHATÖBB()-es megoldás is jó lenne.
Az a koncepció, hogy a felh. egy üres munkafüzetbe beimportálja a szükséges adatokat,elmenti, bezárja. Aztán megnyitja a makrós munkafüzetet elindítja a makrót (betallózza az előbb mentett adatbázisát) és a makró kikeresi neki a szükséges adatokat.
A szerkezet amit a képen látsz az már a makró elejének a munkája, egyszerűbb volna nem a felhasználóra bízni a képletírást.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #16867 üzenetére
Időközben próbáltam ezt a változatot is:
Range("I3").Select
Do While ActiveCell.Value = -1
strKeplet = "=DARABHATÖBB(A:A;G" & ActiveCell.Row & ";B:B;H" & ActiveCell.Row & ")"
ActiveCell.Offset(0, 1).Value = strKeplet
ActiveCell.Offset(1, 0).Select
LoopEbben az esetben a:
ActiveCell.Offset(0, 1).Value = strKeplet
sor ad Application-defined or object-defined error-t. -
m.zmrzlina
senior tag
Van egy ilyen munkalapom: (A:C oszlopok kb 15000 sort tartalmaznak)
A J oszlop képlete megszámolja, hogy G:I oszlopok -1-re végződő számhármasai hányszor szerepelnek A:C oszlopokban. Ugyanezt szeretném megcsinálni makróval, valahogy így:
Range("I3").Select
Do While ActiveCell.Value = -1
ActiveCell.Offset(0, 1).Value = Application.WorksheetFunction.SumIfs _
(Range("A:A"), ActiveCell.Offset(0, -2), Range("B:B"), ActiveCell.Offset(0, -1), ActiveCell.Value, -1)
ActiveCell.Offset(1, 0).Select
LoopType mismatch hibát kapok. Mit rontok el?
(Tudom innen ki lehetne hagyni a SUMIFS() utolsó két argumentumát de ez most részletkérdés)
-
m.zmrzlina
senior tag
válasz
Delila_1 #16759 üzenetére
Ez OK értem a logikáját a megoldásodnak csak az a baj, hogy mivel a valódi formon van 9 db kérdés számtalan optionbuttonnal, ráadásul a későbbi kérdéseknél olyan szövevényes összefüggéseket kellene kezelni hogy nem merem bevállalni ezzel a módszerrel.
Közben találtam valamit itt a How to prevent a UserForm from being closed by using the Close button rész után aminek a logikája mentén megcsináltam ezt:
Private Sub Frame14_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If OptionButton53.Value = True And TextBox7.Value = "" Then
If MsgBox("Add meg a kutyáid számát!", vbInformation, "Adatbeviteli hiba!") = vbOK Then
Cancel = True
End If
TextBox7.SetFocus
End If
End SubEz a megoldás nem engedi elhagyni a Frame-t amíg nincs kitöltve rendesen.
-
-
m.zmrzlina
senior tag
válasz
Delila_1 #16756 üzenetére
Köszi a gyors választ!
Az afterupdate-es megoldást azért vetettem el először mert ott mindjárt a kattintás után felugrik a figyelmeztető ablak (hacsak nem textboxt töltöm ki először) amitől számomra feleslegesen "izgága" lesz a program mivel már akkor is jelez ha a felhasználó még nem felejtette el begépelni a darabszámot csak nem ért még oda a kitöltésben.
Így próbáltam afterupdate-tel: (természetesen az előző hsz-ban a kép csak illusztráció ezért mások a vezérlők nevei)
Private Sub OptionButton53_AfterUpdate()
If OptionButton53.Value = True And TextBox7.Value = "" Then
If MsgBox("Add meg a kutyáid számát!", vbInformation, "Adatbeviteli hiba!") = vbOK Then
TextBox7.SetFocus
End If
End If
End SubAz volt az elképzelésem hogy ha a felh. belekattint a következő kérdés frame-jébe azt már lehet úgy értékelni, hogy befejezettnek gondolja az első kérdést és ekkor már kezdhetem kiértékelni az esetleges hibákat.
-
m.zmrzlina
senior tag
Van egy userformom amin van két frame kb így:
Azt szeretném, hogy ha az első kérdésnél igennel válaszolt a felh. akkor ne tudjon továbblépni a második kérdésre csak ha a textboxba beírta a darabszámot is. Ezt úgy próbáltam meg, hogy a Frame1 Exit eseményébe betettem egy vizsgálatot miszerint
ha optionbutton1.value=true és textbox1.value="" akkor
msgbox "Javítsd ki a hibát!"
textbox1.setfocusA probléma az, hogy ha átkattint a Frame2-be akkor meg is jelenik a hibaüzenet de miután leokézta az üzenetet nem kerül vissza a fókusz a Frame1 Textbox1-re hanem tudja folytatni a második kérdéssel.
Próbáltam úgy is megadni a textbox1.setfocus parancsot hogy UserForm2.Frame1.Textbox1.SetFocus de arra meg az a hibaüzenet jön, hogy "Object doesnt support this property or method"
Mit rontok el?
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #16499 üzenetére
Még annyi hozzá, hogy jelenleg fordítva működik a makró. Van pártíz sor és 10 oszlop a tömbben. Az oszlopok számát tudom növelni szükség szerint, majd amikor feltöltöttem akkor
ranCelterulet.Value = Application.Transpose(varSpss_adatsor())
paranccsal iratom ki a szükséges formátumban.
Ez itt azt jelenti, hogy ne is próbálkozzak sorok hozzáadásával mert csak az oszlopok bővíthetőek?
Minél többet olvasok utána annál kevésbé értem. -
m.zmrzlina
senior tag
Egy fix szélességű de változó hosszúságú tömböt szeretnék létrehozni és azt feltölteni adattal. (kb tíz sor és néhányszor tíz oszlop).
Sub test()
Dim intVmax As Integer
Dim intS As Integer
Dim intO As Integer
Dim tomb1() As Variant
intVmax = 1
ReDim Preserve tomb1(1 To intVmax, 1 To 50)
For intS = 1 To 5
For intO = 1 To 50
tomb1(intS, intO) = intS * intO
Next
intVmax = intVmax + 1
ReDim Preserve tomb1(1 To intVmax, 1 To 50)
Next
End SubA problémám a tömb ReDim parancsánál van. Itt <Subscript out of range> hiba adódik. Nyilván keverem a sort és az oszlopot de nem tudom hogy hol.
Minden segítséget előre is köszi. -
m.zmrzlina
senior tag
Sub offszet()
Dim oszlop1
Dim oszlop2
oszlop1 = Range("A1").Value
oszlop2 = Range("A2").Value
offszet = Range(oszlop2 & ":" & oszlop2).Column - Range(oszlop1 & ":" & oszlop1).Column
Debug.Print offszet
End SubKérdésem: van-e ettől elegánsabb (főleg rövidebb) megoldás két oszlop közötti távolság integerben történő meghatározására?
-
m.zmrzlina
senior tag
Range(chr(intOszlopszam+64) & : & chr(intOszlopszam+64).Select
Az intOszlopszam változó egy integer és betűvé szeretném alakítani, hogy tudjam használni az első sorban lévő kifejezésben. A betűvé alakítás még csak-csak megy de még 2 idézőjelet is hozzá kellene fűzni a sorhoz.
Mi ennek a módja?
-
m.zmrzlina
senior tag
Van egy ilyen sorom:
ActiveCell.Offset(0, 1).Value = Cells(ActiveCell.Row, 6).Value + Cells(ActiveCell.Row, 5).Value - shift + (1 / 24)
Az = jel jobb oldalán lévő két cella dátumot és időt tartalmaz. A shift szintén idő amit ki kell vonni az előző két cella által meghatározott dátumból.
Az legvégén lévő hozzáadást (az 1/24 értéket) csak akkor szeretném elvégezni ha a shift-tel módosított időpont a nyári időszámítás idejére esik.
Úgy meg tudom oldani, hogy egy cellában a munkalapon megadok egy értéket és azt levizsgálva vagy megtörténik vagy nem a hozzáadás. De ekkor a felhasználónak egy előzetes becslést kellene elvégeznie, hogy hová fog esni várhatóan az időpont, és ez - főleg az óraállítások környéki időpontoknál - kicsit macerás.
-
m.zmrzlina
senior tag
válasz
Delila_1 #15479 üzenetére
Köszönöm a segítséget. A dátumérték()-kel sikerült megoldani makróval...
...miután kiderült, hogy nem excel függvényként (Application.Worksheetfunction. stb stb) kell használni, hanem van egy ilyen VBA függvény. Talán másnak is mond újat ez az oldal
Köszi még egyszer.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #15476 üzenetére
ami a '=ÖSSZEFŰZ(KÖZÉP(G3;7;4);".";KÖZÉP(G3;1;2);".";KÖZÉP(G3;4;2)) képlet VBA megfelelője.
Pontosabban a '=ÖSSZEFŰZ(KÖZÉP(F2;7;4);".";KÖZÉP(F2;1;2);".";KÖZÉP(F2;4;2)) képlet VBA megfelelője.
Menet közben a képkivágáshoz odébbtettem a tartományt. -
m.zmrzlina
senior tag
A fenti képen az A:J oszlopok külső adatforrásból származnak és a látott formában kerülnek az Excelbe. Az L oszlopot a következő módon képzem:
For i = 2 To 8
Cells(i, 13).Value = Mid(Cells(i, 7), 7, 4) & "." & Mid(Cells(i, 7), 1, 2) & "." & Mid(Cells(i, 7), 4, 2)
Nextami a '=ÖSSZEFŰZ(KÖZÉP(G3;7;4);".";KÖZÉP(G3;1;2);".";KÖZÉP(G3;4;2)) képlet VBA megfelelője.
M2 cella képlete M1-ben
Kérdésem, hogy hogyan tudnám egy lépésben megoldani ezt a transzformációt
A végső célom az, hogy az F és E oszlopok által meghatározott időponthoz, hozzáadjam a J oszlopban lévő értéket tehát pl a 2 sorban a 2012/14/10 16:50:15-höz adjuk hozzá a 3 nap 22:01:20 értéket (J2 cella)
-
m.zmrzlina
senior tag
Van egy listás adatérvényesítésem amelynek a forrástartománya kb 3000 elemet tartalmaz ami ABC szerint rendezve van.
Van-e valamilyen lehetőség arra, hogy ha elkezdem begépelni az érvényesítést tartalmazó cellába a szöveget (az első karaktert ami mondjuk K) akkor a cellában megjelenik az forrástartomány első K-val kezdődő eleme amit enterrel tabbal bármivel be lehetne írni a cellába?
-
m.zmrzlina
senior tag
válasz
Sziszmisz #13878 üzenetére
Kicsit gyorsabb megoldás, ha bemásolod új modulba a következő makrót:
Sub hozzafuz()
For Each cella In Selection.Cells
cella.Value = cella.Value & " " & ActiveCell.Offset(-1, -1).Value
Next
End SubKijelölöd azt a tartományt amelynek minden eleméhez hozzá szeretnéd fűzni a leírást majd elindítod a makrót. Az ActiveCell.Offset(-1, -1) határozza meg, hogy a kijelölés legfelső cellájához képest (jó esetben ez az aktív cella) hol helyezkedik el az a cella aminek a tartalmát minden kijelölt cella tartalmához hozzá kell fűzni. A példabeli esetben 1 sorral felette és tőle egy oszloppal balra.
Kérdés: Minden termékcsoport (zöld cellák közti tartomány) pontosan 9 elemből áll mint a példában van?
-
m.zmrzlina
senior tag
válasz
Sziszmisz #13878 üzenetére
A sor és oszlopazonosítók ugyan nem látszanak a képen de tegyük fel, hogy a Terméktípus a C oszlopban van és a következő üres oszlop a G valamint az első zöld cella B3
Ez esetben a G4 képlete:
=C4 & " " & $B$3
Ezt le tudod másolni ameddig szükséges (a következő zöld sorig) majd kijelölöd G4-G12-ig és csak az értéket beilleszted a C oszlopba.
-
m.zmrzlina
senior tag
válasz
Delila_1 #13875 üzenetére
Ha jól értem a képletet akkor:
Melyik a sora annak a cellának,
-amiben lévő szöveg kezdődik valamivel
-azután jön a keresett szó első két betűje
-végül befejeződik valami mással.Sajnos ilyen szempontból rossz a példám (bocs
) mert a nem odaillő karakterek bárhol lehetnek a keresendő szóban akár a legelején is.
-
m.zmrzlina
senior tag
A H oszlopban szeretném megkeresni az I oszlop elemeit.
Képünk csak illusztráció
lényeg, hogy az adatbázis elemei és a keresett szavak közt néhány karakter eltérés lehet de attól még egyeznek.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #13760 üzenetére
Ez viszont:
=DARABHATÖBB(B10:M10;"=alma";B11:M11;"=banán")
1-et ad vissza, ha mindkettő benne benne van a hozzá tartozó kritériumtartományban és 0-t ha bármelyik hiányzik.
Én viszont azt szeretném ha azonos kritériumtartománnyal is működne a képlet.
-
m.zmrzlina
senior tag
Egy külső adatbázisból importált tömb fejlécét szeretném leellenőrizni, hogy megvan-e benne minden szükséges oszlop amiből a makrónak kell dolgoznia. (A külső adatbázisban kívánság szerint összeállítható az Excelbe exportálandó "étlap")
Mi a célszerű megoldás ebben az esetben?
=DARABHATÖBB()-bel próbálkozom, de nem sok sikerrel
=DARABHATÖBB(B10:M10;"=alma") ez működik és 1-et ad vissza ha benne van az alma
=DARABHATÖBB(B10:M10;"=alma";B10:M10;"=banán") ez 0-t ad vissza ha mindkettő benne van.
Valsz. nem értem ezt a fv-t -
m.zmrzlina
senior tag
válasz
Delila_1 #13566 üzenetére
Amint írtam az adatbázis és a form is bonyolultabb a kép csak illusztráció.
Arra gondoltam, hogy nem lehetne-e bevezetni változót minden adatra (ami akár 50-nél több különböző változót jelentene) Ezt viszonylag könnyen fel lehet tölteni ciklussal, aztán kiirogatni megfelelő helyre a formra.
Nincsen ötletem.
-
m.zmrzlina
senior tag
válasz
Delila_1 #13561 üzenetére
Itt egy végletekig leegyszerűsített illusztráció:
A felső öt sor az adatbázis. A valóságban természetesen sokkal nagyobb sor és oszlop irányban is. A bekeretezett rész a form amit ki kell tölteni. A valóságban külön munkalapon vannak.
A harmadik munkalapon van egy lista ami részhalmaza a az A oszlopban lévő számoknak(azonosítók). MATCH()-csel megkeresem a lista első elemét az adatbázisban majd a hozzá tartozó adatokat beírom a formba majd mentem a formot egy új munkafüzetbe.
Ezután form törlése, a lista második elemének keresése, form kitöltés, mentés stb... amíg van a listában elem.A keresés és a mentés nem gond csak a form kitöltésére keresek egy elegánsabb megoldést mit hogy a:
Worksheets("lista").Range("A" & sor).Copy Worksheets("űrlap").Range("A2")
sort leírjam 50-szer néha többször (természetesen megfelelő cellahivatkozásokkal) a makróba. (a hivatkozásokat ne nézd nem illenek az képhez)
-
m.zmrzlina
senior tag
Adott egy táblázat:
"A" oszlopban azonosító számok, B oszloptól kezdődően egy sorban az azonosító számokhoz tartozó adatok (kb 50) Ebből a szerkezetből van mondjuk 200 sor.Másik munkalapon egy form amit fel kell tölteni egy adott azonosítóhoz tartozó adatokkal természetesen nem sorban.
Hirtelen nem nagyon látok más módszert mint egyenként másolni a cellákat
egyik!A1--->másik!B5
egyik!B1--->másik!B26
egyik!C1--->másik!C5
.
.
.
egyik!AJ1--->másik!P27Van-e valami elegánsabb módszer ennél? Mire érdemes guglizni?
-
m.zmrzlina
senior tag
válasz
Delila_1 #13499 üzenetére
Fire és Delila köszönöm a megoldást. Működik.
Eredetileg ugyan nem így (makróval) terveztem hanem a Hivatkozás beszúrása> Dokumentum adott pontja menüpont segítségével de azzal a módszerrel a hivatkozott cella a "kliensterület" jobb alsó sarkába került (vagy máshová de nem a bal felsőbe). Gondolom a trükk a Scroll:=True-ban van de ezt nem lehet közvetlenül használni a munkalapon.
Új hozzászólás Aktív témák
Hirdetés
- Antivírus szoftverek, VPN
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Gyermek PC játékok
- ÁRGARANCIA! Épített KomPhone Ryzen 5 7500F 32/64GB DDR5 RTX 5060 8GB GAMER PC termékbeszámítással
- AKCIÓ! MSI Z690 i7 12700K 32GB DDR4 1TB SSD RX 6800 16GB Phanteks P600S Cooler Master 750W
- ÁRGARANCIA! Épített KomPhone i5 12400F 16/32/64GB RAM RTX 5060Ti 8GB GAMER PC termékbeszámítással
- Huawei Nova Y70 128GB, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! Acer Predator Triton Neo 16 15 notebook - Ultra 9 185H 32GB RAM 2TB SSD RTX 4070 WIN11
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest