Word Skrevet 5. juli 2013 Del Skrevet 5. juli 2013 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
Harald Staff Skrevet 5. juli 2013 Del Skrevet 5. juli 2013 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
Word Skrevet 5. juli 2013 Forfatter Del Skrevet 5. juli 2013 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
Harald Staff Skrevet 5. juli 2013 Del Skrevet 5. juli 2013 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
Word Skrevet 6. juli 2013 Forfatter Del Skrevet 6. juli 2013 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå