-
GAMEPOD.hu
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
-
Fferi50
őstag
-
0P1
aktív tag
válasz ReSeTer #34193 üzenetére
Egy kicsit pontosítanád a kérdést?
Tehát azt szeretnéd, hogy ha háromszor vagy annál többször szerepel közvetlenül egymás után akármilyen érték (vagy ugyanaz az érték ? - ezt is pontosítsd) egymás alatt egy adott oszlopban, akkor megszámoljon, de mit? Az olyan cellákat, amik megfelelnek a fenti kritériumnak, vagy az ilyen cellatartományokat (range-eket) ?
[ Szerkesztve ]
-
0P1
aktív tag
válasz ReSeTer #34199 üzenetére
Hát ezt két segédoszlop igénybevételével tudom a legegyszerűbben elképzelni :
Ha pl az A oszlopban vannak az adataid, akkor B2-be írd be:
=HA(ÜRES($A2),0,1)
és húzd le a képletetC4-be meg, hogy
=ÉS(SZUM(B2:B4)=3,SZUM(B1:B3)<3)
és húzd le ezt isAztán valahova írd be, hogy
=DARABTELI(C:C,"IGAZ")
Persze durva tömbfügvényezéssel a segédoszlopok is kiküszöbölhetőek
[ Szerkesztve ]
-
Fferi50
őstag
válasz ReSeTer #34199 üzenetére
Szia!
Az A oszlopban vannak az értékeid, a B oszlopba kerül a képlet:
B1 cellába 1
B2 cellába =HA(A2=A1;B1+1;1)
Ezt a képletet húzod lefelé.Annyit kell tenned, hogy feltételes formázással kiemelni a 3-nál nagyobb értékeket (mivel valahogyan számolni kell 3-ig is..)
Vagy egy másik megoldás tömbképlettel:
=HA(MAX(HA(A:A=A1;DARABTELI(A:A;A1)))<3;"";MAX(HA(A:A=A1;DARABTELI(A:A;A1))))
Ezt lehet lehúzni. Minden olyan sorba beírja az előfordulások darabszámát, amely értékből 3-nál több ismétlődik egymás után.
A tömbképletet Ctrl+Shift + Enterrel kell bevinni és az Excel kapcsos zárójelbe teszi.Üdv.
-
Fferi50
őstag
válasz ReSeTer #45446 üzenetére
Szia!
Ez a makró az olyan cellákat veszi figyelembe, amelyekben konstans vagy képlet van. Remélem mindkettő megtalálható a munkalapodon:Sub erd()
Dim ter As Range, maxrow As Integer, maxcol As Integer
Application.EnableEvents = False
For Each ter In Union(ActiveSheet.UsedRange.Range(Cells(5, 1), ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell)).SpecialCells(xlCellTypeFormulas), ActiveSheet.UsedRange.Range(Cells(5, 1), ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell)).SpecialCells(xlCellTypeConstants)).Areas
maxrow = Application.Max(maxrow, ter.Row + ter.Rows.Count - 1)
maxcol = Application.Max(maxcol, ter.Column + ter.Columns.Count - 1)
Next
ActiveSheet.Range(Cells(5, 1), Cells(maxrow, maxcol)).Select
Application.EnableEvents = True
End Sub
Ezután kijelöli azt a területet, amelyben ezek a cellák találhatóak.
Ha nincs képleted vagy beírt konstansod, akkor Nincs ilyen cella hibával meg fog állni. Akkor jelezz vissza légy szíves.
És akkor is ha nem ezt akartad, vagy ezt akartad és sikerült.
Köszi. -
Fferi50
őstag
válasz ReSeTer #45456 üzenetére
Szia!
Lehet, hogy túlgondoltam vagy nem értettem pontosan, mit szeretnél.
de nem láttam, hogy bármit is kijelölne, sőt a nextnél mindig visszamegy a For Each részig.
A For .... Next egy ciklus, pont az a lényege, hogy a két utasítás közötti részt többször is végrehajtja.
A kijelölés pedig a Next után történik, miután mindent megvizsgált.
A SpecialCells(xlCellTypeLastCell)) a munkalap utolsó használt celláját adja vissza
a SpecialCells(xlCellTypeFormulas) azokat a cellákat, amelyekben képletek vannak
a SpecialCells(xlCellTypeConstants) azokat, amelyekben értékek vannak.
Mivel nem kizárt, hogy a használt terület nem összefüggő, vannak üres sorral és oszloppal elválaszott munkalaprészek, ezért végigmegy ezeken a területeken és megnézi, hogy mely sorokat-oszlopokat foglalja el. Ezek közül a legmagasabb sorszám és legnagyobb oszlopszám határozza meg a képlettel és/vagy értékekkel kitöltött területet.
Jelenleg sikerült ezzel megoldani látszólag:Range("A5:RG5", Range("A5:RG5").End(xlDown)).Select
Ez akkor jó, ha tudod biztosan, hogy melyik az utolsó oszlopod és abban az oszlopban minden cella ki van töltve.
Egyébként ebben a kódban nem tudom mit jelent a második range értéke.
Melyik kódra gondoltál? Arra amit most használsz vagy arra amit küldtem?
Amit most írtál, abban az RG oszlop 5-től lefelé a folyamatosan kitöltött utolsó cellát jelenti.
Az enyémhez fentebb írtam a magyarázatot.
Üdv. -
Fferi50
őstag
válasz ReSeTer #45459 üzenetére
Szia!
Itt találod az End magyarázatát
Gyakorlatilag azt csinálja, mint amikor egy cellán állva az End billentyűt használod a nyíl billentyűk előtt a gyorsabb mozgáshoz. Alapvetően 1 db cellából kiindulva használható, de nem haragszik meg akkor sem, ha tartományt adtál meg - úgy mint te, de ebben az esetben a tartomány első cellája lesz a kiindulási alap. Tehát a második Range egy cella lehet.
Ha megfigyeled az End billentyű működését, láthatod, hogy az utána következő nyíl billentyű az azonos fajtájú - kitöltött/üres - cellasor végére/elejére ugrik.
Mindig a kiválasztott cella sorában/oszlopában mozog. A te esetedben az A5 cellából indul lefelé és az utolsó még kitöltött cellát adja meg. Ha lenne közte üres cella, akkor csak addig ugrana le. (Próbáld ki, hogy kitörölsz átmenetileg pár cellaértéket.)
Amennyiben a többi oszlopban az A oszlopnál lejjebb is van még adat, ez akkor sem ad megfelelő értéket - a többi oszlop adata túl fog lógni a kiválasztott soron/területen.
Ezért kell megnézni az adatokat, képleteket tartalmazó cellákat.
Üdv.[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz ReSeTer #47611 üzenetére
Sub Talalat()
Dim talal
On Error Resume Next
talal = Application.Match(Range("G1"), Columns(1), 0)
If VarType(talal) = vbError Then
MsgBox "Nem található a G1 cella értéke az A oszlopban", vbInformation, "Hiányzó szöveg"
Else
MsgBox "G1 cella tartalmának sorszáma az A oszlopban: " & talal, vbInformation, "Sorszám"
End If
On Error GoTo 0
End Sub
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz ReSeTer #47615 üzenetére
A talal változóban van. Ha nincs találat, akkor hibára fut.
Az Igaz ágba betehetsz egy exit sub-ot, hogy ne akadjon ki a makró. Az Else ágban az üzenet helyett felhasználhatod a változó értékét.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz ReSeTer #47617 üzenetére
Betettem két soremelést az Else ágba, hogy feltünőbb legyen a sorszám.
Sub Talalat()
Dim talal
On Error Resume Next
Columns(2).ClearContents 'A későbbi beírás miatt törlöm a B oszlop adatait
talal = Application.Match(Range("G1"), Columns(1), 0)
If VarType(talal) = vbError Then
MsgBox "Nem található a G1 cella értéke az A oszlopban", vbInformation, "Hiányzó szöveg"
On Error GoTo 0
Else
MsgBox "G1 cella tartalmának sorszáma az A oszlopban: " & vbLf & vbLf & talal, vbInformation, "Sorszám"
'Itt felhasználjuk a talal változó értékét
Range("B" & talal) = "Ebben a sorban van a G1 cella értéke"
End If
End Sub
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
válasz ReSeTer #47641 üzenetére
Szia!
A hibaüzenet - Type Mismatch - azt jelenti, hogy nem azonos típusú adatokkal szeretnél műveletet végezni. Ahogyan írtad is, a talalatsorszama változód értéke HIBA, hibához pedig nem lehet hozzáadni számot.
További megjegyzés:
A Match által visszaadott sorszám mindig a vizsgált tartományra vonatkozik.
Pl. Ha azA1:A100
tartományra ad vissza 2-t, akkor az A2 celllában van a találat.
Ha azA2:A100
tartományt vizsgálod és ott 2 az eredmény, akkor az A3 cellában van a találat,í mert az a tartomány 2. cellája!
A keresés ismétlésénél így a képleted szerint az A (2+1=3) cellától fog indulni a keresés, aminek az eredménye 1 lesz ---> vagyis a találatod ugyanabban az A3 cellában lesz.
Mivel most a találatsorszama eredménye 1, ezért a képleted alapján a következő keresési tartomány az A (1+1=2) cellától indul. Ez így szép kis végtelen ciklussá alakul át.
Vagyis meg kell jegyezned, hogy az előző találatnál honnan indult a keresési tartomány és abból az értékből kiindulva kell a következő keresési tartomány kezdő értékét beállítani.
Még egy megjegyzés:
Szerintem érdemes megnézned a Range Find metódusát is. Ez megkeresi a feltételnek megfelelő cellát és annak a sorát megkaphatod a Row tulajdonsággal. Jó kis példa is van a folytatólagos keresésre a HELP-ben. [link]
Üdv. -
Fferi50
őstag
válasz ReSeTer #47893 üzenetére
Szia!
Természetesen lehet. Paraméteresként kell létrehoznod a "sablon" eljárást (vagy függvényt ez utóbbi esetben tudsz értéket visszakapni.)
Itt nézhetsz utána hogyan kell
Üdv.[ Szerkesztve ]
-
sztanozs
veterán
válasz ReSeTer #48249 üzenetére
Mik a hibák?
Illetve próbáld meg egyesével hozzáadni a Watches ablakhoz a az összes szintet, és nézd meg, hol veszik el a referencia:wordapp
wordapp.ActiveDocument
wordapp.ActiveDocument.Sections
wordapp.ActiveDocument.Sections.Item(1)
wordapp.ActiveDocument.Sections.Item(1).Footers
wordapp.ActiveDocument.Sections.Item(1).Footers(wdHeaderFooterPrimary)wordapp.ActiveDocument.Sections.Item(1).Footers(wdHeaderFooterPrimary).Range
wordapp.ActiveDocument.Sections.Item(1).Footers(wdHeaderFooterPrimary).Range.Text
wordapp.Selection
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Új hozzászólás Aktív témák
- Autóápolás, karbantartás, fényezés
- Battlefield 2042
- HTPC (házimozi PC) topik
- Hogy is néznek ki a gépeink?
- Elektromos cigaretta 🔞
- Milyen okostelefont vegyek?
- Politika
- Építő/felújító topik
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Luck Dragon: Asszociációs játék. :)
- További aktív témák...