Gå til innhold

Lage gjennomsnittsverdier av brukerdefinert "Range"


Word

Anbefalte innlegg

Hei,

 

jeg har flere tusen tall som ligger i en kolonne. Ved hjelp av en makro ønsker jeg å definere en gitt "range" ved hjelp av en brukerdefinert input. Makroen skal ta gjennomsnittet av "range", og putte den i en celle. Dette skal repetere seg til det ikke er flere tall igjen i kolonnen. Kan noen hjelpe meg med dette?

 

Jeg har foreløpig prøvd å lage noe slikt:

 

Sub CellsExample()
sInput = InputBox("Enter number of elements of half flange")
  If sInput = "" Then Exit Sub
  x = CLng(Val(sInput))
   Range("H14").Value = Application.WorksheetFunction.Average(Range(Cells(7, 3), Cells(x + 6, 3)))
End Sub

Lenke til kommentar
Videoannonse
Annonse

Hei

 

Hvis jeg forstår deg rett, her er et rammeverk for loopen:

 

Sub test()
Dim R1 As Long, R2 As Long, RL As Long, i As Long
RL = Cells(Rows.Count, 3).End(xlUp).Row
R1 = 7
Do
   i = Application.InputBox("Hvor mange?", "Word spør", 10, Type:=1)

   If i = 0 Then

    MsgBox "Da avbryter vi"

    Exit Sub

   End If

   R2 = R1 + i - 1

   If R2 > RL Then R2 = RL

   Range(Cells(R1, 3), Cells(R2, 3)).Select

   MsgBox R1 & "-" & R2

   R1 = R1 + i

Loop Until R2 >= RL
End Sub

 

Bytt ut

 

Range(Cells(R1, 3), Cells(R2, 3)).Select

MsgBox R1 & "-" & R2

 

med det du skal gjøre.

Select er ellers ikke så dumt som en indikator på at programmet lystrer.

 

(Og før noen spør, Application.Inputbox type 1 er en måte å sikre at det skrives inn tall og ikke bokstaver)

 

HTH. Beste hilsen Harald

Lenke til kommentar

Takker! Alltid så hjelpsom du Harald :)

 

Endret koden slik at jeg kun behøver gi input en gang.

Vet du hvordan jeg kan få makroen til å liste gjennomsnittsverdiene etter hverandre?

Det vil si: gjennomsnittsverdi fra første loop i celle T7, neste i celle T8 osv.

 

 [/sub]
[sub] Sub test()
Dim R1 As Long, R2 As Long, RL As Long, i As Long
RL = Cells(Rows.Count, 3).End(xlUp).Row
R1 = 7
i = Application.InputBox("Hvor mange?", "Word spør", 20, Type:=1)
Do

   If i = 0 Then

	    MsgBox "Da avbryter vi"

	    Exit Sub

   End If

   R2 = R1 + i - 1

   If R2 > RL Then R2 = RL


   Range(Cells(R1, 20), Cells(R2, 20)).Value = Application.WorksheetFunction.Average(Range(Cells(R1, 3), Cells(R2, 3)))[/sub]
[sub]   
   R1 = R1 + i

Loop Until R2 >= RL
End Sub[/sub]
[sub]
Lenke til kommentar

Det er flere måter. Her er en hvor resultatskrivingen er en egen makro. Legg denne under prosedyren din (etter End Sub)

 

Sub SkrivResultat(Beskrivelse As String, Tall As Double)
Dim RW As Long
Dim CW1 As Long 'skrivekolonne for Beskrivelse
Dim CW2 As Long 'skrivekolonne for tall
CW1 = 18 ' kolonne S
CW2 = 19 'kolonne T
RW = Cells(Rows.Count, CW2).End(xlUp).Row + 1
If RW < 7 Then RW = 7
Cells(RW, CW1).Value = Beskrivelse
Cells(RW, CW2).Value = Tall
End Sub

 

Så kaller du den fra loopen din slik:

 

Call SkrivResultat("Snitt rad " & R1 & " - " & R2, _
   Application.WorksheetFunction.Average(Range(Cells(R1, 3), Cells(R2, 3))))

 

HTH. Beste hilsen Harald

Lenke til kommentar

Det er flere måter. Her er en hvor resultatskrivingen er en egen makro. Legg denne under prosedyren din (etter End Sub)

 

Sub SkrivResultat(Beskrivelse As String, Tall As Double)
Dim RW As Long
Dim CW1 As Long 'skrivekolonne for Beskrivelse
Dim CW2 As Long 'skrivekolonne for tall
CW1 = 18 ' kolonne S
CW2 = 19 'kolonne T
RW = Cells(Rows.Count, CW2).End(xlUp).Row + 1
If RW < 7 Then RW = 7
Cells(RW, CW1).Value = Beskrivelse
Cells(RW, CW2).Value = Tall
End Sub

 

Så kaller du den fra loopen din slik:

 

Call SkrivResultat("Snitt rad " & R1 & " - " & R2, _
Application.WorksheetFunction.Average(Range(Cells(R1, 3), Cells(R2, 3))))

 

HTH. Beste hilsen Harald

 

 

Fungerte perfekt! Takker!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...