28. januar 2008 - 13:28Der er
13 kommentarer og 1 løsning
Gennemsnit af data fra flere sheets
Jeg har X antal sheets. Disse skal der laaves et gennemsnit af værdierne i feltene B2 -> Bxx til J2->Jxx ( hvor xxx indtastets i startena af macroen) men antallet af sheets er varierende ( dette kunne dog godt indtastes i starten også men det ville være nemmere hvios det ikke behøves) Disse værdier skal ligges i et nyt sheet. Jeg kan ikke finde en funktion der lader mig variere antallet af felter der kikkes i.
Hvis det er snittet af alle de udpegede data i all ark, kan du bruge denne funktion, som bruges som alle andre funktioner. I parentesen skl du så angive nummeret på sidste række:
Function snitter(rknr As Long) As Double Dim res As Double Dim cou As Double
For Each s In ActiveWorkbook.Sheets For Each c In Range("b2:J" & rknr).Cells res = res + c.Value If Not IsEmpty(c.Value) Then cou = cou + 1 End If Next c Next s snitter = res / cou
Hvis du skal have snittet for hvert ark indsat for sig, kan du bruge noget i denne stil. Bare sørg for, at arket hvor resultaterne indsættes altid er det sidste i mappen
Sub Snit() Dim res As Double Dim cou As Double Dim Snit As Double rknr = InputBox("Indtast nummer på sidste række") snr = 1 For Each s In ActiveWorkbook.Sheets res = 0 cou = 0 For Each c In s.Range("b2:J" & rknr).Cells res = res + c.Value If Not IsEmpty(c.Value) Then cou = cou + 1 End If Next c On Error Resume Next Snit = res / cou Sheets(Sheets.Count).Range("a" & snr) = res / cou snr = snr + 1 Next s End Sub
Sub Summering() ' ' MakeSummary Macro ' ' Sheets("SUMMARY").Select ' Clear the existing values (if any) Range("$A$1:$Y$999").Value = "" ' J tracks the row number on the summary page ' I tracks the sheet number being processed J = 2 rk = 60 + 1 ' Givet fra mainsheet vr * pr
For I = 4 To Sheets.Count 'tæller antallet af sheets og slutter når den når til 4 A$ = Sheets(I).name ' Sheet numret t$ = I If (A$ = "SUMMARY") Then GoTo 10 ' Skipper gennemsnits siden så den ikke lægges til sig selv. ' If (Sheets(a$).Range("$C$1").Value = "") Then GoTo 10 ' Springer også ovre sheets uden navne For ra = 1 To rk e$ = ra
' Process the current sheet ' Range("A" + Format(2)) Range("A" + Format(e$)).FormulaR1C1 = "='" + A$ + "'!R" + e$ + "C" + t$ '+ Range("e$" + Format(e$)).FormulaR1C1 'range("plads i Summary dokumentet" + Rækken som det skal sættes ind på. 'Sheets("Sheet1").Cells(Row, Col).Value
'Range("A" + Format(e$)).FormulaR1C1 = "='" + a$ + "'!R" + e$ + "C" + t$ '+ Range("e$" + Format(e$)).FormulaR1C1 'range("plads i Summary dokumentet" + Rækken som det skal sættes ind på. 'Range("B" + Format(e$)).FormulaR1C1 = "='" + a$ + "'!R2C" + e$ '+ Range("e$" + Format(e$)).FormulaR1C1 'Range("C" + Format(e$)).FormulaR1C1 = "='" + a$ + "'!R2C" + e$ ' + A$ er dokument navnet og "'!R2C3" er pladsen som det hentes på 'Range("C" + Format(J)).FormulaR1C1 = "='" + a$ + "'!R2C4" ' skal ændres til range(cells(x,y)) eller noget i den stil J = J + 1 ' Flytter pladsen talles sættes på på sum siden Next ra
10 Next I
End Sub Men jeg kan ikke finde en funktion der tæller A op i denne line Range("A" + Format(e$)).FormulaR1C1 = "='" + A$ + "'!R" + e$ + "C" + t$ for resultatet er at alle værdierne skrives oven i hinanden og dermed slettes.
(legeledes er der ingen sum funktion endnu men det kommer når jeg kan gemme funktionernes værdier.
Jeg kan ikke helt genneskue, hvad er det er, du ønsker at opnå, men denne kode indsætter formeler i det sidste ark i mappen, i samme celler, som brugt i Ark1, der beregneer gennemnittet af hver af disse celler i hvert ark, og skriver resultatet i det sidste.
Sub Snit() Dim a As Integer Dim x As Integer
rknr = InputBox("Indtast nr på sidste række") a = Sheets.Count
Sheets(a).Select ActiveSheet.Range("b2:d" & rknr).Select For Each c In Selection.Cells c.FormulaLocal = "=MIDDEL(" & Sheets(1).Name & ":" & Sheets(a - 1).Name & _ "!" & c.Address & ")" Next c End Sub
Hvis det ikek er det du ønsker, må jeg nok melde fra.
Gætter på der menes at ark SUMMARY A1 skal indeholde snittet af alle øvrige arks A1 og ark SUMMARY A2 skal indeholde snittet af alle øvrige arks A2 osv.
Sub Summary() Sheets("SUMMARY").Select x = 6
For rk = 1 To x ' ret x til aktuel For kol = 1 To 10 'til kolonne J ret evt. For Each sh In ActiveWorkbook.Sheets If sh.Name <> "SUMMARY" Then tal = tal + sh.Cells(rk, kol) End If Next Sheets("SUMMARY").Cells(rk, kol) = tal / (Sheets.Count - 1) tal = 0 Next Next
excelent Det virker! Jeg elsker dig og vil opkalde min først fødte efter dig :-)
Mange tak for hjælpen det var lige det jeg skulle bruge. Nu skal den abre ordnes så der ikke går ged i den hvis der er er en tekst værdi i cellen. Men det må være til at lave :-D
For rk = 1 To x ' ret x til aktuel For kol = 1 To 10 'til kolonne J ret evt. For Each sh In ActiveWorkbook.Sheets If sh.Name <> "SUMMARY" Then If IsNumeric(sh.Cells(rk, kol)) Then tal = tal + sh.Cells(rk, kol) End If Next Sheets("SUMMARY").Cells(rk, kol) = tal / (Sheets.Count - 1) tal = 0 Next Next
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.