-
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
-
azopi74
addikt
válasz karlkani #26281 üzenetére
Ha mondjuk beállítod az iterációt 1-re, beírod pl E10-be ezt:
=HA(ÉS(C10<>"";F10<>C10);MOST();HA(C10="";"n/a";E10))
F10-be meg ezt:
=HA(C10="";"";HA(VAGY(E10="";ÉS(SZÁM(F10);C10=F10));F10;C10))
Akkor E10-ben a C10 utolsó modósításának időpontját fogja mutatni
Iteráció nélkül csak VBA makróval tudod megoldani
De talán lehet egyszerűbben is iterációval, de most ez jutott eszembe ...
[ Szerkesztve ]
-
azopi74
addikt
válasz karlkani #26317 üzenetére
Ha bármilyen eseményvezérelt kód van a file-ban ( akár a thisworkbook-ben, akár valamelyik munklaphoz csatolva), és az lefut akkor automatikusan törli a VBA az undo cache-t, ez szándékos, és nem tudok róla, hogy ezt meg lehetne kerülni (ha belegondolsz, talán érthető, hogy miért ...)
"Valamint olyan cella változását képes figyelni, melyet nem én módosítok, hanem néhány cella tartalmát összegzi, s, ha változás van, azt jelezze egy cellában nekem?"
Na ez elég hirtelen témaváltás Amit a kollégának írtam előbb, azt nem tudod alkalmazni? Csak itt nem pivotot kell frissíteni, hanem értesíteni valamilyen módon. (pl message box?)
-
Delila_1
Topikgazda
válasz karlkani #26317 üzenetére
"Valamint olyan cella változását képes figyelni, melyet nem én módosítok, hanem néhány cella tartalmát összegzi, s, ha változás van, azt jelezze egy cellában nekem?"
Azokat a cellákat kell figyeltetned, amik az összegző cella értékét módosítják.
Például a B5:B20 tartomány összegzésénélIf Not Intersect(Target, [B5:B20]) Is Nothing Then
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 karlkani #26332 üzenetére
Ismered a fényképezőgép ikont?
Ennek a segítségével a képernyőn éppen nem látható, távoli cellát teheted állandóan láthatóvá, illetve olyan helyre vetíted ki, ahol éppen jársz. Területet is kijelölhetsz vele.
Mint látod, a képletet a képernyőn pillanatnyilag nem látható E41 cella tartalmazza, és a B oszlop első 12 értékét összegzi. Követi a változásokat.
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 karlkani #27061 üzenetére
Szia!
Mit értesz az alatt, hogy kézzel ne lehessen beírni? Az adatérvényesítésnél ha listát adsz meg, akkor nem fogad el csak olyan tételt, amelyik benne van a listában, ez kiválasztható és be is írható. Tudtommal nem lehet olyat csinálni, hogy a cellába ne lehessen írni. Ugyanis, ha levéded a cellát, akkor nem működik a beírás a cellába, de a listából sem lehet választani.
Viszont, ha ténylegesen 0-100 közötti számot lehet választani, akkor miért nem az egész szám és min 0 max 100 érvényesítési feltételt választod?A Ha feltételes kifejezésednél annak a cellának a címét, amelynek az értékét szeretnéd megjeleníteni, abszolút módon kell megadnod: =Ha(igaz;$A$1;"-")
Üdv.
-
Fferi50
őstag
válasz karlkani #27063 üzenetére
Szia!
Erre írtam neked, hogy az érvényesítés párbeszédpanelján a megengedve lenyílóban válaszd az egész számot - ne a listát! - és add meg alsó értéknek a 0 felső értéknek a 100 értéket.
Ebben az esetben nem fog betűt elfogadni és más számokat sem. Sehova nem kell felsorolni a számokat.
Próbáld ki lsz.Üdv.
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz karlkani #27068 üzenetére
Ha az érvényesítést úgy oldod meg, ahogy Fferi javasolta, csak a megadott 0 és 100 közötti egész számokat tudod bevinni a cellába, alfanumerikus adatot, kisebb vagy nagyobb számot, törtet nem.
Van mód a megadott tartományon kívüli adat bevitelére, de ahhoz az érvényesítés párbeszéd Hibajelzés fülén az Érvénytelen adat beírásakor hibaüzenet jelenjen meg előtti négyzetből ki kell venned a pipát, ami alapértelmezésben ott van.
A Figyelmeztető üzenet fülön adhatsz egy ilyesmi szöveget: Ebbe a cellába 0 és 100 közötti számot írhatsz. A cella fölé állva egy sárga hátterű négyzetben jelenik meg a megadott figyelmeztetés.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 karlkani #27070 üzenetére
Most értettem meg a problémádat.
Ezért nem érdemes az Excel "szellemétől" eltérő körkörös hivatkozásokat megadni.
Ezt valószínűleg azért vitted be, hogy megspórolj egy segédoszlopot. Ilyen esetben érdemesebb makróval dolgozni.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
azopi74
addikt
válasz karlkani #27087 üzenetére
Ja, azt nem írtam, hogy ha így, relatív hivatkozásként természetesen az A3 cellán állva kell beírni. Vagy átírjuk abszolútra, és akkor mindenhol ezt az értéket adja vissza. Azért írtam relatívként, mert gondoltam nem csak két cellán akarja használni, de lehet szabadon fixálni sort vagy oszlopot.
-
azopi74
addikt
válasz karlkani #27096 üzenetére
Mert a függvények között csak azokat találod, amik meghívhatók közvetlenül is, nem csak name managerből.
Az EVALUATE, akár csak pl a SET.NAME (NÉVADÁS), a GET.NAME(NEVET.VESZ) és a CALL(HÍVÁS) csak azért érhető el excelből, hogy a hidden namespace-t (rejtett névteret ) elérhessük makrómentes munkalapokból is .
Itt viszonylag jól el van magyarázva :
Sajnos angolul van, magyar anyagot sehol nem találtam a témáról.
De ezeket a függvényeket csak name managerből érjük el.
-
azopi74
addikt
válasz karlkani #27098 üzenetére
"Viszont ezzel a megoldással sima formátumba nem menthető a füzet, csak makróbarátba."
Hát igen, ez elég nagy baromság amúgy.
Vagy .xml-ként is (xml spreadsheet 2003) elmentheted, és akkor működik megnyitás után, anélkül, hogy kérné
, hogy engedélyezd a makrókat.
Csak akkor kéri, ha .xls-ként mented el, xlsx-ként meg egyszerűen eldobja a rejtett névteres függvényeket tartalmazó neveket a névkezelőből is, még ha egy deka makrót nem használtál, akkor is . Kicsit néha átesik a MS a ló túlsó oldalára biztonság terén... -
CarrGomm
aktív tag
válasz karlkani #27188 üzenetére
Nagyon köszi!! Ezek a képletek érdekes módon gond nélkül működnek, az előzőek valahogy nem akartak. Azt hittem valamit én csinálok rosszul, bár csak be kell másolni elvileg. Nem tudom miért van ez, hogy valakinek megy a képlet ugyanabban a verzióban nálam meg hibát ír.
Az elején azt hittem ez sem lesz 100-as, mert a C1-be másolt képlet Gábor helyett Gábo-t hozott eredményül, de végül az "E" oszlopba jól került be a név és ez a lényeg, szóval mindegy.
Szóval köszi még egyszer, ezt mentem, mert még kelleni fog! -
karlkani
aktív tag
válasz karlkani #27188 üzenetére
Kicsit módosítottam a kolléga kérésére a képleteken. Olyan esetben, ahol csak keresztnév van megadva, nem működött. Ha esetleg másnak is szüksége lenne rá, beírom ide is.
A1 Név
B1 =HAHIBA(BAL(A1;SZÖVEG.KERES(" ";A1)-1);"")
C1 =HAHIBA(KÖZÉP(A1;HOSSZ(B1)+2;HOSSZ(A1)-HOSSZ(B1)-HOSSZ(E1)-2);"")
D1 =ÖSSZEFŰZ(B1;" ";C1)
E1 =HAHIBA(CSERE(A1;1;SZÖVEG.KERES("^";HELYETTE(A1;" ";"^";HOSSZ(A1)-HOSSZ(HELYETTE(A1;" ";""))));"");A1)Ahogy az előzőben is írtam, miután a képletek a helyükön és "lehúztuk" őket, ameddig kell, a B és C segédoszlopokat elrejthetjük
-
csadi0011
őstag
válasz karlkani #27207 üzenetére
Először így akartam, de én nem tudtam beleírni. Kijöttem a gyakorlatból. Nálam mindig hibát írt. Nem tudom mit rontok el.
Nem egész számokkal dolgozok ezért nekem most a táblázatomban így néz ki:
=KEREK.LE(J1;0);*10000+KEREK.LE(N1;0)*100+KEREK.LE(S1;0)Na ebbe hogy kell beleírni azt, amit te is beleírtál az összefűz-be?
-
azopi74
addikt
válasz karlkani #27214 üzenetére
"ilyenkor az a cella, ahova a képlet került automatikusan jobbra zár. Miért, hisz nincs beállítva semmi?"
Bocs, de tegnap telóról írtam és nem értettem teljesen mit értesz "jobbra zár" alatt - (nem használtam soha magyar office-t, nem ismerem ezeket a hungarische szakkifezéseket ). Szóval, az a kérdés, hogy miért igazítja jobbra a cellán belül a tartalmat? Minden értéket alapértelmezetten jobbra igazít, szöveget meg balra.
-
Delila_1
Topikgazda
válasz karlkani #28574 üzenetére
A lapodhoz kell rendelned a makrót.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$10" Or Target.Address = "$F$5" Then
If IsNumeric(Range("B10")) And IsNumeric(Range("F5")) Then
Range("C3").Comment.Text Text:="A B10 és F5 cella hányadosa: " _
& Range("B10") / Range("F5") & ""
Else: Range("C3").Comment.Text Text:="0"
End If
End If
End SubA példában a C3 cella megjegyzésében jelenik meg a B10 és F5 cella hányadosa. Könnyen átírhatod a saját celláidra.
Szerk.: érdemes a megjegyzést automatikus méretűre állítani.
[ 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.
-
Delila_1
Topikgazda
válasz karlkani #28578 üzenetére
Szivi!
Kezdd azzal, hogy az I5 cellához rendelsz egy megjegyzést. A keretén bal klikk, ekkor a keret az előző sraffozottról átalakul sűrű pontozottá. Ezen jobb klikk, Megjegyzés formázása. Az Igazítás fülön jelöld be az Automatikus méret négyzetet.
A makró
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$5" Then
If IsNumeric(Range("I5")) And IsNumeric(Range("D5")) Then
Range("I5").Comment.Text Text:="Az I5 és D5 cella hányadosa: " _
& Range("I5") / Range("D5") & ""
Else: Range("I5").Comment.Text Text:="0"
End If
End If
End SubSzöveg nélkül a
Range("I5").Comment.Text Text:="Az I5 és D5 cella hányadosa: " _
& Range("I5") / Range("D5") & ""sor
Range("I5").Comment.Text Text:=Range("I5") / Range("D5") & ""[ 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.
-
Delila_1
Topikgazda
válasz karlkani #28580 üzenetére
Cseppenként adagolod a feladatot.
Az új makró előállítja a megjegyzést automatikus mérettel, a bevitel sorának az I oszlopában. Teszi ezt akkor, mikor a D, vagy I oszlopba viszel be értéket.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ertek As Double
If Target.Column = 4 Or Target.Column = 9 Then 'D vagy I oszlop
Range("I" & Target.Row).Select
With Range("I" & Target.Row)
On Error Resume Next
.AddComment
.Comment.Visible = True
.Comment.Shape.Select True
.Comment.Text Text:=ertek & " Ft/liter"
.Comment.Shape.Select
Selection.AutoSize = True
End With
If IsNumeric(Range("D" & Target.Row)) And _
IsNumeric(Range("I" & Target.Row)) Then
On Error Resume Next
ertek = Round(Range("D" & Target.Row) / Range("I" & Target.Row), 1)
Range("I" & Target.Row).Comment.Text Text:=ertek & " Ft/liter"
End If
Else: Range("I5").Comment.Text Text:="0 Ft/liter"
End If
Range(Target.Address).Select
End SubMár csak azt nem tudom, hogy a D/I érték, vagy az I/D kell a megjegyzésbe. Az
ertek = Round(Range("D" & Target.Row) / Range("I" & Target.Row), 1)
sor a D/I-vel számol. Ha ez nem jó, írd át így:
ertek = Round(Range("I" & Target.Row) / Range("D" & Target.Row), 1)
Szöveges bevitt adat esetén a megjegyzés szövege 0 Ft/liter lesz.
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 karlkani #28582 üzenetére
Elrejti a megjegyzést a
Range("I" & Target.Row).Comment.Text Text:=ertek & " Ft/liter"
sor után beszúrt
Range("I" & Target.Row).Comment.Visible = False
sor.
Tudtommal nincs olyan beállítás, ami eleve automatikus mérettel szúrja be a megjegyzést.Automatikus méretre állítás a D és I oszlopban:
Sub Auto_Meret()
Dim CV, kom, ter As Range
Set ter = Range("D:D, I:I")
For Each CV In ter
Set kom = Range(CV.Address).Comment
If Not kom Is Nothing Then 'ha van megjegyzés
Range(CV.Address).Comment.Shape.Select
Selection.AutoSize = True
End If
Next
End SubEzt a makrót mudulba kell másolni.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
poffsoft
addikt
válasz karlkani #28584 üzenetére
Sub Auto_Meret()
Dim CV, kom, ter As Range
Set ter = Range("D:D, I:I")
For Each CV In ter
Set kom = Range(CV.Address).Comment
If Not kom Is Nothing Then 'ha van megjegyzés
kom.Visible = True
kom.Shape.Select
Selection.AutoSize = True
kom.Visible = False
End If
Next
End Sub[ Szerkesztve ]
-
bteebi
veterán
válasz karlkani #29083 üzenetére
"akkor a megjegyzésben eredményül nem 400 Ft/liter jelenik meg, hanem 4000 Ft/liter. Ezzel lehet valamit kezdeni?"
Lehet. A probléma ott van, hogy a hozzáfűzött szövegrészben van egy felesleges 0. A hozzáfűzött rész egy sztring, formátumot nem állít:
Range("I" & Target.Row).Comment.Text Text:=ertek & "0 Ft/liter"
Elég, ha a "0 Ft/liter" helyett csak " Ft/liter"-t írsz. A SZÖVEG függvénnyel egyébként be tudod állítani a formátumot, és ahhoz fűzöd hozzá a szöveget.
Range("I" & Target.Row).Comment.Text Text:=WorksheetFunction.Text(ertek, "0") & " Ft/liter"
Nem próbáltam ki, de jónak kell(ene) lennie.
[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
Delila_1
Topikgazda
válasz karlkani #29083 üzenetére
Mivel az I oszlopban a D és H cellákkal kell számolni, az eseményvezérelt makróban ennek a két oszlopnak a változását kell figyeltetni.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sor As Long
sor = Target.Row
If Target.Column = 4 Or Target.Column = 8 And Target.Row > 1 Then
Application.EnableEvents = False
If IsNumeric(Cells(sor, "D")) And IsNumeric(Cells(sor, "H")) And Cells(sor, 4) <> "" And Cells(sor, 8) <> "" Then
Cells(sor, "I") = Format((Cells(sor, "H") - Cells(sor, "D") * 8), "# ##0.00 Ft/liter")
Range(Target.Address).Select
End If
Application.EnableEvents = True
End If
End SubA Cells(sor, "I") =... értékadásnál az általad megadott képletet [=HA(D="";"";H-D*8)] alkalmaztam.
A sor változót csak azért iktattam be, mert többször szerepel a makróban, és egyszerűbb leírni, mint a Target.Row-t. Na meg rövidebbek is az utasítások.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 karlkani #29097 üzenetére
Szerintem akkor is kell törölni az I értékét és a megjegyzést, ha a D és H közül csak az egyiket törlöd. Másképp minek az eredménye van az I-ben?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sor As Long, szoveg As String, osszeg As Double
sor = Target.Row
If Target.Column = 4 Or Target.Column = 8 And Target.Row > 1 Then
Application.EnableEvents = False
If IsNumeric(Cells(sor, "D")) And IsNumeric(Cells(sor, "H")) _
And Cells(sor, 4) <> "" And Cells(sor, 8) <> "" Then
osszeg = Round(Cells(sor, "H") - Cells(sor, "D") * 8, 1)
With Range("I" & sor)
On Error Resume Next
.AddComment
.Comment.Visible = True
.Comment.Shape.Select True
szoveg = "I/D=" & osszeg & "/10=" & Format(osszeg / 10, "# ##0.0") & " Ft/liter"
.Comment.Text Text:=szoveg
Selection.AutoSize = True
Selection.Visible = False
End With
Cells(sor, "I") = Format(osszeg, "# ##0.0 Ft/liter")
Else
Cells(sor, "I") = ""
Cells(sor, "I").Comment.Delete
End If
Range(Target.Address).Select
Application.EnableEvents = True
End If
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 karlkani #29333 üzenetére
A Ctrl+e hozzárendelést külön kell megadnod, mert az általam írtban csak megjegyzésként szerepel.
A füzetben Alt+F8, kiválasztod a makrót, majd az Egyebek gomb segítségével megadod a bill. hozzárendelést. Csak akkor kell, ha Ctrl+... hatására is működésbe akarod hozni.
Érdemes olyan betűt megadni, ami nem alapbeállítása az Excelnek, mint pl. a Ctrl+a, Ctrl+b, stb.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
sztanozs
veterán
válasz karlkani #29549 üzenetére
Régi excelben van erre egy függvény, de nem túl megbízható (változtatás esetén nem mindig frissül) - ráadásul azt hiszem ezt is macro-enabled-ben kell mentened, hogy működjön:
GET.CELL > Használata[ 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...
-
Delila_1
Topikgazda
válasz karlkani #29563 üzenetére
Póbáld ezzel:
Function SubMyColor(tartomány, Szinkod)
Dim CV As Range, osszeg As Double
Application.Volatile
For Each CV In tartomány
If CV.Font.ColorIndex = Szinkod Then osszeg = osszeg + CV
Next
SubMyColor = osszeg
End FunctionAz osszeg változónak lebegőpontos típust adtam, mert nem tudom, egész-, vagy törtszámok szerepelnek a tartományodban.
[ 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.
-
Delila_1
Topikgazda
válasz karlkani #29565 üzenetére
Szívesen.
Poffsoft:
Az Application.Volatile teszi lehetővé, hogy a saját függvények eredménye ne csak akkor változzon, ha a paramétereikben jön létre változás, hanem a lapon (füzetben?) történt egyéb változások alkalmával is.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.