- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Az NVIDIA ipari AI-felhőt épít a németeknek, együtt az OpenAI és a Google
- Két új Ryzen közül választhatnak a kézikonzolok
-
PROHARDVER!
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
-
repvez
addikt
válasz
m.zmrzlina #45420 üzenetére
köszi, ez egyszer működött, de nem tudom, mi történik , ha kitöröltem a megjelenített sorokat és újra vittem be adatokat akkor onnantól már nem jelent meg semmi adat sem
hiába másoltam és mentettem el újra a macrot.
és ki akartam próbálni, hogy módosítom a H2-H7 tartományt, de nem reagált utána már semmire.
egyébként csak ennyi lenne, hogy a munka1es függőleges oszlop adatait a munka 2 vízszintes sorába írja, de ha többször módosul egy nap a munka1ben az adat akkor csak felülírja az aznapi sorban lévő cellában irt adatot és ne szúrjon be még egy sort aznapi dátummal.Delila_1: nem csak a H2 lenne adat, hanem a H2-H20ig.
-
repvez
addikt
válasz
m.zmrzlina #45414 üzenetére
Köszi.
kiprobáltam, Müködik is, csak ami a munka1 H oszlopába kerül, azt ugy szereném a munka2re vinni,Hogy ott egy nap az egy sorba kerüljön.
Tehát a H lévö oszlop az a munka 2-n. BCDE stb sorokba kerüljön vízszintesen
Az "A"oszlopban csak az adott napi dátum, és utána a B,C,D E,F stb.. sorokba meg az értékek.Holnap meg uj sort kezdjen
-
Hege1234
addikt
válasz
m.zmrzlina #45360 üzenetére
igen, az volt a jó ahogy írtad
köszi a segítséget és a példát -
Hege1234
addikt
válasz
m.zmrzlina #45358 üzenetére
nagyság szerint az utolsó előtti számot kéri
ez nálam a 15
=KICSI(C2:c11;9)
amit te mutatsz ott kiválasztottam a 9 -et
mivel úgy adja meg az utolsó előtti számotvagy azért nem értem mert
nekem a 2. legnagyobb és az Utolsó előtti
az ugyan az vagyis mindkét sorba ez kerül?
=NAGY(C2:c11;2) -
Hege1234
addikt
válasz
m.zmrzlina #45356 üzenetére
ohh.. tényleg félreértettem
igen a =NAGY(C2:C11;2) fv-t használtam hozzá
ha most már jól értem akkor ez a megoldás hozzá
=KICSI(C2:C11;9)
köszi a segítséget! -
Hege1234
addikt
válasz
m.zmrzlina #45354 üzenetére
ennyit kaptunk ez a 7. feladat
képFKERES, INDEX?
nekem egyik se rémlik..
ezek szerint akkor van több megoldás is
melyik lenne a legegyszerűbb?
(kezdő szinten) -
tcsaba007
tag
válasz
m.zmrzlina #45340 üzenetére
Köszi!!!!
-
Mutt
senior tag
válasz
m.zmrzlina #45324 üzenetére
Szia,
Most olvasva végig a leírásodat, ugyanazt csinálod amit én is javaslok és napi szinten használok. Nincs jobb megoldás, kivétel ha Office Script-re térnél át mert ott simán lehet tömbök méretét növelni.
2 megoldást tudok javasolni.
1. A kiTömb csak 1-dimenziós legyen és a beTömb indexét tartalmazza. Amikor pedig íratsz ki, akkor a kiTömb-ből kapott index-el a beTömb-ből olvasod ki az értékeket.
Memóriában nem fog sok helyet foglalni, lassitani sem igen fogja a feldolgozást, egyedül csak a kiírás lesz lassabb mivel nem tudod egy lépésben a tömb tartalmát kiírni. (Ez a megoldás nálam egy 3 percig futó makróból 2 percet vett el, szóval nem ideális ha sokat kell a lapon dolgozni. A 2-es opcióval gyors kiíratást elérsz, de oda kell figyelni a helyes indexek használatára!)2. Ne legyen probléma hogy a nem fixelt definiált tömbnek csak az utolsó méretét lehet változtatni. Képzeld el, hogy ez a tömb 90 fokkal el van forgatva az eredetihez képest. Az első sor innentől az első oszlopban lesz, a második sor a második oszlopban és így tovább. A kódod ilyenkor csak a hivatkozásban változik.
Az alábbi minta kód a kék listából kiszűri az adatot, egy dinamikusan változó tömbbe.
A sárga a dinamikus tömb eredeti (inverz) állapotát mutatja, de azt vissza lehet könnyedén konvertálni.Sub ReDIM_Minta()
Dim minta As Range
Dim beTomb()
Dim kiTomb()
Dim oszlopok As Long, sorok As Long, i As Long, j As Long
Set minta = ActiveSheet.Range("A1").CurrentRegion
oszlopok = minta.Columns.Count
sorok = minta.Rows.Count
'erre nincs szükség, de látható hogy sorok és oszlopok szerint van a beTömb
ReDim beTomb(1 To sorok, 1 To oszlopok)
'adatok betöltése a tömbbe
beTomb = minta
'kiTomb-öt állítsuk be hogy annyi "sora" legyen mint az erdeti oszlop szám
ReDim kiTomb(1 To oszlopok, 1 To 1)
'az első sor a beTomb-ben egy fejléc másoljuk be a kitömb-be
For i = 1 To oszlopok
'itt látszik hogy csak az index sorrendet kell felcserélni
kiTomb(i, 1) = beTomb(1, i)
Next i
'szűréssel a nőket tartalmazó rekordokat tegyük be a kiTömb-be
For i = 2 To sorok
'ha a beTomb 4. oszlopában N van akkor
If beTomb(i, 4) = "N" Then
'növeljük a kiTomb utolsó dimenzióját 1-el
ReDim Preserve kiTomb(1 To oszlopok, 1 To UBound(kiTomb, 2) + 1)
'bemásoljuk az adatokat a beTomb-ből
For j = 1 To oszlopok
kiTomb(j, UBound(kiTomb, 2)) = beTomb(i, j)
Next j
End If
Next i
'konvertálatlan dump - sárga
ActiveSheet.Range("F1").Resize(UBound(kiTomb, 1), UBound(kiTomb, 1)) = kiTomb
'konvertált dump - zöld
ActiveSheet.Range("F10").Resize(UBound(kiTomb, 2), UBound(kiTomb, 1)) = Application.Transpose(kiTomb)
End Subüdv
-
Fferi50
Topikgazda
válasz
m.zmrzlina #45328 üzenetére
Szia!űjEsetleg csak a feltétel tartományokat beolvasni:
Arra gondoltam, hogy csak azokat az oszlopokat olvasd be külön-külön tömbökbe, amelyekre a feltételt meg kell vizsgálni. Így lesz 2-3 (esetleg több) egydimenziós(nak tűnő) tömböd, amelyeknek azonos sorában lesznek az egy sorhoz tartozó vizsgálandó elemei, tehát egy ciklussal elég végigmenni a vizsgálat során.
A feltételnek megfelelő sorok számát egy szövegváltozóban gyűjteném összePe Pl.dim sorkell as string
sorkell="1:1"
sorkell=sorkell & ",5:5")
sorkell=sorkell & ",9:9")
Persze ezeket a feltétel megfelelősége esetén.
A hasonlítás megtörténte után pedig:Sheets(forrás).Usedrange.Range(sorkell).Copy Sheets(eredmény).Range("A1")
egy lépésben átmásolja a teljes szűrt tartományt.
Üdv. -
marec1122
senior tag
válasz
m.zmrzlina #45325 üzenetére
köszi
-
Fferi50
Topikgazda
válasz
m.zmrzlina #45324 üzenetére
Szia!
Mi lenne, ha a kimenő tömböt csak 1 dimenziósra definiálnád. Ez a dimenzió így dinamikusan növelhető. Az elemeket elválasztójellel olvasnád be a tömb adott helyére.
Amikor kész vagy, akkor bemásolod az eredményt és az elválasztójel alapján a szövegből oszlopok (TextToColumns) függvénnyel tennéd át az oszlopokba az adatokat.
Persze kérdés, hogy ez mennyivel változtatja meg a futásidőt.
Esetleg csak a feltétel tartományokat beolvasni - akár külön-külön tömbbe - és akkor csak egy ciklusváltozó kell a vizsgálathoz.
Üdv.
Ps. Talán az AdvancedFilter függvény is érdekes lehet. -
Fferi50
Topikgazda
válasz
m.zmrzlina #45258 üzenetére
Szia!
Ha "kézzel" nem lehet normálisan beállítani, akkor szerintem makróból sem menne.
Talán meg kellene nézni, hogy a nyomtató kezelési könyve miket mond a vezérlési lehetőségekről illetve a driverről. Esetleg Windows parancssorral rá lehet venni a kétoldalas nyomtatásra, ha a driver vezérelhető így.
Üdv. -
Fferi50
Topikgazda
válasz
m.zmrzlina #45254 üzenetére
Szia!
Szerintem sajnos makróból nem lehet ezt a beállítást szabályozni. Tudom, nehéz ügy de én megpróbálnám első körben az Excel nyomtató menüben a nyomtató beállításait kézzel megcsinálni, ha ott lehet kétoldalas nyomtatást beálítani, akkor megtenném. Utána ellenőriztetném egy próbanyomtatással, hogy valóban kétoldalast nyomtat-e.
Ha igen, akkor csak annyit kell tenned, hogy te beállítod kézzel a nyomtatási makró futása előtt ezt az opciót. (Illetve talán meg is őrzi a beállítást az Excel, ezt nem tudom, ellenőrizni kell.)
Egyébként pedig gondolom a printerdrivert kellene tudni programozni.
Üdv. -
Fferi50
Topikgazda
válasz
m.zmrzlina #45252 üzenetére
Szia!
Bocs, de miért nem jó az, ha eleve kétoldalas nyomtatást állít be a user? Egy-egy lista után nem érzékeli a nyomtató, hogy ezt már új lapra kellene nyomtatnia?
Üdv. -
Fferi50
Topikgazda
válasz
m.zmrzlina #43428 üzenetére
Szia!
Mutt megírta a megfejtést #43426.Üdv.
-
Fferi50
Topikgazda
válasz
m.zmrzlina #43424 üzenetére
Szia!
A pontosvesszők mint elválasztók.... azok úgy tudom, csak magyarban működnek, angolban vessző van. Vagy rosszul tudom?
Üdv. -
Fferi50
Topikgazda
válasz
m.zmrzlina #43421 üzenetére
Szia!
"erre külön be kell vezetni egy új névtartományt?"
Szerintem igen.
Bár az OFFSET függvény használatával úgy gondolom, ki lehet venni a második oszlopot:OFFSET(évkat,0,1,,1)
Ez angol formátum. Magyarban 2016-os óta ELTOLÁS a függvény neve.
(Nem tudom, milyen az Exceled, de amit beírtál, abban keveredik az angol és magyar szintaktikaesetleg a régebbi verziókban még MATCH van magyarul is a HOL.VAN függvény helyett...?)
Üdv. -
Fferi50
Topikgazda
válasz
m.zmrzlina #41894 üzenetére
Szia!
Változók tekintetében nincs igazság, csak ajánlások. A VBA önmagában nem követeli meg a változók első használat előtti deklarációját sem: A változó egyszerűen létrejön, amennyiben egy értékadó utasítást adtál a változónév használatával. Pl. x=5 automatikusan létrehozza az x változót. Ez egyik oldalról nézve roppant praktikus, mert nem kell foglalkozni vele, hogy él-e a változód, hiszen az utasítással létrejön. De: Ezt a változót ebben az esetben nem ellenőrzi a VBA, sem típusra, sem tartalomra. Újabb értékadással más típusú változó lesz belőle. Ezen kívül komoly hibalehetőség is, mert egy betű elütése már egy másik változót hoz létre, nyilvánvaló szándékaid ellenére. Aztán a futtatás során keresheted a hibát napestig, mire rájössz, hogy a nap helyett véletlenül a naap (eddig nem létezett) változóhoz adtad a további számolás eredményeit.
Ezért igen erős ajánlás a VBA ellenőrzési és segítségnyújtási lehetőségeit minél jobban kihasználni. Ezt viszont csak a változók előzetes (explicit) deklarációjával érhetjük el, amikor megadhatjuk, hogy a változó milyen típusú legyen - és akkor csak olyan értéket fogad el -, privát vagy publikus legyen, esetleg megmaradjon az értéke mindaddig, amíg az Excelből ki nem léptünk(!). Ezek az opciók deklaráció nélkül (implicite) nem állnak rendelkezésre. A deklaráció egyúttal inicializálja is a változót a típusának megfelelő null/nothing/stb értékkel. Az ellenőrzés során kiderül, ha elütöttünk egy változó nevet, hiszen az nem lesz deklarálva előzetesen.
Az ellenőrzést egy modulban az Option Explicit utasítás modul eleji kiadásával érhetjük el, de ha a Tools - Options - Editor fülön a Require Variable Declaration opciót bepipáljuk, akkor a VBA minden modullapon automatikusan kiteszi a modul elejére az Option Explicit utasítást.
Tapasztalataim alapján egyértelműen hasznos az előzetes deklaráció, mindenkinek, kezdőknek pedig pláne csak ajánlani tudom. Megszokni könnyű és megkönnyíti a munkát. Hiszen deklarálni nemcsak eljárás elején, hanem menet közben is lehet, a változó első használata előtt.
Remélem ez segít a választásban.
Üdv. -
Mutt
senior tag
válasz
m.zmrzlina #41897 üzenetére
Szia,
Ezt nézd meg: Fájl -> Beállítások -> Speciális -> E füzet megjelenítési beállításai -> Objektumoknál megjelenítendő -> Az összes
Szerintem inkább az adatérvényesítésnél van vmi elcsúszva (pl. rossz hivatkozás, hibás képlet).
üdv
-
Bobrooney
senior tag
válasz
m.zmrzlina #41891 üzenetére
Nem kötelező, alapból 0 lesz az értékük, logikainak meg FALSE.
-
Delila_1
veterán
válasz
m.zmrzlina #36465 üzenetére
Set honnanvegye = Application.InputBox("Jelöld ki a kiinduló területet", "Kiinduló terület", , , , , , 8)
Az utolsó paraméter (type, jelen esetben 8) adja meg, hogy területet vár az inputbox, ezért kell az értékadás elején a Set
Különböző típusú adatok bekérésénél az utolsó paraméter:
Type:=0 képlet
Type:=1 szám
Type:=2 szöveg
Type:=4 logikai, true vagy false
Type:=8 cellahivatkozás (range)
Type:=16 hibaérték, mint #érték
Type:=64 tömb érték (array) -
Pakliman
tag
válasz
m.zmrzlina #36295 üzenetére
"Természetesen a fájlokon valaki úgy dolgozik, hogy a hálózati meghajtóról nyitja meg és oda is ment, van aki a saját gépére másolja ott dolgozik rajta aztán másolja vissza, néha nem is ugyanabba a könyvtárba és nem is ugyanazon a néven mint amin levette."
Ha ez nem lenne, makróval még meg is lehetne oldani. De így...
Ha Te vagy a felelőse/"karbantartója" ennek a dolognak, akkor MEG KELL tiltanod/akadályoznod, hogy mindenki azt csináljon, amit akar.
Ha ezt nem teszed, marad a kézimunka
Bár így is működhet a makró, csak ez esetben a Te feladatod lesz a makró futásakor kiválasztani a szükséges munkafüzeteket. -
cekkk
veterán
válasz
m.zmrzlina #34149 üzenetére
Köszönöm!
F oszlopban vannak de kijavítottam így:
=LEFT(F3;LEN(F3)-2) & "90" és csak annyit írki, hogy #Név?(#34150) Fferi50
Köszönöm! Működik, remélem a számlázó is megeszi majd. -
samfishR
senior tag
válasz
m.zmrzlina #34136 üzenetére
köszönöm!!
-
Fferi50
Topikgazda
válasz
m.zmrzlina #31651 üzenetére
Szia!
Szerintem az
Application.LanguageSettings.LanguageID(msoLanguageIDUI)=msoLanguageIDHungarian
lekérdezés megadja, hogy magyar vagy sem a beállítás, ettől függően állíthatod be a form paramétert "Szöveg" vagy "Text" értékre.
pl.
paramforma=iif(Application.LanguageSettings.LanguageID(msoLanguageIDUI)=msoLanguageIDHungarian,"Szöveg",'Text")
Activesheet.Pastespecial Format:=paramforma stb.Üdv.
-
Delila_1
veterán
válasz
m.zmrzlina #31651 üzenetére
Próbáld így: NumberFormat = "@"
-
MegaNorby
tag
válasz
m.zmrzlina #30693 üzenetére
Köszi sikerült
-
norby91
tag
válasz
m.zmrzlina #30542 üzenetére
Ez működött köszi.
Annyi a baj, hogy törli/nem mutatja a többi sort, ami "nem oda való", s igy a másik érték eltűnik, amit látni kellene.
Nem szűrni akarok, csak összeadni.
Ideiglenesen megoldottam egy fkeres függvénnyel, ha nem lenne rá más megoldás.
Új táblázat, egyenkénti listázás, majd 5-10-15-ös sorban levő eredményt kiirja
-
alfa20
senior tag
válasz
m.zmrzlina #30524 üzenetére
Bocsi lehet rosszul fogalmaztam:
szóval:
Dim alap, ker, alap_mf As String, usor As Long
alap = ActiveWorkbook.Name
alap_mf = ActiveSheets.Name
ker = Munka1.TextBox1.Value
Workbooks.OpenText Filename:=ker
keres = ActiveWorkbook.Name
usor = Application.CountA(Columns(1))
Range(Cells(2, 1), Cells(usor, 2)).Copy
Windows(rendez).Worksheets(alap_mf).Range("A2").PasteAz utolsó sor hibára fut, az nem tetszik neki.
A 'keres' Excel fájlból kellene az 'alap' Excel fájlba másolni adatokat és ki akarom hagyni a sok 'Windows(változó).Activate'-t. -
mindanee
tag
válasz
m.zmrzlina #30435 üzenetére
Hú, ez nagyon jó, köszönöm.
Épp elkezdtem a favágást a HA függvényekkel, de akkor átállok erre
-
Fferi50
Topikgazda
válasz
m.zmrzlina #30435 üzenetére
Szia!
Szerintem az Fkeres még egyszerűbb, ha a tartományban keres (4. paraméter) igazra van állítva, akkor ugyanezt az eredményt adja egy függvénnyel.
Üdv.
-
mindanee
tag
válasz
m.zmrzlina #30431 üzenetére
Szuper!
Nagyon szépen köszönöm!
-
mindanee
tag
válasz
m.zmrzlina #30429 üzenetére
Köszi szépen!
Ha több ársávom van, akkor gondolom többszörös HA függvénnyel kellene próbálkoznom, ugye?
-
Delila_1
veterán
válasz
m.zmrzlina #30401 üzenetére
Egyszer mégis előfordulhatott, hogy range nevet adtál egy változónak.
-
Delila_1
veterán
válasz
m.zmrzlina #30392 üzenetére
Változóként soha ne adj olyan nevet, ami VBA kulcsszó (for, with, range, on, else, string, not, do, loop ...).
A kulcsszavakat a VBE – ha az eredeti színbeállításodat tartottad meg – sötétkéken jeleníti meg. -
bsh
addikt
válasz
m.zmrzlina #30392 üzenetére
beírsz a kódba egy olyan sort, hogy "Dim Range" (Range nagy betűvel), ekkor elvileg az editor automatán átváltja nagybetűsre az összes range-et. ezután ki is törölheted a "dim Range" sort. ennyi.
ez a kisbetűsség azért (is) lehet, mert valahol valamikor valamiért akár véletlenül definiáltál egy kisbetűs "range" nevű valamit, ami már lehet azóta nincs is benne a kódban, de még az editor emlékszik rá. ez okozhat problémákat is akár, mert kitudja így most mi az a "range"? (option explicit javasolt)
de ez csak egy tipp, egy próbát megér. -
bsh
addikt
válasz
m.zmrzlina #30373 üzenetére
azért dobja a hibát, mert a Cells() nincs explicit kvalifikálva (vagy hogy híjják ezt magyarul?), így az az activesheet.cells()-re vonatkozik. magyarán kábé így kell használnod:
Set tartomany = ThisWorkbook.Worksheets(1).range(ThisWorkbook.Worksheets(1).Cells(2, 3), ThisWorkbook.Worksheets(1).Cells(int_usor, int_uoszlop))
a kisbetűs range-re meg írtam már, mit lehet ellene tenni. az nem segített?
-
Delila_1
veterán
válasz
m.zmrzlina #30378 üzenetére
A címet adja vissza, mégpedig $ jelekkel együtt, fixen.
-
Delila_1
veterán
válasz
m.zmrzlina #30373 üzenetére
Sub valogat()
Dim int_usor As Integer, int_uoszlop As Integer, int_vege As Integer
Dim cella As Range, tartomany As String
int_usor = 135: int_uoszlop = 50: int_vege = 2
tartomany = Range(Cells(2, 3), Cells(int_usor, int_uoszlop)).Address
For Each cella In Sheets(1).Range(tartomany)
If cella.Interior.ColorIndex = 6 And cella.Value <> "" And Application.WorksheetFunction.CountIf(Worksheets("csatorna").Range("D2:D50"), cella.Value) = 0 Then
Worksheets("csatorna").Cells(int_vege, 4).Value = cella.Value
int_vege = int_vege + 1
End If
Next
End SubA tartomany változó string legyen, ne range. Nézd meg a for each sort is.
A Dim sorokat érdemes mindig a makró elejére tenni egy kupacba, akkor egy hosszabb makróban könnyű megtalálni. Betettem a cella változót is oda, azt nem dimenzionáltad.
-
Delila_1
veterán
válasz
m.zmrzlina #30352 üzenetére
Most egy kicsit rendesebben írom be a két makrót. Tegnap siettem, és eléggé el nem ítélhető módon nem dekraláltam a változókat, ráadásul az idézett makrókat nem jelöltem programkódként. Bocsi.
Sub Adatok()
Dim Balfelső As String
Balfelső = "$B$2": Végrehajtás Balfelső
Balfelső = "$C$9": Végrehajtás Balfelső
End Sub
Sub Végrehajtás(Balfelső)
Dim sorok As Long, oszlopok As Long, Jobbalsó As String, cella As Range, osszeg
Dim ws_Kabelo As Worksheet
Set ws_Kabelo = Sheets("Kabelo")
sorok = 5: oszlopok = 4: osszeg = 0
Jobbalsó = ws_Kabelo.Range(Balfelső).Offset(sorok - 1, oszlopok - 1).Address
For Each cella In ws_Kabelo.Range(Balfelső & ":" & Jobbalsó)
osszeg = osszeg + cella
Next
ws_Kabelo.Range(Jobbalsó).Offset(1) = osszeg
End SubAz osszeg változónál nem adtam meg a típust. Közel sem biztos, hogy összegezni akarsz a ciklusban, és ha mégis, nem tudom, hogy egész-, vagy lebegőpontos értékeid vannak-e.
-
bsh
addikt
válasz
m.zmrzlina #30352 üzenetére
set terulet = worksheets(1).range(satöbbi)
a range kisbetűre váltás csak ebben a sorban van vagy mindenütt? esetleg tegyél be egy olyan sort, hogy "Dim Range" (nagybetűvel), és utána töröld ki ezt a sort.
-
Delila_1
veterán
válasz
m.zmrzlina #30344 üzenetére
Próbálkoztam az offset-tel, de az nem jött össze, pedig elegánsabb lett volna.
-
Delila_1
veterán
válasz
m.zmrzlina #30341 üzenetére
Például
kezdsor = 9: kezdoszlop = 3
sorok = 5: oszlopok = 4
Set terület = Range(Cells(kezdsor, kezdoszlop), Cells(kezdsor + sorok - 1, kezdoszlop + oszlopok - 1))
For Each cella In ws_Kabelo.területC9 a bal felső cella, a vizsgálandó terület 5 sor és 4 oszlop.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #30335 üzenetére
Szóval az előbbi kérdésben leírt probléma megoldódott a For Each cella In ws_Kabelo.UsedRange.Cells használatával.
Tovább szeretném finomítani a dolgot hogy megadok egy szűkebb tartományt és csak ezen belül szeretnék kerestetni. Ha úgy csinálom pl hogy:
For Each cella In ws_Kabelo.Range("C2:AQ135").Cells akkor műdödik de mivel a kérdéses tartomány mindig más méretű ezért más módszerre van szükség.
Ismerem a tartomány bal felső celláját (ez mindig a C2) illetve integer tipusú változóban megvan, hogy hány sor hosszú és hány oszlop széles a tartomány amiben kerestetni akarok.
Ezek figyelembevételével hogyan adjam meg a For Each cella... sorban a tartomány határait.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #30335 üzenetére
Közben rájöttem. Előbb gondolkozni kellett volna.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #30147 üzenetére
Na meglett. Ha valaki más is szeretné használni: Ctrl+L
Ez ugyan nem pontosan az amit kerestem mert ennél előbb ki kell jelölni a kitöltendő tartományt úgy hogy a legfelső cellában - vagy ha több oszlopot jelölünk ki akkor a felső sorban - az a tartalom szerepeljen amivel ki akarjuk tölteni a a kijelölt tartományt.
Aztán CTRL+L és ....TADÁÁÁÁM....
-
sztanozs
veterán
válasz
m.zmrzlina #30145 üzenetére
Ha ki van jelölve a tartomány és szerkesztés módban vagy (F2), akkor a ctrl+enter bemásolja az értéket (vagy függvényt) a többi kijelölt cellába.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #29933 üzenetére
helyesbítés: (lejárt a szerk. idő)
a "Ha jól értem a feladatot van öt terület," helyesen
Ha jól értem a feladatot van három terület,
-
firemanus82
senior tag
válasz
m.zmrzlina #29925 üzenetére
Bocsánat, nem írtam le. Szóval legördülő menűben (adatérvényesítéssel) van a névsor. És abból szeretném kiválasztani az embereket.
-
dellfanboy
őstag
válasz
m.zmrzlina #29920 üzenetére
-
dellfanboy
őstag
válasz
m.zmrzlina #29908 üzenetére
koszi ez jonak tunik de az angol excelben sehogy se tudom elohivni ezt a menut.. hol talalom?filter -advance tok mas on fel..
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #29903 üzenetére
Egy fokkal talán jobb ez a megoldás:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone
Cells.Font.ColorIndex = xlAutomatic
ActiveCell.EntireRow.Interior.ColorIndex = 1
ActiveCell.EntireRow.Font.ColorIndex = 2
End Sub -
Chase
csendes tag
válasz
m.zmrzlina #29782 üzenetére
THX
-
Chase
csendes tag
válasz
m.zmrzlina #29763 üzenetére
-
Delila_1
veterán
válasz
m.zmrzlina #29746 üzenetére
Jogos! Én is emlékeztem rá, de lusta voltam kikeresni.
-
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.
-
csongi
veterán
válasz
m.zmrzlina #29705 üzenetére
sztanozs -
sztanozs
veterán
válasz
m.zmrzlina #29706 üzenetére
Adj hozzá egy E oszlopot (E1):
=(C1>"")*4+(D1>"")*2
és rakd az alábbi sorrendbe
E - csökkenő számsorrend
C - A -> Z
D - A -> Z -
deka1
csendes tag
válasz
m.zmrzlina #29696 üzenetére
Úgy kell elképzelni, hogy van egy szállítólevél és azon nem sikerült feltüntetni néhány esetben az utolsó 3 karaktert, ami minden esetben három nulla, mivel technikai akadályba ütközött.
Ha jól értem, akkor csak a HA és az ÖSSZEFŰZ függvényt kombinálom, csak az összefűz nem jutott eszembe.
-
Delila_1
veterán
válasz
m.zmrzlina #29624 üzenetére
Szívesen, örülök, hogy sikerült.
-
Delila_1
veterán
válasz
m.zmrzlina #29610 üzenetére
Amint megírtam a makrót, elszállt az internet, de most visszajött.
Sub Szetcincal()
Dim oszlop As Integer, usor As Long
Dim szoveg As String, betu As Integer
Dim szoveg1 As String, nagy As Integer
Dim ekezet As String
' Csere
With Columns("A:Z")
.Replace What:=",", Replacement:=""
.Replace What:=" ", Replacement:=""
End With
ekezet = "á,é,í,ó,ö,ő,ú,ü,ű"
For oszlop = 1 To 26 'A:Z oszlopok
Kezd:
szoveg = Cells(1, oszlop)
szoveg1 = ""
nagy = 0
For betu = 1 To Len(szoveg)
Do
If betu = 1 Then
szoveg1 = Left(szoveg, 1)
GoTo Tovabb
End If
If (Asc(Mid(szoveg, betu, 1)) > 96 And Asc(Mid(szoveg, betu, 1)) < 123 And _
betu > 1) Or InStr(ekezet, Mid(szoveg, betu, 1)) > 0 Then
szoveg1 = szoveg1 & Mid(szoveg, betu, 1)
Else
nagy = nagy + 1
usor = Cells(Rows.Count, oszlop).End(xlUp).Row + 1
Cells(usor, oszlop) = szoveg1
szoveg = Right(szoveg, Len(szoveg) - Len(szoveg1))
Cells(1, oszlop) = szoveg
GoTo Kezd
End If
Loop While nagy <> 0
Tovabb:
Next
Next
End Sub -
poffsoft
veterán
válasz
m.zmrzlina #29612 üzenetére
tudtommal nem.
esetleg helyette ez:[link] -
Delila_1
veterán
válasz
m.zmrzlina #29600 üzenetére
Az =A1=B1 képlet IGAZ, vagy HAMIS eredményt ad, nem szükséges HA függvénybe beágyazni.
-
poffsoft
veterán
válasz
m.zmrzlina #29604 üzenetére
megpróbálom.
Köszi! -
válasz
m.zmrzlina #29600 üzenetére
Kezdek megőrülni. Van egy oszlopban x db hexadecimális szám. Szeretném egy egyszerű csere paranccsal kiszedni előlük a nullákat. Ezzel nem is lenne gond. De az excel, a cseréknél átalakítja az E betűt tartalmazó cellákban az adatokat tudományosra. Már megpróbáltam neki szövegformátumot adni, de fittyet hány rá. Legalább kérdezne rá.
Ki lehet ezt valahol kapcsolni?
-
irodakukac
csendes tag
válasz
m.zmrzlina #29592 üzenetére
Köszönöm válaszod. Igyekszem értelmezni, átírni
.
Ezek szerint Excelben nem nagyon van ilyen menülehetőség...? Csak makróval tudom megoldani?Mert ha már minden megnevezést átmásolnék, akkor a feltételes formázással is meg tudnám vizsgálni, hogy ugyanaz-e a két állomány megnevezése, de több napig is eltartana...
-
Fferi50
Topikgazda
válasz
m.zmrzlina #29470 üzenetére
Szia!
Mi lenne, ha a keresésnél kihagynád az első oszlop celláit. (Ez megoldható vba-ban offset metódus használatával, vagy a tartományt e nélkül definiálod - a tartomány előtt levő cellára is lehet hivatkozni (!) így pl. tartomány(xsor,0) a tartomány x-edik sorában a tartomány előtt levő cellát adja meg.)
Üdv.
-
csferke
senior tag
válasz
m.zmrzlina #29451 üzenetére
Szia!
Kicsit "mélyebben" átnéztem a linket amit küldtél [link] és a következőt találtamPrivate Sub Worksheet_Change(ByVal Target As Range)
''''''''''''''''''''''''''''''''''''''''''''
' Forces text to UPPER case for the range
''''''''''''''''''''''''''''''''''''''''''''
If Target.Cells.Count > 1 Or Target.HasFormula Then Exit Sub
If Not Intersect(Target, Range("C14:J14")) Is Nothing Then
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End If
End SubEzzel nem kell vizsgálni a bevitt adatokat. A munkafüzetet pedig különben is xlsm-ként kell mentenem.
-
Fferi50
Topikgazda
válasz
m.zmrzlina #29441 üzenetére
Szia!
"Csak akkor miért működik n+1-szer úgy is, hogy nincs kizárva a szöveges cella?" Ezt a kérdést szerintem itt nem fogjuk tudni megválaszolni. Én max arra tudok gondolni, hogy maga a keresési tartomány esetleg valamilyen ok miatt egy cellából áll és abban nem szám van."Először a int_Mincsom, int_Maxcsom változó tipusát állítottam Variantra de nem jutottam közelebb. A leálláskor is szám (1 és 9 ami reális) volt az értéke nem pedig hiba."
Csak az a kérdés, hogy a leállás melyik sorban volt, esetleg az előző értékeket láttad még az adott változókban. Nyilván ezt mostmár nehezen fogod tudni ismételten produkálni....Üdv.
-
Fferi50
Topikgazda
válasz
m.zmrzlina #29439 üzenetére
Szia!
Az "Application.WorksheetFunction.Large((rng_Akioszt), 1)" eredménye hiba akkor, ha nem tudja az adott tartományon végrehajtani a műveletet. Mivel az int_Maxcsom tipusa integer, a hiba értékét nem kapja meg, ezért fut hibára.
Oka: lehetséges, hogy az rng_Akioszt tartomány nem kapott értéket, azaz Nothing az értéke,vagy nincsenek benne adatok. Tehát azt meg kellene nézni, mielőtt a műveleteket elindítod. Vagy
Másik megoldás, hogy a Maxcsom, Mincsom változódat Variant -nak deklarálod és a művelet után megnézed, hogy hiba-e az értéke.Üdv.
-
Delila_1
veterán
válasz
m.zmrzlina #29429 üzenetére
Nincs mit.
-
Fferi50
Topikgazda
válasz
m.zmrzlina #29426 üzenetére
Szia!
A probléma igazából nem probléma (vs: az excelnek mindig igaza van
), szerintem abból adódik, hogy az rng_Tempcell.Row a cellának a munkalapon elfoglalt helyét adja vissza és nem az rng_Dkioszt tartományban elfoglalt helyét -> a két szám csak akkor ugyanaz, ha az rng_Dkioszt tartomány az első sortól kezdődik. Egyébként le kell vonni belőle a tartomány induló sorának számát.
Ezen kívül van egy ilyen sorod:
If rng_Tempcell.Value = int_Csomag Then
Ami után jön a következő:
If rng_Tempcell.Value <> "" And rng_Akioszt.Cells(rng_Tempcell.Row, 1).Value = "" ThenSzerintem itt az első feltétel felesleges, hiszen az előző vizsgálatban már megállapítottad, hogy nem üres az rng_Tempcell.
Üdv.
-
Delila_1
veterán
válasz
m.zmrzlina #29426 üzenetére
Nálad elég sok változó van, amiknek az eredete nem látható az ábrán.
A lenti makró üzenetet küld, ha a Dkioszt aktuális cellája nem üres, és nem azonos a tőle 2 oszloppal balra lévő tartomány azonos sorával.
Sub mm()
Dim rng_Dkioszt As Range, CV As Range
Set rng_Dkioszt = Range("E2:E15")
For Each CV In rng_Dkioszt
If CV.Value > "" And CV.Value <> Range(CV.Address).Offset(, -2) Then
MsgBox "Eltérés a(z) " & CV.Row & ".sorban"
End If
Next
End Sub -
m.zmrzlina
senior tag
válasz
m.zmrzlina #29419 üzenetére
A kérdés tárgytalan. Probléma megoldva. Főleg, hogy a kérdésben benne van a válasz is.
-
DeFranco
nagyúr
válasz
m.zmrzlina #29324 üzenetére
igen, ez megvan már. közben azért összeállt a kép, ha jól értem, akkor általános makrótár nincs, max. akkor érem el a makrót máshonnan ha beállítom, hogy indításkor mindig nyisson egy spec munkafüzetet, illetve abban a speciális esetben ha a makrót tartalmazó füzet IS nyitva van.
-
Delila_1
veterán
válasz
m.zmrzlina #29313 üzenetére
A for-next és a for each-next ciklusnál a program gondoskodik a változó értékének növeléséről (elsőnél esetleg csökkentéséről negatív lépésszámnál), a do-loop-nál neked kell gondoskodni erről.
-
Delila_1
veterán
válasz
m.zmrzlina #29311 üzenetére
Ilyesmire gondolsz?
sor = 46
Do While Cells(sor, "C") <> ""
If Cells(sor, "D") = "i" Then
Cells(sor, "F") = "aq"
Else
Cells(sor, "F") = "ap"
End If
sor = sor + 1
LoopVagy
sor = 46
Do While Cells(sor, "C") <> ""
Select Case Cells(sor, "D")
Case "e"
Cells(sor, "F") = ""
Case "i"
Cells(sor, "f") = "ap"
Case Else
Cells(sor, "F") = "aq"
End Select
sor = sor + 1
Loop -
pirit28
csendes tag
válasz
m.zmrzlina #29302 üzenetére
Sziasztok !
Mindkettőtöknek köszönöm a fáradozását,de most verem a fejem a falba,mert rosszul tettem fel a kérdést.
Tehát van a C oszlopom 11-es cellától lefelé,amely cellákban előfordulhatnak a fent említett helyiségek.
Ha pl a C15-ös cellában levő szövegben szerepel az OE szó akkor a D15-ös cellába írja be hogy OE,
és így tovább.A jelen probléma az az ,hogy mindig kitörli valaki a függvényt és mindig újra kell gyártani.Ezért gondoltam ,hogyha valami nem látszik azt nem tudják törölni.Köszönöm
-
nemlehet
őstag
válasz
m.zmrzlina #29294 üzenetére
Köszi, így működik! Már csak kíváncsiságból érdekelne, hogy miért nem volt jó a helyettesítő karakterrel.
-
Reinhardt
őstag
válasz
m.zmrzlina #29276 üzenetére
Koszi, tokeletesen mukodik.
-
Reinhardt
őstag
válasz
m.zmrzlina #29270 üzenetére
Nyomtatok belole 50 oldalt, az elson a "REF:" oszlopban 1-10-ig lesznek szamok, a masodikon 11-20-ig, es igy tovabb.
Szoval a kerdes az, hogy van e vmi fuggveny (vagy mittudomenmi) amit ha beteszek G4:G23-ba, akkor az a nyomtatott darbszam szerint valtozik? Vagy barmilyen mas modszer erdekelne amivel hasonlo eredmenyt kapok. -
Roxy27
tag
válasz
m.zmrzlina #29255 üzenetére
Istenkirály!
Működik, sokat segítettél!
KÖSZÖNÖM -
Pearce
aktív tag
válasz
m.zmrzlina #29141 üzenetére
Köszönet
-
Delila_1
veterán
válasz
m.zmrzlina #29053 üzenetére
Minek az ÖSSZEFŰZ? Azt olyan nehéz magyarul, és angolul is leírni.
= MID(A1,SEARCH(" ",A1)+1,50) &" " & UPPER(LEFT(A1,SEARCH(" ",A1)-1))
Hossznak a MID függvényben a LEN(A1)-et is adhatnám, de az 50 karakter biztosan elég.
-
pheta03
csendes tag
válasz
m.zmrzlina #29049 üzenetére
kicsit később szerkesztettem a hozzászólásomat:
lletve nem akar sikerülni a fordításom:
=ONCATENATE(RIGHT(A1;LEN(A1)-FIND(" ";A1));" ";UPPER(LEFT(A1;FIND(" ";A1)-1)))
Esetleg a példatáblát fel tudnád tolni valahova?
nagyon köszi -
pheta03
csendes tag
válasz
m.zmrzlina #29047 üzenetére
nagyon köszi, királlyá tetted a napomat!
minden jót!
illetve nem akar sikerülni a fordításom:
=ONCATENATE(RIGHT(A1;LEN(A1)-FIND(" ";A1));" ";UPPER(LEFT(A1;FIND(" ";A1)-1)))
Esetleg a példatáblát fel tudnád tolni valahova?
nagyon köszi
-
pheta03
csendes tag
válasz
m.zmrzlina #29044 üzenetére
köszönöm a segítséget!
de van sajnos több keresztneves tétel
ilyenkor mit lehetne tenni még?
-
Fferi50
Topikgazda
válasz
m.zmrzlina #29035 üzenetére
Szia!
Akkor még azt is meg kellene vizsgálni, hogy a szám esetében az megegyezik-e az előző cella +1 értékkel:
If IsNumeric(Cells(xx, 1)) Then
if cells(xx,1).value=cells(xx-1,1).value +1 then Exit For
endifÜdv.
-
Fferi50
Topikgazda
válasz
m.zmrzlina #29030 üzenetére
Szia!
Én megfordítanám a dolgot. Az utolsó sortól mennék felfelé addig amíg számot nem találok az adott cellában, ha nem szám van, akkor törölném a sort.
Sub torolo()
Dim usor As Long, xx As Long
usor = Cells(Rows.Count, 1).End(xlUp).Row
For xx = usor To 1 Step -1
If IsNumeric(Cells(xx, 1)) Then Exit For
Rows(xx).EntireRow.Delete
Next
End SubValószínűleg kevesebb a szemét, mint az értékes sor
(A select- eket pedig próbáld meg elfelejteni.)
Üdv.
-
boboy79
csendes újonc
válasz
m.zmrzlina #28904 üzenetére
Köszönöm szépen sikerült
-
boboy79
csendes újonc
válasz
m.zmrzlina #28867 üzenetére
OfficeSuite 8.3.4060 ha pont helyett vesszőt teszek akkor #HIBA! lessz
-
boboy79
csendes újonc
válasz
m.zmrzlina #28838 üzenetére
Nagyon szépen köszönöm
-
the radish
senior tag
válasz
m.zmrzlina #28784 üzenetére
Ezzel összejött, köszönöm!
-
szatocs1981
aktív tag
válasz
m.zmrzlina #28776 üzenetére
Néha egyszerübb (és gyorsabb) lenne a googliban keresgélni....
-
elttiL
senior tag
válasz
m.zmrzlina #28651 üzenetére
Köszönöm szépen!
A holavege = Range("A" & Rows.Count).End(xlUp).Row verzió működött egyedül. De nekem megfelel.
A többinél runtime error 13 type mismacska hibaüzi volt. Még 1x köszönöm -
poffsoft
veterán
válasz
m.zmrzlina #28657 üzenetére
Igen, találtam közben róla valamit.
RANGE-nel maradva a selection + cutcopymode lesz a megoldás.
Csak sajna ez más objecteket (diagram) lenyel...
persze most jobban belegondolva, lehet hogy a selection "visszaállítása" is elég lesz. -
poffsoft
veterán
válasz
m.zmrzlina #28653 üzenetére
És ha pl. éppen teljes sorok, vagy range van benne, esetleg kép?
egyáltalán hogyan érem el a clipboardot? -
elttiL
senior tag
válasz
m.zmrzlina #28647 üzenetére
Köszönöm a fáradozást. A tök üres táblát úgy értettem, hogy nyitottam egy teljesen üreset, hogy próbálgassam. Beírtam A oszlopba valahova a keresendő szöveget. Így próbáltam.
Biztos rosszul fogalmaztam. Egyszerűsítsünk: beillesztési pont=xxx Az A oszlopban tetszőleges helyen lehet az xxx. A vágólapra kitett táblázat: beillesztés után a bal felső cellájának a helyének kell lennie az xxx-et tartalmazó cellának (tehát felülírjuk a beillesztett táblával).A beillesztett táblázat utolsó A oszlop eleme az xxx tartalom. Így az új beillesztett táblázat beilleszthető arra pontra. (és csak egy darab xxx tartalmú cella lesz az A oszlopban.
Z
Update: Nem, Te segítőkész vagy.csekkolom a patch-et...
Új hozzászólás Aktív témák
Hirdetés
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Eladó Steam kulcsok kedvező áron!
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Bontatlan - BATTLEFIELD 1 Collectors Edition - Játékszoftver nélkül
- AKCIÓ! Microsoft XBOX Series X 1TB SSD fekete játékkonzol garanciával hibátlan működéssel
- Honor Pad X8a 64GB Wifi,1 év Garancia
- AKCIÓ! Apple MacBook Pro 13 2022 M2 8GB 256GB SSD garanciával hibátlan működéssel
- Eredeti, új Lenovo 330W töltők - ADL330SDC3A
- REFURBISHED és ÚJ - HP USB-C/A Universal Dock G2 docking station (5TW13AA) (DisplayLink)
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged