-
Fototrend
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 #10599 üzenetére
Így bizony.
Erre a te színlekérdezős makród is azt válaszolja (akármilyen színe van a háttérnek) hogy átlátszó.
És gondolom az Interior.Colorindex miatt a visszaadott színek az 56-os számozás szerint adódnak vissza.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz medvezsolt #10605 üzenetére
Szivesen.
-
-
m.zmrzlina
senior tag
válasz perfag #10639 üzenetére
Azért mert szerintem jogos igény, hogy egymás alatt szeretné látni a karbantartandókat. Ezzel a módszerrel minden alkatrésznek kellene lenni a főoldalon egy sorának amiben az érték megfelelően HA()függvényezve vagy látszik vagy nem. De ha az első 15 alkatrész nem vár karbantartásra akkor csak a 16.sorban lesz valami. Tudom le lehet szűrni meg minden de szerintem is egyszerűbb itt egy makró csak ahhoz látni kéne a fájlt.
Én nem szórom úgy a makrókat mint Delila_1, hogy ha kell fél óra alatt tízet összehoz ha nem olyan az igény ahogy ő a probléma leírása alapján gondolja.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz VANESSZA1 #10648 üzenetére
Igen lehet. Excel 2007-nél legalábbis:
Mentéskor az Eszközök>Beállítások menüben tudod megadni a jelszót.
Ha megadtad a jelszót fogja kérni még egyszer.
Többet itt tudhatsz meg:
http://spreadsheetpage.com/index.php/tip/spreadsheet_protection_faq1/[ Szerkesztve ]
-
m.zmrzlina
senior tag
Ugyanúgy mint Excelben.
Insert (sor vagy oszlop ami kell) aztán Copy>Paste special, és kiválasztod, hogy mit akarsz beilleszteni.
Szerk:
Arra azért figyelj, hogy jónéhány Excel függvény nem működik OO-ban.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz cortez25 #10721 üzenetére
Biztosan mindketten erről a táblázatról beszélünk?
-
m.zmrzlina
senior tag
válasz cortez25 #10723 üzenetére
Így már értem! A nálam ugyanis kulcsszavak voltak a megértéshez
Nekem innen ez már makró, mégpedig a következő formában.
Ez a táblázat:
Ez a hozzá tartozó makró:
Sub megkeres()
For i = 2 To Range("J2").End(xlDown).Row
For Each cell In Selection.Cells
If Range("J" & i).Value = cell.Value Then
Range("J" & i).Offset(0, 1).Value = "OK"
Exit For
Else
Range("J" & i).Offset(0, 1).Value = "NOK"
End If
Next cell
Next i
End SubTermészetesen ezt is adoptálnod kell a saját tartományaidhoz, valamint a makrót úgy indítod, hogy kijelölöd a teljes tartományt amiben keresni szeretnéd a neveket.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Penge_4 #10745 üzenetére
Vagy új modulba bemásolod a következőt:
Sub keplet_e()
Dim cella As Range
For Each cella In Selection.Cells
If cella.HasFormula Then
cella.Interior.ColorIndex = 22
End If
Next
End SubAztán kijelölöd a tartományt amiben fv-t sejtesz és lefuttatod a makrót.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz perfag #10757 üzenetére
"Néha a törpöm tele a Microsofttal, miért nem lehet ezt a Súgóban rendesen megtalálni."
Ehhez képest hányszor olvasom itt a fórumon, hogy a "Súgó a barátod"
Ilyenkor azt kívánom, hogy aki ilyet ír annak soha ne legyen jobb barátja mint az Excel Súgó!
Volt ez már egyszer téma, valahol itt kezdődött.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz djzomby #10761 üzenetére
Nem tudom honnantól kell elmagyarázni a dolgot (és milyen Excel verziót használsz) de ha jól értem több színű szöveged van és attól függően, hogy milyen színű a szöveged kell különböző dolgokat csinálnia az Excelnek.
Az alábbi makró azt csinálja, hogy I3-tól végigmegy addig amíg van valami az oszlopban és a cella mellé írja a cella szövegének színkódját.
VB-be beilleszteni Insert>Modul menüből lehet
Sub szovegszin()
Range("I3").Select
Dim betuszine As Integer
Do Until ActiveCell.Value = ""
betuszine = ActiveCell.Font.ColorIndex
Select Case betuszine
Case Is = 3 'itt adod meg a szín kódjával, hogy milyen színű szöveg esetén...
ActiveCell.Offset(0, 1).Value = "A szomszédos cella betűszín kódja:" & betuszine 'itt adod meg, hogy mi történjen
Case Is = 4
ActiveCell.Offset(0, 1).Value = "A szomszédos cella betűszín kódja:" & betuszine
Case Is = 5
ActiveCell.Offset(0, 1).Value = "A szomszédos cella betűszín kódja:" & betuszine
Case Is = 6
ActiveCell.Offset(0, 1).Value = "A szomszédos cella betűszín kódja:" & betuszine
Case Is = 7
ActiveCell.Offset(0, 1).Value = "A szomszédos cella betűszín kódja:" & betuszine
Case Is = 8
ActiveCell.Offset(0, 1).Value = "A szomszédos cella betűszín kódja:" & betuszine
End Select
ActiveCell.Offset(1, 0).Select
Loop
End SubA Case Is sorban adod meg hogy milyen szín esetén, a következő sorban pedig hogy mit csináljon a program.
Színekről bővebb információ itt.
Jó lenne több részletet tudni a feladatról mert így csak vaktában lövöldözünk.
Még véletlenül eltaláljuk egymást[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz djzomby #10786 üzenetére
Van egy szörnyű gyanúm, hogy van erre egyszerűbb megoldás is de több időm erre csak este lesz. Ha addig nem kapsz valami egyszerűbb megoldást akkor használd ezt:
Sub szinosszeg()
Range("A1").Select
Dim pirososszeg As Integer, feketeosszeg As Integer
Dim betuszine As Integer
pirososszeg = 0
feketeosszeg = 0
Do Until ActiveCell.Value = ""
betuszine = ActiveCell.Font.ColorIndex
Select Case betuszine
Case Is = 3
pirososszeg = ActiveCell.Value + pirososszeg
Case Is = 1
feketeosszeg = ActiveCell.Value + feketeosszeg
End Select
ActiveCell.Offset(1, 0).Select
Loop
Range("H2").Value = pirososszeg
Range("G2").Value = feketeosszeg
End Sub -
m.zmrzlina
senior tag
válasz djzomby #10788 üzenetére
Ilyen kicsi és jól körülhatárolt tartományoknál talán még nem fájóan amatőr megoldás számlálós ciklusra bízni a dolgot:
Sub szinösszeg_v2()
Dim pirososszeg As Single, feketeosszeg As Single
Dim i As Integer, j As Integer, betuszine As Integer
Cells(1, 1).Select
For i = 1 To 10
pirososszeg = 0
feketeosszeg = 0
For j = 1 To 6
betuszine = ActiveCell.Font.ColorIndex
Select Case betuszine 'ha a szöveg színe piros
Case Is = 3 'pirososszeghez aktív cella értékét hozzáadja
pirososszeg = ActiveCell.Value + pirososszeg
Case Is = 1 ''ha a szöveg színe fekete
feketeosszeg = ActiveCell.Value + feketeosszeg 'feketeoszeghez aktív cella értékét hozzáadja
End Select
ActiveCell.Offset(0, 1).Select 'következő cella
Next j
With Range("H" & i) ' sor végére G oszlopba
.Font.ColorIndex = 3 'pirossal
.Value = pirososszeg 'pirososszeget kiír
End With
With Range("G" & i) ' sor végére H oszlopba
.Font.ColorIndex = 1 'feketével
.Value = feketeosszeg 'feketeosszeget kiír
End With
ActiveCell.Offset(1, -6).Select 'vissza a sor elejére
Next i
End SubHa a tartomány változó akkor kötelező, ha a mérete jelentősen megnő akkor érdemes újragondolni a koncepciót.
-
m.zmrzlina
senior tag
válasz superecneB #10799 üzenetére
Erre a kérdésre Delila_1 egyszer már itt válaszolt.
Csak akkor más tette fel a kérdést
-
m.zmrzlina
senior tag
válasz superecneB #10801 üzenetére
Válasz ment privátban.
-
m.zmrzlina
senior tag
válasz djzomby #10788 üzenetére
Na tudtam, hogy egyszerűbben is lehet ezt.
Másold új modulba a következőt:
Function SZINESÖSSZEG(minta As Range, tartomany As Range)
Dim cella As Range, osszeg As Double
szin = minta.Font.Color
For Each cella In tartomany
If cella.Font.Color = szin Then
osszeg = osszeg + cella.Value
End If
Next cella
SZINESÖSSZEG = osszeg
End FunctionLegjobb ha a personal.xls (personal.xlsb) -be teszed mert akkor minden megnyitott munkafüzetben rendelkezésre fog állni egy SZINESÖSSZEG() nevű új függvény. Úgy használod mint a SZUM() fv-t csak ennek az első paramétere egy olyan abszolút cellahivatkozás (pl: $A$1) amiben ugyanolyan színű karakterek vannak mint amit össze akarsz adni.
Hogy érthetőbb legyen itt egy kép:
Köszönet az ötletért (ki másnak mint) Delila_1-nek
-
m.zmrzlina
senior tag
-
-
m.zmrzlina
senior tag
válasz m.zmrzlina #10824 üzenetére
Ez működik!
Ezt a fv-t másold modulba:
Function FilterOn(myCell As Range) As Boolean
On Error Resume Next
With myCell.Parent.AutoFilter
With .Filters(myCell.Column - .Range.Column + 1)
If .On Then FilterOn = True
End With
End With
End Functionmajd formázd feltételesen a következőképpen:
A formázás érvényessége a példa munkalapon =$A:$G
-
m.zmrzlina
senior tag
válasz Delila_1 #10825 üzenetére
Maga a fv által visszaadott érték nálam valamiért így sem frissül. K1-be tettem ezt: =FilterOn(A1) és ha nincs szűrő az a oszlopban akkor HAMIS-t ad vissza. Azt várnám ha bekapcsolok egy szűrőt A1-ben akkor IGAZ-ra vált K1 értéke. Ez nem történik meg (az üres makróval sem) viszont ha bekapcsolt szűrőnél viszem be A1-re a FilterOn()-t akkor helyesen TRUE-t ad vissza.
Viszont ennek ellenére a felt. formázás jól működik
-
m.zmrzlina
senior tag
válasz Delila_1 #10828 üzenetére
Ha kiegészítem ezzel a sorral:
Application.Volatile
akkor úgy tűnik működik.
Innen szedtem.Valójában egyetlen sorát sem értem ennek a függvénynek (na jó az elsőt és az utolsót igen .), de ilyen egymásba ágyazott With..End With szerkezetet nem láttam soha
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #10829 üzenetére
Jó de ebből hogyan derül ki, hogy melyik oszlop adatai alapján van szűrve a tartomány?
Az eredeti kérdésben ti. ez volt.[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #10833 üzenetére
Ilyet olvastam a Súgóban:
A nonvolatile function is recalculated only when the input variables change
Nem lehet hogy az autofilter-rel ellátott tartománynak a fejléce nem számít bemenő változónak?
Mert ha ezt a kérdéses fv-t amivel kapcsolatban ittérdeklődtem =FilterOn(A1) helyett =FilterOn(A2)-ként akarom használni akkor Volatile nélkül is működik.
És ez megmagyarázza, hogy miért működik csont nélkül a feltételes formázásnál
???
-
m.zmrzlina
senior tag
válasz dellfanboy #10855 üzenetére
Hol kell keresni a változókat és hová kell tenni az eredményt?
-
m.zmrzlina
senior tag
válasz dellfanboy #10855 üzenetére
Nekem az A1:B4000-ben vannak a változópárok amiket el kell osztani egymással, az eredmény pedig az F1:F50 tartományba illetve attól jobbra kerül.
Sub lepopulal()
Dim bemenoadat As Variant
Dim eredmeny As Variant
Dim i As Integer
bemenoadat = Range("A1:B4000").Value
eredmeny = Range("F1:EXA1").Value
For i = 1 To 4000
eredmeny(1, i) = bemenoadat(i, 1) / bemenoadat(i, 2)
Next i
Range("F1:EXA50") = eredmeny
End Sub -
m.zmrzlina
senior tag
A létező legprimitívebb megoldás és ha valóban bolondbiztossá kell tenni akkor sok dolog lesz még vele de kiindulásnak talán jó:
Sub atmasol()
Dim sor As Integer
sor = 1
Worksheets("Munka1").Select
Do Until IsEmpty(Cells(sor, 1).Offset(1, 0)) = True
If Cells(sor, 8) <> "" Then
Range(Cells(sor, 1), Cells(sor, 8)).Copy Worksheets("Munka2").Range("A" & Worksheets("Munka2").Cells(Rows.Count, 1).End(xlUp).Row + 1)
End If
sor = sor + 1
Loop
End SubMunka1-en vannak a kiinduló adatok és Munka2-re teszi az eredményt, illetve azt feltételeztem, hogy az A oszlopban a lista aljáig egyetlen cella sem üres. Valamint a H oszlop üres celláiban <szóköz> sem lehet.
-
m.zmrzlina
senior tag
Szerettem volna Pale (#10873)-ban leírt problémáját mintegy a magam okulására egy másik megközelítésből megoldani.
Már többször használtam azt a módszert, hogy (főleg nagyobb tartományoknál) nem cellánként olvasok és írok hanem egyben egy egész tartományt olvasok be, elvégzem a műveletet és egyben írom vissza a munkalapra az eredményt. Innen vettem az ötletet
Eddig még sosem volt olyan helyzet, hogy az eredmény tartomány méretét ne tudtam volna előre, hanem menet közben kelljen meghatározni.A következő kódot sikerült kiagyalni, és nem tudom, hogy (noha úgy tűnik működik) valójában így kell-e csinálni ezt vagy van-e erre valami bevett profi megoldás. Minden építő kritikát szivesen veszek.
Sub atmasol()
Dim bemenoadat() As Variant, eredmeny() As Variant
Dim i As Long, j As Integer, belistahossz As Long, kilistahossz As Long, m As Long
belistahossz = Cells(Rows.Count, 1).End(xlUp).Row
bemenoadat = Range("A1:H" & belistahossz).Value
kilistahossz = Application.WorksheetFunction.CountA(Range(Cells(1, 1), Cells(belistahossz, 1)))
m = 1
ReDim Preserve eredmeny(1 To kilistahossz, 1 To 8)
For i = 1 To belistahossz
If bemenoadat(i, 8) <> "" Then
For j = 1 To 8
eredmeny(m, j) = bemenoadat(i, j)
Next j
m = m + 1
End If
Next i
Worksheets("Munka2").Range("A1:H" & kilistahossz).Value = eredmeny
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz cousin333 #10896 üzenetére
...hogy a bemenő változókkal egyesével feltöltök egy-egy tömböt, az eredményeket kiszámolom egy másik tömbbe, majd egyesével kiírogatom őket a megfelelő helyekre...
Amit nekem sikerült kiérteni a vonatkozó forrásokból az az, hogy a szóban forgó módszert pont azért érdemes használni mert nem visz el rengeted időt az egyenkénti olvasás-írás. Gyakorlatilag az Excel "fejben" számolja az eredményt és egyszerre írja vissza a munkalapra.
A futásidő különbség nálam egy másik tartománynál (kb 8000 cella és mindegyikben WorksheetFunction-os szövegmanipuláció): cellánkénti módszernél 70mp körül, a "fejbenszámolós" módszer 1mp alatt
...(akár a
Sheets("újhely").Range("A11:H11").Value = Range("A23:H23").Value
módszerrel) átmásolod az új helyre....
Gyakorlatilag ez a módszer volt amit először javasoltam, de ez több ezer cellánál már időigényesebb a "tömbös" mószernél.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Van több munkalapom amin több tartomány van elszórtan amibe feltételes formázást szeretnék tenni. A munkalap mindig más és más (a tartományok sem mindig ugyanott vannak és nem mindig ugyanakkorák)
Ilyen formázást szeretnék tenni bele(makrorögzítővel készítettem):
Range("A27:C29").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ÉRTÉK(BAL($B27;8))>=$F$24"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = FalseA tartományok határait meg tudom határozni makróval (Range(<akármi>).Select azonban az "=ÉRTÉK(BAL($B27;8))>=$F$24" sorban van egy változó (a példában a $B27) ami természetesen minden tartomány esetében más.
Gondolom a két idézőjel közé nem tehetek változót oda csak a konkrét cellahivatkozást lehet karakterről karakterre beírni.
Hogyan lehet ezt a problémát megoldani?
Csak találgatok: működhet-e az a megoldás, hogy összeállítom a teljes képletet egy sztring változóban és a változót írom a Formula1:= után idézőjelek nélkül?
Új hozzászólás Aktív témák
- Bontatlan - BATTLEFIELD 1 Collectors Edition - Játékszoftver nélkül
- Windows 10/11 Home/Pro , Office OEM/Retail kulcsok
- AKCIÓ! - STEAM kulcsok / Punch Club, Oddworld: Soulstorm, Children of Morta, stb. - 2024.05.16.
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Megmaradt - Eredeti Humble, Choice - Steam kulcsok
- Keresem az Alan Wake Collectors Editions pc-re.
- PC szoftverek és játékok
- Steam kulcs turkáló :: Friss Excel lista 1200+ játékkal :: Közte VR, AAA és indie címek olcsón!
- Windows 7 Home Premium, Pro, Ultimate és Windows 8, 8.1 Pro licenckulcsok 64, 32 bit - MEGA Akció!
- GameStar / Gamer Magazin / PC Guru stb papírtokos játékmellékletek 350Ft/db
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen