- Garmin Forerunner 970 - fogd a pénzt, és fuss!
- Apple iPhone 16 Pro - rutinvizsga
- Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- Honor Magic6 Pro - kör közepén számok
- A sógorokhoz érkezik a kompakt Vivo X200 FE
- Magisk
- Xiaomi 14T - nem baj, hogy nem Pro
- Csak semmi szimmetria: flegma dizájnnal készül a Nothing Phone (3)
- QWERTY billentyűzet és másodlagos kijelző is lesz a Titan 2-ben
- Honor Magic5 Pro - kamerák bűvöletében
-
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
válasz
Delila_1 #29427 üzenetére
Közben rájöttem (és megint tanultam valamit) hogy a rng_Dkioszt és rng_Akioszt objektumváltozó deklarálásával volt gond. Én azt gondoltam (helytelenül) ha én pl deklarálom - hogy a példáddal éljek -
Set rng_Dkioszt = Range("E2:E15")
tartományt akkor ott pl az E2 cellának a .Row tulajdonsága 1 lesz hiszen abban a tartományban az az 1. sor. Na hát ez nagyon nem így van.Köszi a választ!
-
m.zmrzlina
senior tag
For Each rng_Tempcell In rng_Dkioszt
If rng_Tempcell.Value = int_Csomag Then
If rng_Tempcell.Value <> "" And rng_Akioszt.Cells(rng_Tempcell.Row, 1).Value = "" Then
If Application.WorksheetFunction.CountIf(rng_Csatkimarad, ws_Kabelo.Cells(rng_Tempcell.Row, 1).Value) = 0 Then '
str_kodsor_csatlist = str_kodsor_csatlist & Trim(ws_Kabelo.Cells(rng_Tempcell.Row, 1).Value) & " + "
End If
End If
End If
NextA fenti programrészlettől a következőket várnám:
-menjen végig az rng_Dkioszt nevű tartomány összes celláján
-ha az rng_Akioszt tartományban a vizsgált cellával azonos sorban különbözőséget talál akkor történjen valamiA probléma, hogy a
If rng_Tempcell.Value <> "" And rng_Akioszt.Cells(rng_Tempcell.Row, 1).Value = "" Then
feltételnél amikor a rng_Tempcell.Value még csak az x-dik sor értékét tartalmazza akkor a rng_Tempcell.Row már az X+1-dik sor számát tartalmazza. Másképpen ha a rng_Tempcell.Value=1 a rng_Tempcell.Row=4. Vagyis nem annak az elemnek az értékét adja vissza amit vizsgál hanem az egyel korábbit.
Mitől lehet ez?
-
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.
-
m.zmrzlina
senior tag
Tartományt szeretnék definiálni objektumváltozóként.
Ez működik:
Set ws_Csatorna = wb_SPSS_scb.Worksheets("csatorna")
Set rng_Csatkimarad = ws_Csatorna.Range("A1:A101")Ez nem:
rng_Akioszt = ws_Kabelo.Range(str_Akioszt & "2:" & str_Akioszt & int_usor)
rng_Dkioszt = ws_Kabelo.Range(str_Dkioszt & "2:" & str_Dkioszt & int_usor)Ez szintén működik:
rng_Akioszt = ws_Kabelo.Range(str_Akioszt & "2:" & str_Akioszt & int_usor).Select
rng_Dkioszt = ws_Kabelo.Range(str_Dkioszt & "2:" & str_Dkioszt & int_usor).SelectMi lehet a baj?
-
m.zmrzlina
senior tag
válasz
pirit28 #29304 üzenetére
Ahhoz munkalaphoz rendeld amin az adataid vannak!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
If Target.Value = "" Then
Target.Offset(0, 1).Value = ""
ElseIf Target.Value = "*hatroff*" Or Target.Value = "*Győr*" Or Target.Value = "*(OE)*" _
Or Target.Value = "*Ford*" Or Target.Value = "*Pors*" Or Target.Value = "*BMW*" _
Or Target.Value = "*AUDI*" Or Target.Value = "*hmmc*" Or Target.Value = "*kms*" _
Or Target.Value = "*Sassenburg*" Or Target.Value = "*Figueruelas*" Or Target.Value = "*Grossmehring*" _
Or Target.Value = "*Sindelfingen*" Or Target.Value = "*Bremen*" Or Target.Value = "*Koeln*" _
Or Target.Value = "*Voelklingen*" Or Target.Value = "*Seat*" Or Target.Value = "*emden*" _
Or Target.Value = "*Genk*" Or Target.Value = "*Daventry*" Or Target.Value = "*VW*" _
Or Target.Value = "*Benz*" Or Target.Value = "*Swarzedz*" Or Target.Value = "*Hannover*" Then
Target.Offset(0, 1).Value = "OE"
ElseIf Target.Value = "*WH*" Or Target.Value = "*W/H*" Then
Target.Offset(0, 1).Value = "W/H"
Else
Target.Offset(0, 1).Value = "DFC"
End If
End If
End Sub -
m.zmrzlina
senior tag
válasz
pirit28 #29300 üzenetére
Nem derült ki a kérdésből, hogy melyik cella tartalmát kell módosítania a képletnek ezért én a D11-es cellára írtam meg a makrót.
Próbáld ki jól fejtettem-e vissza a képletet!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("C11").Value = "" Then
Range("D11").Value = ""
ElseIf Range("C11").Value = "*hatroff*" Or Range("C11").Value = "*Győr*" Or Range("C11").Value = "*(OE)*" Then
Range("D11").Value = "OE"
ElseIf Range("C11").Value = "*WH*" Or Range("C11").Value = "*W/H*" Then
Range("D11").Value = "W/H"
Else
Range("D11").Value = "DFC"
End If
End SubA második ág ahogy látod nem teljes, ha így azt csinálja amit szeretnél akkor ki lehet egészíteni.
-
m.zmrzlina
senior tag
válasz
Reinhardt #29275 üzenetére
Részlet a topik Téma összefoglalójából:
– Modulba írás: Alt+F11-re bejön a makró szerkesztő. Bal oldalon ki kell választani a füzetet, majd az Insert | Module menüpontokkal új modult kapunk, ami a bal oldalon látszik, és ki van jelölve. A jobb oldali nagy üres mezőbe kell bemásolni a fórumon kapott makrót. Visszalépve a füzetbe az Alt+F8 előhoz egy párbeszéd ablakot, itt tudjuk kiválasztani és indítani a makrót.
Az angol nyelv itt most nem számít.
-
m.zmrzlina
senior tag
válasz
Reinhardt #29271 üzenetére
Ez is valami hasonló, csak ez nem nyomtat, hanem létrehozza a munkalapot amit neked kell kinyomtatni.
Sub letrehoz()
k = 1
For i = 1 To 50
Sheets("Munka1").Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = i
For j = 4 To 22 Step 2
Sheets(Sheets.Count).Range("G" & j).Value = k
k = k + 1
Next
Next
End Sub -
m.zmrzlina
senior tag
válasz
coldfirexx #29251 üzenetére
Én közismerten hajlamos vagyok verébre is makróval lőni de szerintem itt ne ragaszkodj a makrós megoldáshoz. Egyszerűen szűrd le a tartományt a H oszlop IGEN értékeire azután az F oszlop értékeit másold a kívánt helyre. Szerintem ettől egyszerűbb megoldást nem találsz.
-
m.zmrzlina
senior tag
válasz
Fferi50 #29036 üzenetére
Köszi a választ sokat segítettél bár a végeredmény csak nagyon kicsit hasonlít a te tippedre. Ez volt az első verzió:
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)) And Cells(xx, 1).Value = Cells(xx - 1, 1).Value + 1 Then Exit For
Rows(xx).EntireRow.Delete
Next
End SubEzt azonban sok olyan konfiguráció át tudta ejteni ami szemét ugyan de át tudott menni a ciklusban lévő vizsgálaton. Pl a két vagy több utolsó szemét sor első cellája üres, vagy csökkenő sorszámozású.
Aztán a másik hiba indikátorra fókuszáltam ti. hogy a hibás sorokban /az eddigi tetöltéseket nézve legalábbis/ mindig van egy üres cella, és 2-3 sornál soha nincs több szemét sor. Ez lett a vége:
Sub tisztit()
Dim holavege As Long, i As Long, j As Integer
holavege = ActiveSheet.UsedRange.Rows.Count
For i = holavege To holavege - 10 Step -1
For j = 1 To 16
If Cells(i, j) = "" Then
Rows(i).EntireRow.Delete
Exit For
End If
Next
Next
End SubLehet, hogy a vége a kettő kombinációja lesz mert ha kiderül, hogy van olyan sor aminek mind a 16 cellájában van adat de az valamiért hibás abban az esetben ez sem tökéletes.
Köszi a tippedet. Vesszen a .Select!
-
m.zmrzlina
senior tag
válasz
Fferi50 #29031 üzenetére
Ez a megoldás azért nem jó mert pl az első képen az utolsó sor is számmal kezdődik de az már szemét kategória mert az eredeti szoftverben a táblázat véget ér az 1781. sornál.
Két szabályszerűséget figyeltem meg eddig. Az egyik amit már írtam, hogy ahol a sorszámozás folytonossága megszakad ott a vége az eredeti táblázatnak illetve hogy a hibás sorokban mindig van legalább egy üres cella, de rendszerint több is.
(A select- eket pedig próbáld meg elfelejteni.)
Pontosan ebben a felejtésben szeretném a segítségeteket kérni.
-
m.zmrzlina
senior tag
Problémám a következő:
Adott egy szoftver amiben a szoftver által előállított táblázatot egy parancsgombbal vágólapra lehet tenni. A táblázat fixen 16 oszlop széles és változó /1700-1800/ sor hosszú. A vágólapra kitett adatot excel munkalapra illesztem további feldolgozásra.
Az a gondom, hogy /nyilván a forrás szoftver hibájából/ a beillesztett tartomány végénre teljesen véletlenszerűen néhány cellában a képeken látható memóriaszemét kerül ami a további feldolgozásban problémákat okoz.
A feladat az, hogy a további feldolgozás előtt ezt a szemetet kitöröljük. Az A oszlop sorszámozást tartalmaz és eddigi tapasztalataim alapján ahol a sorszámozás folytonossága megszakad ott van vége a hasznos adatnak.
Hirtelen az alábbi Móricka megoldás jutott eszembe:
Sub holavege()
Range("A2").Select
Do While ActiveCell.Offset(1, 0) = ActiveCell + 1
ActiveCell.Offset(1, 0).Select
Loop
Range(Cells(ActiveCell.Row + 1, 1), Cells(ActiveCell.Row + 10, 16)).ClearContents
End SubEhelyett kéne egy profibb megoldás. Előre is köszi at ötleteket.
-
m.zmrzlina
senior tag
válasz
the radish #28786 üzenetére
Szivesen.
-
m.zmrzlina
senior tag
válasz
the radish #28782 üzenetére
Próbáld a következő egyéni formátumkóddal:
000;-00
-
m.zmrzlina
senior tag
Hogyan tudom beállítani az AutoFit tulajdonságot egy cellára?
Nem a sor/oszlop azonosítók közti duplakattra gondolok, hanem hogy automatikusan történjen az AutoFit ha szükség van rá. Régen volt ilyen egy munkalapomon de nem tudom hogyan lehet beállítani.
-
m.zmrzlina
senior tag
válasz
RedHarlow #28686 üzenetére
Feltételezem, nincsen olyan emailcím az 1000 között aminek azonos az első öt karaktere. Ez esetben csinálj egy segédoszopot, modjuk az E oszlopba a következő képlettel:
E1 képlete:=BAL(A1;5)
Ezt másold le az email címlista aljáig. Azután akár el is rejtheted az oszlopot.C1 képlete:
=HAHIBA((INDEX(A:A;HOL.VAN(B1;E:E;0)));"")Ezt másold le a C20-ig. /vagy addig amennyi rövidítésed van/
Ha mégis van olyan email cím aminek azonos az első öt karaktere akkor az első előfordulást fogja eredményként adni.
-
m.zmrzlina
senior tag
válasz
poffsoft #28655 üzenetére
Az XP-ig része volt a windowsnak egy clipboard viewer de ez úgy tudom a win7-től már nincs. Gondolom vannak ingyenes külső programok a neten erre a célra.
A képet nem tudom milyen formában akarod használni de a szokványos cellatartalmat a szokványos módon lehet hozni-vinni. A teljes sor is egy Range
-
m.zmrzlina
senior tag
válasz
elttiL #28650 üzenetére
Akkor még egy javítás. Ha a :
holavege = Range("A:A").Find(What:="beillesztési pont", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
változatot választod akkor a "beillesztési pont" részt írd át "XXX"-re. Én azt gondoltam, hogy a beillesztési pont maga a cellaérték. Nyilván ezt nem fogja megtalálni ha XXX-szel van megjelölve a vége.
Még egy dolog: ha aaz XXX minden esetben az utolsó sorban van akkor a
holavege = Range("A" & Rows.Count).End(xlUp).Row
változat is működik.
-
m.zmrzlina
senior tag
válasz
elttiL #28644 üzenetére
Bocs én voltam a béna.
A:
holavege = Selection.Find(What:="beillesztési pont", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Rowsor helyesen így néz ki:
holavege = Range("A:A").Find(What:="beillesztési pont", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
Ekkor nem az aktuális kijelölésben keres hanem az A oszlopban.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #28647 üzenetére
De ha így próbálod meghatározni az utolsó sort az is működhet.
Sub beilleszt()
holavege = Range("A" & Rows.Count).End(xlUp).Row
Worksheets("Munka1").Range("A" & holavege).PasteSpecial Paste:=xlPasteAll
End SubEz persze csak akkor működik, ha a Beillesztési pont mindig az A oszlop legutolsó cellájában van.
-
m.zmrzlina
senior tag
válasz
elttiL #28644 üzenetére
Ez volt az eredeti kérdésben:
A cellába be van írva, hogy "Beillesztési pont". Ez az A oszlopban bárhol lehet, ide kerül beillesztésre a vágólapon levő tábla
Ez a mostani állapot:
Töküres táblában próbáltam ki,
Azért akad ki mert a töküres táblában sehol nem találja a "Beillesztési pont" cellaértéket.
Azt írod:
no ennek a vágólapon levő táblának az utolsó A oszlopos cellája ugyancsak tartalmazza a "Beillesztési pont" tartalmat,
Írd be az üres táblába A1-be hogy "Beillesztési pont" /kisbetű-nagybetűre figyelj!!!/ és úgy próbáld. Az első beillesztett tartalom után ez már nem fog problémát okozni.
-
m.zmrzlina
senior tag
válasz
elttiL #28634 üzenetére
Próbáld ezt:
Sub beilleszt()
holavege = Selection.Find(What:="beillesztési pont", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
Worksheets("Munka1").Range("A" & holavege).PasteSpecial Paste:=xlPasteAll
End SubTermészetesen a Munka1 helyére írd a saját munkalapod nevét!
-
m.zmrzlina
senior tag
Sőt így talán jobb mert a nullával való osztás nem okoz problémát ha nincsen kitöltve a dbszám/doboz oszlop.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 4 And Target.Row <= 11 Then
Application.EnableEvents = False
If Target.Column = 2 Then
Cells(Target.Row, 4).Value = Cells(Target.Row, 2).Value / 1.044
On Error Resume Next
Cells(Target.Row, 6).Value = Cells(Target.Row, 2).Value / Cells(Target.Row, 5)
ElseIf Target.Column = 4 Then
Cells(Target.Row, 2).Value = Cells(Target.Row, 4).Value * 1.044
On Error Resume Next
Cells(Target.Row, 6).Value = Cells(Target.Row, 2).Value / Cells(Target.Row, 5)
ElseIf Target.Column = 6 Then
Cells(Target.Row, 2).Value = Cells(Target.Row, 6).Value * Cells(Target.Row, 5)
Cells(Target.Row, 4).Value = Cells(Target.Row, 2).Value / 1.044
End If
Application.EnableEvents = True
End If
End Sub -
m.zmrzlina
senior tag
Le kell tiltani az eseménykezelést:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 4 And Target.Row <= 11 Then
Application.EnableEvents = False
If Target.Column = 2 Then
Cells(Target.Row, 4).Value = Cells(Target.Row, 2).Value / 1.044
Cells(Target.Row, 6).Value = Cells(Target.Row, 2).Value / Cells(Target.Row, 5)
ElseIf Target.Column = 4 Then
Cells(Target.Row, 2).Value = Cells(Target.Row, 4).Value * 1.044
Cells(Target.Row, 6).Value = Cells(Target.Row, 2).Value / Cells(Target.Row, 5)
ElseIf Target.Column = 6 Then
Cells(Target.Row, 2).Value = Cells(Target.Row, 6).Value * Cells(Target.Row, 5)
Cells(Target.Row, 4).Value = Cells(Target.Row, 2).Value / 1.044
End If
Application.EnableEvents = True
End If
End Sub -
m.zmrzlina
senior tag
Próbáld ki ezt:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 12 Then
If Target.Column = 7 Or Target.Column = 8 Then
On Error Resume Next
Cells(Target.Row, 9).Value = Cells(Target.Row, 7).Value * Cells(Target.Row, 8).Value
Exit Sub
ElseIf Target.Column = 9 Then
On Error Resume Next
Cells(Target.Row, 8).Value = Cells(Target.Row, 9).Value / Cells(Target.Row, 7).Value
Exit Sub
End If
End If
End Sub -
m.zmrzlina
senior tag
Elsőre az alábbi Móricka megoldás jutott eszembe:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$3" Or Target.Address = "$H$3" Then
Range("I3").Value = Range("G3").Value * Range("H3").Value
Exit Sub
ElseIf Target.Address = "$I$3" Then
Range("H3").Value = Range("I3").Value / Range("G3").Value
Exit Sub
End If
End SubG3-ban van az ár, H3-ban a darabszám, I3-ban pedig az árbevétel. Ha az árbevételt változtatod akkor az árat fixnek tekinti és a darabszámot adja meg ami az adott áron "belefér" a keretbe.
A makrót az adott munkalaphoz kell rendelni amin a kérdéses cellák vannak és .xlsm-ként elmenteni.
Rémlik még valami Célérték keresés nevű dolog az excelben ami ilyesmire való de azt én még nemigen használtam.
-
m.zmrzlina
senior tag
válasz
Claude Leon #28565 üzenetére
Mi történik, ha nem kézzel írod be a $-t hanem F4-gyel?
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz
Snoop-y #28286 üzenetére
Én kivárnám amíg megtudunk több részletet, minek lövöldözzünk vaktában.
Köztünk Delila az aki úgy szokott komplett megoldásokat adni, hogy a hiányzó információkat legenerálja
(És még csak nem is haragszik, ha újra és újra át kell írnia a megoldást a csöpögtetett információk alapján)
A CONCATENATE-tal szerintem az lesz a gond, hogy ha a másik munkalapról átvett adatokkal mondjuk számolni akarunk a Munka 1-en akkor az nehézségekbe fog ütközni. De persze ezt is csak feltételezem
-
m.zmrzlina
senior tag
válasz
Snoop-y #28284 üzenetére
Teljesen jól látod én csak egy elméleti mintát adtam. Egyenlőre azt sem tudjuk hogy a Munka1 munkalapon /nála biztosan nem ez a neve/ hol kéne megjelennie a másik munkalap cellaértékeinek.
Egyébként az INDEX-MATCH párost rengeteg szakmai fórumon ajánlják a VLOOKUP kiváltására mert sokkal flexibilisebb.
-
m.zmrzlina
senior tag
válasz
be.cool #28278 üzenetére
A megoldás nem Ctrl+C - Ctrl+V kompatibilis mert a te munkafüzeted biztosan máshogy néz ki de az elv használható: /a szerkesztőlécen a C1 képletét látod/
A a képlet HOL.VAN(Munka1!A1;Munka2!A:A;0) része megadja, hogy a Munka2 munkalapon melyik sorban van az "A1" cella értéke, az INDEX() fv pedig visszaadja ennek a sornak és a 10. oszolp (ami esetünkben a J oszlop) metszéspontjában lévő cella értékét.
A =HAHIBA() pedig kiirtja a ronda #HIÁNYZIK-ot a Munka1 munkalapról ha Munka1 A oszlopában olyan érték van amit nem talál a Munka2 munkalapon.
-
m.zmrzlina
senior tag
válasz
Fferi50 #27429 üzenetére
Így jön létre a két változó:
str_Teljesnev = Application.GetOpenFilename
If str_Teljesnev = "False" Then
Exit Sub
ElseIf Mid(str_Teljesnev, (InStrRev(str_Teljesnev, "\") + 1), 9) <> Left(str_Szolgnev, 9) Then
MsgBox "Rossz fájlt választottál!"
Exit Sub
Else
Set wb_Temp = Workbooks.Open(str_Teljesnev)
End If
wb_Temp.Worksheets(1).Name = str_MunkalapA
wb_Temp.Worksheets(2).Name = str_MunkalapD
'kabelo munkalapot létrehoz
wb_Temp.Worksheets(str_MunkalapA).Copy before:=wb_Temp.Worksheets(1)
wb_Temp.Worksheets(1).Name = "kabelo"
Set ws_Kabelo = wb_Temp.Worksheets("kabelo") -
m.zmrzlina
senior tag
Köszi szépen ez is egy jó irány és használható is számomra de továbbra is szeretném megérteni, hogy miért nem megy a tömb értékadás.
Lehet hogy használom is majd a módszert de ez a problémamegoldás a következő viccet juttatja eszembe:
A rendőr közlekedési balesetnél veszi fel a jegyzőkönyvet: "Egy kézfej az árokban. Egy fül a szalagkorláton. Egy fej az úttesten." Amikor ideér, kiabálni kezd:
- Főnök, főnök! Az úttest az egy té vagy két té?
- Nem tudom.
- Jó - válaszol a rendőr, a fejet széles ívben berúgja az árokba. Tovább ír: "Egy fej az árokban". -
m.zmrzlina
senior tag
válasz
Delila_1 #27424 üzenetére
Érdekes mert egy korábbi verziójában a makrónak ez az értékadés csont nélkül lefut:
Dim arrAnalist() As Variant
Dim arrDigilist() As Variant
Dim intHibakszama As Integer
Dim strHibahely As String
Dim intI As Integer
Set wbSpss_kod = ThisWorkbook
Set wsSyntax = wbSpss_kod.Worksheets("SPSS_syntax")
Set wsKabelo = wbSpss_kod.Worksheets("kabelo")
intDigitlista_oszlop = wsSyntax.Range("AB3").Value
intListahossz = wsSyntax.Range("AC3").Value
arrAnalist() = wsKabelo.Range("A2:A" & intListahossz)
arrDigilist() = wsKabelo.Range(wsKabelo.Cells(2, intDigitlista_oszlop), wsKabelo.Cells(intListahossz, intDigitlista_oszlop))Próbáltam igy is átírni az újat de az sem működik.
-
m.zmrzlina
senior tag
válasz
Delila_1 #27424 üzenetére
Ez igaz csak többféle listáról van szó és az összehasonlítani kívánt tartományok hossza változhat illetve a második oszlop mindig máshol van.
Ezért van változóban a tartományok határainak egy része. Ráadásul a munkalapokon (sok-sok)minden mást makró csinál ezért gondolkozom makróban. Valamint az ellenőrzést a makró többi részétől függetlenül is le kell tudni futtatni és nem akarok minden munkaapot felképletezni (nincs is rá lehetőség illetve nem egyszerű.
Ez most makrós feladat.
-
m.zmrzlina
senior tag
A problémám a következő: össze kell hasonlítani kér oszlop tartalmát (cellánként egy egy szöveges érték és ha van közöttük különbség akkor a helyet ahol hiba van és a hibák darabszámát egy MsgBox-ban a felhasználó tudomására hozni.
Úgy próbálkozom, hogy tömb változóba írom a két tartományt és a tömb elemein végzem az összehasonlítást de az értékadásnál a "Object doesn't support this property or method." hibaüzenetet kapom
arr_Analist() = wb_Temp.ws_Kabelo.Range(Cells(2, 1), Cells(int_usor, 1))
arr_Digilist() = wb_Temp.ws_Kabelo.Range(Cells(2, int_uoszlop + 1), Cells(int_usor, int_uoszlop + 1))
For intI = 1 To UBound(arr_Analist)
If Trim(arr_Analist(intI, 1)) <> Trim(arr_Digilist(intI, 1)) Then
int_Hibakszama = int_Hibakszama + 1
str_Hibahely = str_Hibahely & intI + 1 & ".sor, "
End If
Next
If int_Hibakszama > 0 Then
MsgBox "Összesen " & int_Hibakszama & " különbség a következő helye(ke)n: " & str_Hibahely
Else
MsgBox "A két lista azonos."
End If -
m.zmrzlina
senior tag
válasz
Delila_1 #26809 üzenetére
Gyanítom, hogy ez valami hibás mentés eredménye lehet.
A hibás oszlopban ugyanis (mint alaposabban megnézve kiderült) egy szűrés eredményét látom de úgy hogy a sorok sorszámozása teljesen folyamatos nem a szűréskor megszokott -"csak a látható sorok sorszámai követik egymást" mintájú.
Ráadásul a C oszlop Szűrés menüjét lenyitva nem is szüntethető meg a szűrés, hogy a teljes adatot lássam.
Ahogy elnézem itt jelentős adatvesztés is van, le kell gyártani a munkafüzetet újra.Köszi a segítséget!
-
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #26802 üzenetére
Ezekbe a munkafüzetekbe előszeretettel illesztenek be webes felületről esetleg pdf-ből Ctrl+C-Ctrl+V-vel kisebb nagyobb adatmennyiségeket.
-
m.zmrzlina
senior tag
Adott egy munkafüzet 5 munkalappal. A fájl mérete 22MB. Van adat a munkalapokon bőven, de nem annyi ami ekkora fájlméretet indokolna.
Ha az összes munkalap minden cellájának a formátumát átállítom Általános-ra akkor a fájlméret 5MB lesz. Ezt a méretet még mindíg nem indookolja a munkalapokon lévő adat. Képletek sincsenek - legalábbis nem többmillió cellában.
Ha a cellák háttérszíneit átállítom Nincs kitöltésre nem változik a fájlméret.
Ha egy adott munkalapot kitörlök a munkafüzetből akkor a fájl 300kB körüli lesz.
Mi okoznat ilyen indokolatlanul nagy fájlméretet?
-
m.zmrzlina
senior tag
Feladat a következő.
Le kell ellenőrizni, hogy egy adott munkafüzet meg van-e nyitva. Elérési útja a fájlnévvel együtt a makrót tartalmazó munkafüzetben egy cellában rendelkezésre áll.
Ha meg van nyitva akkor egyik munkalapját deklarálni kell mint objektumváltozót:
Set ws_Akármi = megnyitottmunkafüzet.Worksheets("akármi")
ha nincsen megnyitva akkor előbb megnyitni és utána deklarálni a változót.
Mi ennek a legrövidebb módja?
-
m.zmrzlina
senior tag
válasz
Agostino #25728 üzenetére
Az alábbi pár sor a kijelölt tartomány minden cellájában leellenőrzi, hogy van-e "!" (felkiáltójel) és ha van akkor egy "*" (csillag v. szorzásjel) karaktert tesz a cellatartalom elejére és végére.
For Each cella In Selection.Cells
If InStr(1, cella.Value, "!") <> 0 Then
cella.Value = "*" & cella.Value & "*"
End If
Next -
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz
Fferi50 #25465 üzenetére
"(De az is csak annyiszor kell lefusson, ahány gyümölcsneved van és nem az egész tartomány cellaszámának megfelelően.)"
Igen de változás esetén itt ugyanúgy át kell írni az egész kódrészletet mint a Select Case-nél, a másodiknál viszont csak a rng_gyümölcsök listát a másik munkafüzetben. Ehhez pedig nem kell tudni programozni és ez volt a cél.
Köszi még egyszer!
-
m.zmrzlina
senior tag
válasz
Fferi50 #25463 üzenetére
Köszönöm eltettem a megoldásokat.
Az első replace-es megoldás most azért nem jó nekem mert pont azt a célt nem valósítja meg ami miatt a Select Case-es szerkezetet le akarom cserélni. A második természetesen jó lesz.
A valódi makróban nem használok ékezetet az csak a illusztrációba került bele.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #25459 üzenetére
Ha az objektumváltozót a következőképpen deklarálom akkor megy:
Set rng_gyümölcsök = Workbooks("forrásadatok.xlsx").Names("gyümölcsök").RefersToRange
Set wsKabelo = ActiveSheet
For Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
rngCella.Value = Application.WorksheetFunction.VLookup(rngCella.Value, rng_gyümölcsök, 2, 0)
End If
Next -
m.zmrzlina
senior tag
Adott egy tartomány (pl C2:C120) amiben kb 100 darab elem (szöveg) van. A 100 elem 5 különböző értéket vehet fel, vannak üres cellák és értelemszerűen az 5 féle elem mindegyike többször is előfordul.
Az a feladat, hogy le kell cserélni minden elemet egy számra, azonos szöveget azonos számra.
Ezt eddig így csináltam:For Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
If UCase(rngCella.Value) = "ALMA" Then
rngCella.Value = 1
ElseIf UCase(rngCella.Value) = "KORTE" Then
rngCella.Value = 2
ElseIf UCase(rngCella.Value) = "BANÁN" Then
rngCella.Value = 3
ElseIf UCase(rngCella.Value) = "NARANCS" Then
rngCella.Value = 4
ElseIf UCase(rngCella.Value) = "CITROM" Then
rngCella.Value = 5
End If
End If
NextEz rendben működik de több ilyen lista van amelyek ráadásul folyamatosan változnak, tehát nem a legjobb ötlet beleírni a kódba fixen a neveket és a csereértékeket.
Felvittem az összes listát egy másik munkafüzetbe két oszlopból álló tartományokba, majd elneveztem ezeket a tartományokat a Névkezelővel. Ezekben a tartományokban szeretnék keresni makróból a VLOOKUP() fv-nyel a következőképpen:
For Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
rngCella.Value = Application.WorksheetFunction.VLookup(rngCella.Value, _
Workbooks("forrásadatok.xlsx").Names("gyümölcsök"), 2, 0)
End If
Nextesetleg így:
Set rng_gyümölcsök = Workbooks("forrásadatok.xlsx").Names("gyümölcsök")
Set wsKabelo = ActiveSheetFor Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
rngCella.Value = Application.WorksheetFunction.VLookup(rngCella.Value, _
rng_gyümölcsök, 2, 0)
End If
NextSajnos egyik sem működik. Mit szúrok el?
-
m.zmrzlina
senior tag
válasz
alfa20 #25354 üzenetére
Ez a megoldás nem foglalkozik azzal, hogy milyen nevet kapott a "keresztségben" az új munkalap egyszerűen a sorban a második munkalappal végzi a műveletet:
Sub ful_torol()
regi = ActiveSheet.Name
Sheets(regi).Copy After:=Sheets(1)
Sheets(2).Name = "leotom"
'makró... blabla
Sheets("leotom").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub -
m.zmrzlina
senior tag
Ha jól értem, vannak értékpárjaid (min,max) amit átlagolni szeretnél, majd az átlagok átlagjait számolni.
Ez esetben egy értékpár csak akkor hagyható figyelmen kívül, ha min=0 ÉS max=0 mert min=0, max=100 esetében a vizsgált időszak átlaga 50
Ha így van én egy segédoszlopot használnék ahová kiszámítanám a részátlagokat (ami min=0 ÉS max=0 esetén simán lehet 0) majd azokat átlagolnám az =ÁTLAGHA()-val
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz
Certee #25228 üzenetére
Munka1 munkalap A oszlopában vannak a cikkszámok, B oszlopban az árak (vagy a cikkszámhoz tartozó másféle adat). Munka2-n ugyanilyen szerkeztetben a másik beszállító dolgai.
Munka3 B2 cellájának képlete:
=HAHIBA(FKERES(A2;Munka1!A:B;2;0);HAHIBA(FKERES(A2;Munka2!A:B;2;0);"A megadott cikkszám nincs a listában!"))
Munka3 A2 cellájába viszed be a keresett cikkszámot és a B2-ben kapod meg a hozzá tartozó adatot függetlenül attól, hogy melyik munkalapon találta meg a cikkszámot.
Ha nem létező cikkszámot adsz meg, vagy elgépeled - ami ugyanaz
- akkor hibaüzenetet ad.
Új hozzászólás Aktív témák
Hirdetés
- Kerékpárosok, bringások ide!
- Garmin Forerunner 970 - fogd a pénzt, és fuss!
- Autós topik látogatók beszélgetős, offolós topikja
- Nagyon erős ajánlattá kezd válni a SteamOS
- Apple iPhone 16 Pro - rutinvizsga
- Milyen billentyűzetet vegyek?
- Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- Gaming notebook topik
- Mini-ITX
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- További aktív témák...
- Assassin's Creed Shadows Collector's Edition PC
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Bomba ár! HP EliteBook 8460P - i5-2GEN I 4GB I 320GB I DVD I 14" HD I W10 I Garancia!
- AKCIÓ! Intel Core i7 7700K 4 mag 8 szál processzor garanciával hibátlan működéssel
- BESZÁMÍTÁS! MSI B450M R5 3600 16GB DDR4 512GB SSD RTX 2060 Super 8GB THERMALTAKE Core V21 500W
- Microsoft Surface Book 3 - 15 col, i7, 32GB, GTX1660Ti
- Egyedi ékszerdobozka
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged