/ Forside/ Teknologi / Administrative / MS-Office / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
MS-Office
#NavnPoint
sion 18709
refi 14474
Klaudi 9389
Rosco40 5695
berpox 5456
dk 5398
webnoob 4919
Benjamin... 4870
o.v.n. 4637
10  EXTERMINA.. 4373
Formel i excel
Fra : webnoob
Vist : 968 gange
200 point
Dato : 03-04-12 19:28

Jeg skal bruge en formel, evt. med VB, som kan input fra en celle og udregne resultat til en eller flere celler, samtidig skal den kunne vise resultat fra en anden celle.

Fx. Cellerne A1, A2 og A3 er cellerne der skal bruges. Man skal kunne skrive et tal i A1 og et resultat skal vises i A2 og A3, man skal kunne indtaste et tal i A2 og få vist et resultat i A1 og A3.
Håber det er til at forstå.

 
 
Kommentar
Fra : Benjamin.Hansen


Dato : 03-04-12 20:01

Marker den celle der skal vise resultat
tast et =

og skriv hvad resultatet skal være
f.eks
=SUM(A1+A2)


mvh Benjamin


Kommentar
Fra : Eyvind


Dato : 03-04-12 20:07

Det kan godt være at jeg læser det forkert, men det lyder som "cirkulerende" regning.
Hvilke værdier er cellerne afhængige af.



Kommentar
Fra : krestenklit


Dato : 03-04-12 20:18

Du kan ikke på en gang i et regneark anvende en celle til både indtastning og output fra en formel.
Hvis du skiftevis skal kunne indtaste forskellige tal i A1..A3 kan du få vist resultat i andre celler som overvåger om der er talværdier i A1..A3.

Kommentar
Fra : webnoob


Dato : 03-04-12 20:21

Eyvind, det er afhængig af hvilken kolonne jeg skal bruge. Men for "undervisnings skyld" skal A2 være 1/12 af A1 og A3 1/4 af A1.

Kommentar
Fra : Eyvind


Dato : 03-04-12 20:40

altså

tast ind i A1

A2 skal se sådan ud =SUM(A1/12)
A3 skal se sådan ud =SUM(A1/4)

Kommentar
Fra : webnoob


Dato : 03-04-12 20:46

Ja, men man skal kunne taste ind i A2 eller A3 og samme resultat i alle 3 celler.

Kommentar
Fra : Eyvind


Dato : 03-04-12 20:54

Sorry det vil Excel ikke være med til - cirkulær reference.........................

Skal du lave noget lignende skal du bruge andre resultat-celler hvor beregningerne så ligger.

A1 tast / B1 resultat
A2 tast / B2 resultat
A3 tast / B3 resultat

Eller noget i den stil

Kommentar
Fra : pedroso


Dato : 03-04-12 20:55

Den går ikke uden brug af en makro :)

Men så er det til gengæld ret så ligetil. Du kan f.eks. bruge en worksheet.change event og så kigge på hvilken af værdierne i cellerne A1 til A3, som har ændret sig. Derefter putte værdier i de to andre celler.

Kommentar
Fra : webnoob


Dato : 03-04-12 20:58

Jo det kan det, med VBA, kan bare ikke lige hitte ud af det.

Kommentar
Fra : pedroso


Dato : 03-04-12 21:01

makro=VBA

Prøv at google lidt om det. Jeg kan godt strikke noget sammen til dig, men du får sikkert brug for at rode lidt med det alligevel, og så er det jo godt at have noget kendskab til hvordan det virker.

Kommentar
Fra : sion


Dato : 04-04-12 08:11

Som pedroso skriver, skal du bruge worksheet_change.

Indsæt følgende kode i arkets kode (evt. højreklik på ark-fanen og vælg "View code" ("Vis kode")):

Kode
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("A2").Value = Range("A1").Value / 12
Range("A3").Value = Range("A1").Value / 4

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("A2")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("A1").Value = Range("A2").Value * 12
Range("A3").Value = Range("A1").Value / 4

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("A3")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("A1").Value = Range("A3").Value * 4
Range("A2").Value = Range("A1").Value / 12

Application.EnableEvents = True 'Events aktiveres igen

End If

End Sub


Simon

Kommentar
Fra : webnoob


Dato : 04-04-12 10:48

Det virker sådan set ok, der dog nogle ting jeg godt kunne tænke mig var anderledes.
Når jeg har indtastet et tal, skal jeg trykke enter og hoppe tilbage til cellen før de andre celler bliver opdateret. Kan dette ændres?

En anden ret værenlig ting, koden virker på alle mine ark og ikke kun test arket, kan du begrænse koden til fx. ark 5 eller test ark?

Kommentar
Fra : webnoob


Dato : 04-04-12 11:04

Har rettet arkafgrænsning.

Kommentar
Fra : sion


Dato : 04-04-12 11:30

Jeg kan ikke forstå, at de andre celler ikke ændrer sig med det samme, du trykker ENTER. Det burde ikke være nødvendigt at flytte markeringen tilbage til den celle, du har indtastet noget i.

Du bruger ikke Worksheet_SelectionChange, vel?

Mvh. Simon

Kommentar
Fra : webnoob


Dato : 04-04-12 11:49

Jo det var jeg komme til, men nu har jeg sgu' et andet problem, jeg har rettet lidt i din kode, nu virker det ikke når jeg skriver noget i D1

Citat
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("$A$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$B$1").Value = Range("$A$1").Value / 2
Range("$C$1").Value = Range("$A$1").Value / 4
Range("$D$1").Value = Range("$A$1").Value / 12

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("$B$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$A$1").Value = Range("$B$1").Value * 2
Range("$C$1").Value = Range("$B$1").Value / 4
Range("$D$1").Value = Range("$B$1").Value / 6

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("$C$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$A$1").Value = Range("$C$1").Value * 4
Range("$B$1").Value = Range("$A$1").Value / 2
Range("$D$1").Value = Range("$C$1").Value / 3

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("$D$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$A1$").Value = Range("$D$1").Value * 12
Range("$B$1").Value = Range("$D$1").Value * 6
Range("$C$1").Value = Range("$D$1").Value * 3

Application.EnableEvents = True 'Events aktiveres igen

End If

End Sub


Kommentar
Fra : sion


Dato : 04-04-12 12:58

Det virker ikke, fordi du har skrevet Range("$A1$").Value i første række i den sidste kode-sektion. Dollar-tegnet står forkert - det skal stå før 1-tallet i stedet for efter.

Når makroen er gået i stå pga. en fejl (som du oplevede), er den gået i stå mens Events er deaktiveret. For at din kode skal virke igen fremover, kan du køre denne kode (indsæt i et modul i VBA og start i menuen Makro i Excel):

Kode
Sub Aktiver_events()

Application.EnableEvents = True

End Sub


Du kan indarbejde en lille smule ekstra kode i den oprindelige kode (én linje øverst og fire linjer nederst), så den ved fejl giver en besked og derefter aktiverer Events, før den stopper:

Kode
Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ErrorHandler:

If Not Intersect(Target, Range("$A$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$B$1").Value = Range("$A$1").Value / 2
Range("$C$1").Value = Range("$A$1").Value / 4
Range("$D$1").Value = Range("$A$1").Value / 12

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("$B$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$A$1").Value = Range("$B$1").Value * 2
Range("$C$1").Value = Range("$B$1").Value / 4
Range("$D$1").Value = Range("$B$1").Value / 6

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("$C$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$A$1").Value = Range("$C$1").Value * 4
Range("$B$1").Value = Range("$A$1").Value / 2
Range("$D$1").Value = Range("$C$1").Value / 3

Application.EnableEvents = True 'Events aktiveres igen

End If

If Not Intersect(Target, Range("$D$1")) Is Nothing Then

Application.EnableEvents = False 'For at undgå at koden looper

Range("$A1$").Value = Range("$D$1").Value * 12
Range("$B$1").Value = Range("$D$1").Value * 6
Range("$C$1").Value = Range("$D$1").Value * 3

Application.EnableEvents = True 'Events aktiveres igen

End If

Exit Sub

ErrorHandler:
MsgBox "Fejl!"
Application.EnableEvents = True 'Events aktiveres igen

End Sub


Mvh. Simon

Kommentar
Fra : sion


Dato : 04-04-12 12:59

Bemærk at fejlen med dollar-tegnet stadig står i den kode, jeg senest har skrevet ovenfor.

Mvh. Simon

Accepteret svar
Fra : sion

Modtaget 200 point
Dato : 04-04-12 13:18

Det hele kan forsimples og forskønnes en smule, og så har jeg rettet det, jeg tror var en fejl fra din side:

Kode
Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ErrorHandler:

Application.EnableEvents = False 'For at undgå at koden looper

If Not Intersect(Target, Range("$A$1")) Is Nothing Then

Range("$B$1").Value = Range("$A$1").Value / 2
Range("$C$1").Value = Range("$A$1").Value / 4
Range("$D$1").Value = Range("$A$1").Value / 12

End If

If Not Intersect(Target, Range("$B$1")) Is Nothing Then

Range("$A$1").Value = Range("$B$1").Value * 2
Range("$C$1").Value = Range("$B$1").Value / 2 'Rettet fra 4 til 2 (Simon)
Range("$D$1").Value = Range("$B$1").Value / 6

End If

If Not Intersect(Target, Range("$C$1")) Is Nothing Then

Range("$A$1").Value = Range("$C$1").Value * 4
Range("$B$1").Value = Range("$A$1").Value / 2
Range("$D$1").Value = Range("$C$1").Value / 3

End If

If Not Intersect(Target, Range("$D$1")) Is Nothing Then

Range("$A$1").Value = Range("$D$1").Value * 12
Range("$B$1").Value = Range("$D$1").Value * 6
Range("$C$1").Value = Range("$D$1").Value * 3

End If

Application.EnableEvents = True 'Events aktiveres igen

Exit Sub

ErrorHandler:
MsgBox "Fejl!"
Application.EnableEvents = True 'Events aktiveres igen i tilfælde af fejl

End Sub


Mvh. Simon

Kommentar
Fra : webnoob


Dato : 04-04-12 22:27

Så virker det, nu kunne det bare være nice hvis man kan få det til at virke på flere rækker, fx. ved at man skriver i koden hvilke rækker det skal være.

Kommentar
Fra : sion


Dato : 13-04-12 09:36

Ja, så må du jo se om du kan få det til at fungere.

Simon

Godkendelse af svar
Fra : webnoob


Dato : 13-04-12 09:46

Tak for svaret sion.
Ja det er jo det, men det vil jeg prøve og finde ud af.

Kommentar
Fra : sion


Dato : 13-04-12 10:05

Du kan sammensætte dine Ranges på denne måde:

Range("$A$" & MyRow)
Range("$B$" & MyRow)
Range("$C$" & MyRow)
Range("$D$" & MyRow)

I begyndelsen af koden kan du definere rækkenummeret:

Dim MyRow as Integer
MyRow = 1 'indtast rækkenummer her

Koden bliver så:
Kode
Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ErrorHandler:

Dim MyRow As Integer
MyRow = 2 'indtast rækkenummer her

Application.EnableEvents = False 'For at undgå at koden looper

If Not Intersect(Target, Range("$A$" & MyRow)) Is Nothing Then

Range("$B$" & MyRow).Value = Range("$A$" & MyRow).Value / 2
Range("$C$" & MyRow).Value = Range("$A$" & MyRow).Value / 4
Range("$D$" & MyRow).Value = Range("$A$" & MyRow).Value / 12

End If

If Not Intersect(Target, Range("$B$" & MyRow)) Is Nothing Then

Range("$A$" & MyRow).Value = Range("$B$" & MyRow).Value * 2
Range("$C$" & MyRow).Value = Range("$B$" & MyRow).Value / 2 'Rettet fra 4 til 2 (Simon)
Range("$D$" & MyRow).Value = Range("$B$" & MyRow).Value / 6

End If

If Not Intersect(Target, Range("$C$" & MyRow)) Is Nothing Then

Range("$A$" & MyRow).Value = Range("$C$" & MyRow).Value * 4
Range("$B$" & MyRow).Value = Range("$A$" & MyRow).Value / 2
Range("$D$" & MyRow).Value = Range("$C$" & MyRow).Value / 3

End If

If Not Intersect(Target, Range("$D$" & MyRow)) Is Nothing Then

Range("$A$" & MyRow).Value = Range("$D$" & MyRow).Value * 12
Range("$B$" & MyRow).Value = Range("$D$" & MyRow).Value * 6
Range("$C$" & MyRow).Value = Range("$D$" & MyRow).Value * 3

End If

Application.EnableEvents = True 'Events aktiveres igen

Exit Sub

ErrorHandler:
MsgBox "Fejl!"
Application.EnableEvents = True 'Events aktiveres igen i tilfælde af fejl

End Sub


Simon

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste