28. april 2021 - 18:45Der er
27 kommentarer og 2 løsninger
sum formel
Hej herinde. Jeg er stødt ind i et problem med en udregning af en sum celle. Jeg har tre celler A1, B1 og C1. A1 skal være en form for sumcelle. Hvis jeg skriver et tal ind i B1, skal det summeres med det tal som står i A1. Derefter skal tallet jeg satte ind i B1 forsvinde igen. Næste gang jeg sætter et tal ind i B1 skal det lægges til det tal som stå i A1. og så videre. Den samme procedure skal ske med det tal jeg sætter ind i C1, undtagen at tallet skal trækkes fra A1. Tallet i C1 må ikke være større end det som står i A1, så skal den komme med en fejlmelding i C1. Jeg håber at det kan forstås og at det kan løses. Ib
Som du skriver det, kan du ikke gøre det med formler. Hvis du vil lave en sum beregning mellem A1 og B1, og så bagefter fjerne B1, så fjerner du også beregnings kriteriet.
#1 Har ikke lige adgang til Excel og er stort set enig med dig i, at det bør løses med vba men kan det ikke gøres ved at acceptere cirlulære referencer, sætte anallet af iterationer til 1 og slå manuel beregning til? Bortset fra det med den automatiske sletning.
#2 - Hvis jeg læser spørgsmålet rigtigt (fjerne B1), så vil beregnings kriteriet forsvinde. Hvis det blev til en cirkulær reference værdi, kunne man nok leve med det, men det gør det ikke i tilfældet her.
#3 Hvis du inA1 har denne formel =A1+B1-C1 8g laver de indstillinger jeg nævnte. Står der Fx 7 i A1 og du skriver 3 i B1 vil A1 blive 10, når du trykke F9.,Så,skal du manuelt slette B1. Når du skriver 5 i B1 8g trykker F9 ændresvA1 til 15. Tilsvarende med C1, bare negativt.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B1:C1")) Is Nothing Then If Target.Column = 2 And Cells(1, 2) <> 0 Then Cells(1, 1) = Cells(1, 1) + Cells(1, 2) Cells(1, 2) = 0 End If If Target.Column = 3 And Cells(1, 3) <> 0 Then If Cells(1, 1) < Cells(1, 3) Then MsgBox ("C1 er mindre ned A1") Else Cells(1, 1) = Cells(1, 1) - Cells(1, 3) Cells(1, 3) = 0 End If End If
Hej Herinde. Jens. din kode virker perfekt, bortset fra at jeg ikke kan gemme arket med VBA. Kan din kode udvides til også at bruge A2-B2-C2 ,og er det meget vanskeligt. Jan. Ved ikke din formel virker endnu. Skal lige finde ud af det der manuel beregning. Hvis nogen ved det, må de meget gerne skrive. Ib
Hvorfor kan du ikke gemme arket med VBA? Har du valgt "Excel Macro-enabled Workbook" inden du har forsøgt at gemme det?
Jeg har rettet makroen til så A2:C2 er inkluderet.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B1:C2")) Is Nothing Then If Target.Column = 2 And Target <> 0 Then Target.Offset(0, -1) = Target.Offset(0, -1) + Target Target = 0 End If If Target.Column = 3 And Target <> 0 Then If Target.Offset(0, -2) < Target Then MsgBox ("Tal i kolonne C er mindre end det i kolonne A") Else Target.Offset(0, -2) = Target.Offset(0, -2) - Target Target = 0 End If End If End If End Sub
Hej. Jens48. nu har jeg fundet ud af at gemme med VBA, og at udvide til andre celler, så jeg siger foreløbig tak for hjælpen. jeg håber at jeg må skrive og bede om mere hjælp hvis det blir nødvendig. Ib
Hej igen herinde. Jeg har brugt ovenstående kode lavet af Jens48, men er stødt ind i nogle problemer, som jeg håber I kan hjælpe mig med. Jeg har brug for at det er B7:D7, B9:D9 og B21:D21 som bruges. Det drejer sig om mange andre celler, men jeg håber på at hvis I kan hjælpe mig med de her celler, vil jeg prøve om jeg selv at finde ud af resten. Jeg har også problemer med at låse arket, men dem tager jeg i et andet spørgsmål. Håber nogen kan hjælpe. På forhånd tak. Ib
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C7:D7, C9:D9, C21:D21")) Is Nothing Then If Target.Column = 3 And Target <> 0 Then Target.Offset(0, -1) = Target.Offset(0, -1) + Target Target = 0 End If If Target.Column = 4 And Target <> 0 Then If Target.Offset(0, -2) < Target Then MsgBox ("Tal i kolonne D er mindre end det i kolonne B") Else Target.Offset(0, -2) = Target.Offset(0, -2) - Target Target = 0 End If End If End If End Sub
Hej Jens. Det virker jo fantastisk, og jeg har selv fundet ud af at udvide koden til alle de celler jeg skal bruge .Tusind tak for hjælpen. Ved du tilfældigvis hvordan man låser arket så man kun kan skrive i nogle celler? Hilsen Ib
VBA kan ikke skrive i låste celler, så enten skal du lade være med at låse dem eller også skal der i makroen indsættes et par ekstra linjer i start og slut a la:
Hej Det kan jeg ikke forstå. Arket skal for det mest være låst, og nogle celler som jeg kan skrive i. Vil du ikke sætte det sidste ind i din VBA så jeg kan se hvordan det skal se ud. Ib
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C7:D7, C9:D9, C21:D21")) Is Nothing Then Worksheets("iPhone6").Unprotect Password:="password" If Target.Column = 3 And Target <> 0 Then Target.Offset(0, -1) = Target.Offset(0, -1) + Target Target = 0 End If If Target.Column = 4 And Target <> 0 Then If Target.Offset(0, -2) < Target Then MsgBox ("Tal i kolonne D er mindre end det i kolonne B") Else Target.Offset(0, -2) = Target.Offset(0, -2) - Target Target = 0 End If End If Worksheets("iPhone6").Protect Password:="password" End If End Sub
Bemærk at jeg har benævnt arket "iPhone6", selv om du skrev "iPhone 6" Hele makroen skal sættes ind på hvert ark du ønsker behandlet. Husk at rette arknavn
Hej Jens. Har ikke nået at få kigget så meget, og desværre går der nok en uge, før jeg får tid igen, men det ser godt ud, og jeg siger foreløbig tak for hjælpen. Ib
Hej jens. Nu er jeg endelig vendt hjem fra ferie, og fået afprøvet din sidste VBA. Den fungerer jo helt perfekt, og jeg takker dig mange gange. Hilsen Ib
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.