- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- bitpork: Phautós tali a Balcsinál 2025 Augusztus 2 napján (szombat)
- gban: Ingyen kellene, de tegnapra
- vrob: Az utolsó DOS játékok 1996 - 1997-ben, egy korszak lezárul
- hege8888: Retro Kocka Kuckó 3
- Rap, Hip-hop 90'
- droidic: A fapados NAS tuningolása
- D1Rect: Nagy "hülyétkapokazapróktól" topik
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
-
LOGOUT
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
-
Mutt
senior tag
válasz
csongi #27684 üzenetére
Hello,
...egy adott cellába, legyen egy képlet, de ha kézzel beleírok akkor a beírt érték legyen, viszont ne vesszen el a képlet sem....
Van egy kevésbé használt függvény az S (angolul N), ami ha szöveget kap értéknek, akkor nem számol vele.
pl. =N("komment") értéke 0 és ezek után =2+N("komment") cella értéke is 2 lesz.Ez a függvény jön itt nekünk segítségre, mivel a cella képletét ebbe a függvénybe elrejtjük.
A lenti makróval első lépésként megjegyezzük a cella tartalmát és képletét ha van a Worksheet_SelectionChange eseménnyel. Az egyszerűség kedvéért csak akkor tesszük, ha egyszerre 1 cella van módosítva.
A második lépésben ha a változik vmi a lapon, akkor a Worksheet_Change esemény lép akcióba és attól függően, hogy volt-e képlet vagy sem, esetleg töröltük a cella bedobja ami kell éppen.
A kód nem tökéletes, iránymutatásnak szántam.
Option Explicit
Dim KepletVanBenne As Boolean
Dim Tartalom As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
KepletVanBenne = False
Tartalom = ""
If Target.Cells.Count = 1 Then 'egyszerűség kedvéért csak 1 cellára dolgozunk
KepletVanBenne = Target.HasFormula 'megnézzük hogy van-e képlet a cellában
If KepletVanBenne Then Tartalom = Target.FormulaLocal 'elmentjük a képletet egy változóba
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim EredetiKeplet
Dim Keresni As String
'Excel nyelvének megállapítása
If Application.LanguageSettings.LanguageID(msoLanguageIDUI) = 1038 Then
Keresni = "+S("
Else
Keresni = "+N("
End If
If Target.Cells.Count = 1 Then 'egyszerűség kedvéért csak 1 cellára dolgozunk
'ha az új cella konstans akkor mögétesszük a képletet, ha volt korábban
If Not Target.HasFormula Then
'megnézzük hogy a korábban volt-e képlet a cellában, ha igen akkor kinyerjük az eredeti képletet onnan
EredetiKeplet = Split(Tartalom, Keresni) 'bízunk benne, hogy nincs a cellában +N( kifejezés más indok miatt
If IsArray(EredetiKeplet) And UBound(EredetiKeplet) > 0 Then
'itt kicsit formázni kell mivel vmi ilyet kapunk vissza "=A1"), de nekünk csak =A1 kell
Tartalom = Mid(EredetiKeplet(1), 2, Len(EredetiKeplet(1)) - 3)
End If
'ha törlik a cella tartalmát, akkor berakuk az eredeti képletet
If Target.Value = "" Then
Target.FormulaLocal = Tartalom
Else
Target.Formula = "=" & Target.Value & "+N(""" & Tartalom & """)" 'az új cellatartalom az lesz, hogy bevitt érték + korábbi formula
End If
End If
End If
End Subüdv.
-
azopi74
addikt
válasz
csongi #27684 üzenetére
Egy cella egyszerre csak értéket tud tárolni, de persze vba-val minden megoldható. De előtte tisztázzuk: a munkalap minden cellájára alkalmazni szeretnéd, vagy csak adott tartományra? És ennek mi értelme is van pontosan? Csak mert lehet, hogy van más, ésszerűbb megoldás is, pl tábla használat, vagy képletek backupolása egy másik munkalapra, csak attól függ, mi a cél pontosan.
Új hozzászólás Aktív témák
- Microsoft Windows, Office & Vírusirtók: Akciók, Azonnali Szállítás, Garantált Minőség, Garancia!
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- 27%-OS ÁFÁS SZÁMLA I Jogtiszta Microsoft digitális és fizikai termékek I DIGITALKEYZ.COM
- Több mint 70.000 eladott szoftverlicenc
- Azonnali kézbesítés az év bármely pillanatában
- Apple iPhone SE 16GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! ASRock B450M R5 2600X 16GB DDR4 500GB SSD 1TB HDD GTX 1650 4GB Zalman N5 CM 450W
- Dixit 4 Eredet (bontatlan, fóliás kártyacsomag)
- Bomba ár! Lenovo ThinkPad T450s - i5-5GEN I 12GB I 500GB SSD I 14" HD+ I Cam I W10 I Garancia!
- LG 27GS95QE - 27" OLED / QHD 2K / 240Hz & 0.03ms / 1000 Nits / NVIDIA G-Sync / AMD FreeSync
Állásajánlatok
Cég: FOTC
Város: Budapest