- Honnan tudjuk, hogy melyik tartalmat gyártotta a TikTokra az AI?
- Bocsánatot kért az Apple, mert nagyon mellélőtt a legutóbbi reklámjával
- Már nem hisz a nagy európai EV-forradalomban a Ford
- Három éve fontos döntést hozott az AI-ról az Apple
- A Google helyét akarja az OpenAI, hétfőn jöhet az AI-alapú kereső
- Aliexpress tapasztalatok
- YouTube
- Ausztrália lecsap a kriptós adócsalókra
- Windows 10
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- Bocsánatot kért az Apple, mert nagyon mellélőtt a legutóbbi reklámjával
- Visszavonta az Intel és a Qualcomm Huawei-hez kiadott exportlicencét az USA
- Programozás topic
- Disney+
- Reklámblokkolók topikja
-
IT café
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
válasz lenkei83 #33119 üzenetére
Szia!
A második makróból csinálj egy függvényt (pl):
Function RemoveNotNum(ByVal ertek As String)
Dim xOut As String, xTemp As String, i As Integer, xstr As String
xOut = ""
For i = 1 To Len(ertek)
xTemp = Mid(ertek, i, 1)
If xTemp Like "[0-9]" Then
xstr = xTemp
Else
xstr = ""
End If
xOut = xOut & xstr
Next i
RemoveNotNum = xOut
End FunctionEzután az első makróban a target.Value = regiertek sort cseréld ki erre:
target.Value = RemoveNotNum(regiertek)
Üdv.
-
-
Fferi50
őstag
válasz lenkei83 #33139 üzenetére
Szia!
Szerintem a Copy ágon nincs régi érték...
Ha több cellából áll a Target tartomány, akkor két lehetőséged van:
- vagy a Target tartomány celláin mész végig for each ciklussal és egyenként hívod meg a függvényt,
- vagy és ez szerintem a jobb, hogy a függvényből paraméteres eljárást csinálsz és ezen belül megy végig a ciklus a range celláin:Sub RemoveNotNum(ByRef myRange As Range)
Dim xOut As String, xTemp As String, i As Integer, xstr As String, cl As Range
xOut = ""
For Each cl In myRange
For i = 1 To Len(cl.Value)
xTemp = Mid(cl.Value, i, 1)
If xTemp Like "[0-9]" Then
xstr = xTemp
Else
xstr = ""
End If
xOut = xOut & xstr
Next i
cl.Value = xOut
xOut = ""
Next
End Sub
(Ez már csaknem az eredeti makró :-)
A meghívás pedig RemoveNotNum Target (illetve a Target helyett írhatod azt a tarrtományt, amelyből ki szeretnéd venni a nem szám karaktereket.
Itt már nem kell zárójel, mert nem függvény, hanem eljárás ami működik. Ez akkor is működik, ha csak egy cella van kijelölve, akkor is, ha több.Üdv.
-
Fferi50
őstag
válasz lenkei83 #33141 üzenetére
Szia!
Szerintem kicsit túlkombinálod.
Ez a függvényes, ami csak 1 cella esetén müxik jól.If (sh.CodeName = "munka5" Or 1 <= target.Column <= 2) Then
regiertek = target.Value ' ez volt a target értéke
Application.EnableEvents = False
Application.Undo
target.Cells.NumberFormat = "@"
If Application.CutCopyMode <> False Then ' ha másolásról van szó, akkor
target.PasteSpecial Paste:=xlPasteValues ' most bemásoljuk az értéket - ami megegyezik az előzőleg regiertekbe tett értékkel!
Application.CutCopyMode = False
target.Value = RemoveNotNum(regiertek) 'ezért itt jó a regiertek és a target.value is!!
Else
target.Value = RemoveNotNum(regiertek) 'ha nem másolás volt, akkor is kiszedjük a számokat
EndIf
mivel ez a két sor azonos, lehet az EndIf után tenni.Ez pedig a Sub-bal, itt viszont a meghíváskor RANGE-et kell megadni, nem értéket!
If (sh.CodeName = "munka5" Or 1 <= target.Column <= 2) Then
regiertek = target.Value
Application.EnableEvents = False
Application.Undo
target.Cells.NumberFormat = "@"
If Application.CutCopyMode <> False Then
target.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
RemoveNotNum Target 'regiertek
Else
Target.Value=regiertek
RemoveNotNum Target 'regiertek
End If
Ez működik több cellás cél esetén is (meg egy cella esetén is).Üdv.
-
Fferi50
őstag
válasz lenkei83 #34398 üzenetére
Szia!
Nyiss meg egy üres Excel munkafüzetet. A VBA nézetben az immediate ablakba írd be:
Application.EnableEvents=False (enter)
Azaz kikapcsolod az eseménykezelést.
Utána próbáld megnyitni a fájlt (nekem sikerült). Innen már makrónként végigmehetsz, hogy mi akaszthatja ki.Üdv.
Update: Sőt: ok_wathing indítása lépésenként, pár lépés után lefuttatása majd bezárás - mentéssel, az eseménykezelés visszakapcsolása után simán meg is nyitotta a fájlt.
[ Szerkesztve ]
-
Fferi50
őstag
válasz lenkei83 #34420 üzenetére
Szia!
Az nyilván nagyobb kutatómunkát igényelne, hogy elsőre miért nem szereti - amire most nem feltétlenül vállalkoznék, talán egy későbbi időpontban...
Ha most így működik (persze nem megnyugtató), akkor figyelni kell, hogy hiba esetére legyen mentés.
(Nyilván esetedben még fontosabb.)
Priviben még elbeszélgethetünk rajta esetleg.Üdv.
-
Fferi50
őstag
válasz lenkei83 #34928 üzenetére
Szia!
Valóban fáradt vagy....
Az első változóba a munkalap kódneve kerül, ami ugye string (akkor is, és főleg azért, mert variantnak definiáltad).
A következő sorban pedig objektumhoz szeretnéd rendelni a stringet.... Nem csoda, hogy nem megy.Kérdezd le csak a nevét, majd a Sheets(név) formában hozzárendelheted az objektumhoz.
Üdv.
-
Fferi50
őstag
válasz lenkei83 #35583 üzenetére
Szia!
Sajnos ez nem lehetséges jelenleg. Azt javaslom, hogy egészítsd ki a munkalap nevét egy H ill. egy V betűvel (plusz szóköz esetleg) az elején vagy a végén a listában.
Esetleg csinálhatsz két oszlopos listboxot, amelyikben szétválasztva sorolod fel a munkalapokat (egyik H, másik V), persze ilyenkor a kiválasztás nem lesz egyértelmű.Üdv.
-
Delila_1
Topikgazda
válasz lenkei83 #35643 üzenetére
Adott egy tartomány mondjuk A1:G1 tele számokkal, és azt szeretném tudni, hogy a D1-ben lévő érték hányadik a sorban.
A SORSZÁM függvényt alkalmazd.
[ 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 lenkei83 #35810 üzenetére
Szia!
Sajnos egy lépésben nem fog menni. Javaslom, vegyél fel egy Public változót és hozzá egy függvényt.
A függvényben a lekérdezés:valtozo = Me.CheckBox1 And Me.CheckBox2 And Me.CheckBox3 stb.
Ez csak akkor True, ha minden CheckBox be van pipálva.
(Némi kis trükkel elérhető az is, hogy megtudd, melyik nincs bepipálva:
valtozo = -Me.CheckBox1 * 1 Or -Me.CheckBox2 * 2 Or -Me.CheckBox3 * 4
Akkor minden rendben, ha az értéke 7.
Ha 6, akkor az első hiányzik, ha 5 akkor a második, ha 3 akkor a harmadik.)Ha minden kattintás eseményben meghívod a függvényt, akkor azonnal tudod, hogy mind be van-e jelölve.
Üdv.
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz lenkei83 #35810 üzenetére
Másik megoldás (Feriéhez képest): tedd keretbe a CheckBoxokat, és egy gombhoz rendeld a lekérdezést.
Private Sub CommandButton1_Click()
Dim i As Object, f As Boolean
For Each i In Frame1.Controls
If i = False Then f = True
Next
If f Then MsgBox "Nincs minden jejölőnégyzet bejelölve", vbInformation
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 lenkei83 #35822 üzenetére
Szia!
Ez nyilván valamilyen ellenőrző lista lesz, amit teljes egészében végre kell(ene) hajtani, csak azután lehet(ne) továbbmenni. Ezért kell megnézni, hogy minden pipa megvan-e....
De ismerve a felhasználók lelkületét, azt nem lehet garantálni, hogy valóban meg is csinálták azt a műveletet, amit bepipáltakÜdv.
[ Szerkesztve ]
-
pigster
senior tag
válasz lenkei83 #36029 üzenetére
Tools/References...-nél be kell jelölni a Microsoft Scripting Library-t a működéshez
Function Gyujtes() As Scripting.Dictionary
Dim dict As Scripting.Dictionary
Dim myRange As Range
Dim sor As Long
Dim megnevezes As String
Dim ertek As Long
Set myRange = Range("A:B")
sor = 1
Set dict = New Scripting.Dictionary
megnevezes = myRange.Cells(sor, 1).Value
ertek = myRange.Cells(sor, 2).Value
Do While Not megnevezes = ""
If Not dict.Exists(megnevezes) Then
dict.Add megnevezes, ertek
Else
dict(megnevezes) = dict(megnevezes) + ertek
End If
sor = sor + 1
megnevezes = myRange.Cells(sor, 1).Value
ertek = myRange.Cells(sor, 2).Value
Loop
Set Gyujtes = dict
End Function
Sub Kiiras()
Dim dict As Scripting.Dictionary
Set dict = Gyujtes
Dim v As Variant
For Each v In dict.Keys
Rem persze a MsgBox helyett akármit lehet csinálni vele
MsgBox CStr(v) & " összesen: " & dict(v)
Next
End Sub[ Szerkesztve ]
FIGYELEM! A többszázezres Samsung okostévék kéretlen reklámokat tolnak az arcodba.
-
Delila_1
Topikgazda
válasz lenkei83 #36029 üzenetére
Az L-M oszlopba írja ki az egyes megnevezésekhez tartozó összegeket.
Sub Kigyujtes()
Dim usor As Long
Columns(1).Copy Range("L1")
usor = Range("L" & Rows.Count).End(xlUp).Row
ActiveSheet.Range("L1:L" & usor).RemoveDuplicates Columns:=1
usor = Range("L" & Rows.Count).End(xlUp).Row
Range("M1:M" & usor) = "=sumif(A:A,L1,B:B)"
End SubProgramozó: 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 lenkei83 #36429 üzenetére
Egyszerűbb összehozni, mint elmesélni.
A lényeg, hogy a szűrt listát átmásolod valahova, és ennek az új tartománynak a címét adod meg szöveges értékként a ComboBox RowSource tulajdonságaként.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Pakliman
tag
-
Pakliman
tag
válasz lenkei83 #36585 üzenetére
Jelenlegi ismereteim szerint (remélem, lesz aki mutat valami jobbat) az INDIREKT nélkül csak úgy lehet megoldani, hogy a munkalap neve(ket)t fixen építed be a függvénybe. Így viszont "nincs értelme" az F oszlopnak, mivel nem is fogja onnan venni az értéket
Az INDIREKT valóban lassítja a dolgot, mivel volatile függvény, vagyis minden esetben újraszámol.[ Szerkesztve ]
-
Pakliman
tag
válasz lenkei83 #36587 üzenetére
Akkor viszont:
Dim ws As Worksheet
Dim rCella As Range
Set ws = ActiveSheet
With ws
For Each rCella In .Range("I2:I" & .Range("A1").SpecialCells(xlCellTypeLastCell).Row)
rCella = "=sumifs('" & .Cells(rCella.Row, "F") & "'!$C:$C," & "'" & .Cells(rCella.Row, "F") & "'!$B:$B,$D2," & "'" & .Cells(rCella.Row, "F") & "'!$P:$P,$B2)"
Next rCella
End WithAzt ugye tudod, hogy a SpecialCells tud ám rafinált hibákat okozni?
Csak látszat, hogy az utolsó "használt" cella lesz az alapja a visszaadott koordinátának.
Ha az utolsó mentés (és/vagy újranyitás) előtt mondjuk a "XFD1048576" cellába (O2010-nél az utolsó cella) valaki írt valamit aztán TÖRÖLTE, akkor a SpecialCells(xlCellTypeLastCell) az a cella lesz!!Én ezeket használom az utolsó sor/oszlop meghatározására (a "hol" lehet egy munkalap, vagy akár egy terület is):
Public Function UtolsóSora(hol, Optional lColumn As Long = 1) As Long
Dim rng
Set rng = hol.Cells(hol.Cells.Rows.Count, lColumn)
If Not IsEmpty(rng) Then
UtolsóSora = rng.Row
Else
UtolsóSora = rng.End(xlUp).Row
End If
Set rng = Nothing
End Function
Public Function UtolsóOszlopa(hol, Optional lRow As Long = 1) As Long
Dim rng
Set rng = hol.Cells(lRow, hol.Cells.Columns.Count)
If Not IsEmpty(rng) Then
UtolsóOszlopa = rng.Row
Else
UtolsóOszlopa = rng.End(xlToLeft).Column
End If
Set rng = Nothing
End Function -
spe88
senior tag
-
Mutt
aktív tag
válasz lenkei83 #38395 üzenetére
Szia,
Ha az 5-8-as sávokban nem 0, hanem mindig nagyobb érték van mint ami az elöző sávban, akkor B6-os cella képlete:
=INDEX(D:W;;ÖSSZESÍT(14;6;OSZLOP(D6:W6)*PÁROSE(OSZLOP(D6:W6))/(1-(D6:W6>=$A6));1)-2)
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
aktív tag
válasz lenkei83 #38399 üzenetére
Nem minden sávban van érték.
Ez esetben:
=HAHIBA(INDEX(D:W;;ÖSSZESÍT(14;6;OSZLOP(D6:W6)*PÁROSE(OSZLOP(D6:W6))*(D6:W6<>0)/(1-(D6:W6>$A6));1)-2);0)
A képlet továbbra is feltételezi, hogy a sávok alja jobbra haladva növekszik.
[ Szerkesztve ]
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
ny.janos
tag
válasz lenkei83 #38524 üzenetére
A feltételes formázás nem jó a számodra? Kijelölöd mindkét oszlopot, majd az ismétlődő értékeket formázod.
A egyedi értékeket tartalmazó oszlopban látni fogod, hogy mely értékek szerepelnek abban az oszlopban is, amelyben ismétlődő értékek vannak.Ha másra gondolsz, akkor nem jól értettem a feladatot.
-
GreenIT
tag
válasz lenkei83 #38720 üzenetére
Koszonom, kis modositassal tokeletes lett.
Ezek szerint nem aktiv, hanem passziv logikat kell kovetni, nem en mondom meg, hogy melyik cellaba tegye a valtozatokat, hanem minden cellaban meg kell adni, hogy honnan vegye az adatokat. Vagyis kulon figyelni kell, hogy ne legyenek atfedesek, mert barmi szabadon megadhato.
-
-
Fferi50
őstag
válasz lenkei83 #47570 üzenetére
Szia!
Ez a függvény nem VBA-ban van megírva szerintem, hanem Visual Studioban. Ha elmész a szerző(k) oldalára https://www.instagram.com/knacksack_official/,fogsz találni rá példát, hogyan csinálta.
A VBA UDF értéket ad vissza és nem tudja módosítani a cellaformázást.
Üdv.[ Szerkesztve ]
-
félisten
-
félisten
válasz lenkei83 #47633 üzenetére
1. Maga az adatbázis, az már egy létező adatbázis (pl. MySQL, Access, Paradox stb stb)?
2. Lokális (saját gépeden van) vagy hálózaton (neten egy szerveren csücsül stb stb)?
3. Az adatbázis felépítése?Szóval ezen, alapvető infók hiányában nagyon nehéz segíteni. Pl. korábban írtad:
"1: teljes adózói adatbázis letöltése excelbe"Adatbázist nem lehet "csak úgy" letölteni Excel-be, max. átkonvertálni (makró segítségével, de ehhez nélkülözhetetlen az adatbázis felépítésének ismerete) avagy "legegyszerűbben" Power Query segítségével beimportálni az adatokat, majd ezt követően SQL lekérdezéseket (is) már el lehet követni.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz lenkei83 #47637 üzenetére
"Egyelőre még linket sem találtam, ahol el lehet érni."
Mármint a Power Query-t?
Ez 2016 vagy újabb Office esetén beépítve megtalálható.
2010/2013 esetén telepíteni kell: [link]
Adatok fül/Adatok beolvasásánál tudsz adatbázisból beolvasniMindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Fferi50
őstag
válasz lenkei83 #49002 üzenetére
Szia!
Az első paraméter kötelező, egy userform combo vagy listbox objektum a kód alapján. A második paraméter opcionális logikai.
Az első paraméternél meg kell adnod az objektum teljes nevét, pl. Userform1.Combobox1 (a nálad érvényes nevekkel).
A második paraméter elhagyható, illetve False esetén nem méretezi át az objektumot, True esetén átméretezi. False és True helyett természetesen bármely általad bevezetett logikai változót alkalmazhatsz amelyiknek megfelelő az értéke számodra.
Mivel nincs visszatérési értéke, így szerintem egyszerűen meghívható zárójelek nélkül, mint egy paraméterezett eljárás:ControlsResizeColumns Userform1.Combobox1,True
Üdv.
Új hozzászólás Aktív témák
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Eredeti Windows, telepítéssel! Digital Doctor Számítógép Szerviz
- Vírusirtó, Antivirus VPN kulcsok
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )
- World of Warcraft Shadowlands Collectors edition EU EN
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen