Avatar billede ceacer Praktikant
07. december 2007 - 16:51 Der er 6 kommentarer og
1 løsning

Rette i makro

Jeg har brug for at få rettet i nedenstående makro, og kan ikke selv gennemskue det.
Nye ændringer:
Under Input er der nu tilføjet et ekstra selskab, således at der er værdier til række 3000.
Under Bearbejdning har hvert selskab sin egen kolonne, så det nye selskab får kolonne S og så rykkes summeringen til kolonne T.
Det er de to eneste ændringer, men jeg kan ikke helt overskue, hvor jeg skal rette det til i makroen.

Sub find()
'----------------------------------------------
Application.Calculation = xlCalculationManual
'----------------------------------------------
Dim adr As Range
Dim adr4 As Range
Dim søg As String
Dim adr2, adr3, t, rk
Dim s1, s2, s3, s4, s5, s6
Dim x, x1
Application.ScreenUpdating = False
Sheets("Input").Range("B1").EntireColumn.Hidden = False '*NY* kolonne B i Input gøres synlig imens koden kører
rk = Sheets("Bearbejdning").Cells(1000, 2).End(xlUp).Row 'finder sidste række med værdi i kolonne B
Sheets("Bearbejdning").Range("C10:R1000") = "" '*NY* fjerner evt gl. tekst/værdi inden ny skrives ved Opdater
Sheets("Bearbejdning").Range("C10:R" & rk) = 0 ' område C10:R? - hvor ? = sidste række med værdi i kolonne B
On Error Resume Next

'---- indsætte værdier i Bearbejdning -------
For j = 1 To 16
søg = Sheets("Bearbejdning").Cells(8, j + 2) ' søg får værdien i række 8 kolone c til r efter tur
For t = 1 To rk
søg2 = Sheets("Bearbejdning").Cells(t + 9, 2)
Set adr = Sheets("Input").Range("B30:B2600").find(what:=søg, LookIn:=xlValues, lookat:=xlWhole)
adr2 = Sheets("Input").Range(adr.Address).End(xlDown).Row
adr3 = Sheets("Input").Range(adr.Address).Row
Set adr4 = Sheets("Input").Range("C" & adr3 & ":C" & adr2).find(what:=søg2, LookIn:=xlValues, lookat:=xlWhole)
Sheets("Bearbejdning").Cells(t + 9, 2 + j) = adr4.Offset(0, 2).Value
If Sheets("Bearbejdning").Cells(t + 9, 2) = "-" Then
Sheets("Bearbejdning").Cells(t + 9, 2 + j) = "": Sheets("Bearbejdning").Cells(t + 9 + 1, 2 + j) = ""
End If
Next
Next

On Error GoTo 0
'---- Indsætte SUM i Bearbejdning ---------
s1 = 9
s2 = s1 + WorksheetFunction.CountA(Sheets("Kurslister").Range("B7:B175")) - 1
s3 = s2 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("C7:C175")) - 1
s4 = s3 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("D7:D175")) - 1
s5 = s4 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("E7:E175")) - 1
s6 = s5 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("F7:F175")) - 1
'MsgBox ("") & s1 & "-" & s2 & "-" & s3 & "-" & s4 & "-" & s5 & "-" & s6
Sheets("Bearbejdning").Cells(s2, 3).Formula = "=sum(C10:C" & s2 - 1 & ")"
Sheets("Bearbejdning").Cells(s2, 3).Copy Sheets("Bearbejdning").Range("D" & s2 & ":R" & s2)
Sheets("Bearbejdning").Cells(s3, 3).Formula = "=sum(C" & s2 + 2 & ":C" & s3 - 1 & ")"
Sheets("Bearbejdning").Cells(s3, 3).Copy Sheets("Bearbejdning").Range("D" & s3 & ":R" & s3)
Sheets("Bearbejdning").Cells(s4, 3).Formula = "=sum(C" & s3 + 2 & ":C" & s4 - 1 & ")"
Sheets("Bearbejdning").Cells(s4, 3).Copy Sheets("Bearbejdning").Range("D" & s4 & ":R" & s4)
Sheets("Bearbejdning").Cells(s5, 3).Formula = "=sum(C" & s4 + 2 & ":C" & s5 - 1 & ")"
Sheets("Bearbejdning").Cells(s5, 3).Copy Sheets("Bearbejdning").Range("D" & s5 & ":R" & s5)
Sheets("Bearbejdning").Cells(s6, 3).Formula = "=sum(C" & s5 + 2 & ":C" & s6 - 1 & ")"
Sheets("Bearbejdning").Cells(s6, 3).Copy Sheets("Bearbejdning").Range("D" & s6 & ":R" & s6)
'--------------------------------------
Application.Calculation = xlAutomatic
'--------------------------------------
Sheets("Input").Range("B1").EntireColumn.Hidden = True '*NY* kolonne B i Input skjules igen
Application.ScreenUpdating = True

End Sub
Avatar billede jlemming Nybegynder
09. december 2007 - 15:26 #1
Kunne du ikke prøve at beskrive hvad koden gør idag, og så det nye

1) ændres fra række 1000 til 3000. Korrekt opfattet?

2) ?
Avatar billede ceacer Praktikant
09. december 2007 - 15:54 #2
1) ikke helt - fra 2600 til 3000.
2) Det er meget svært at forklare, men makroen samler data fra Input og Kurslister i en matrice i Bearbejdning. Under Input er der en masse selskaber og deres handler. fx:
selskab x
aktie a 100
aktie b 200
osv.

Under kurslister står er der så valgt nogle af disse aktier ud. Det overføres så alt sammen til bearbejdning således:

          selskab x  selskab y osv...  Sum
aktie a      100                          100
aktie b      200                          200
aktie c
osv.

Det hele samles altså i én stor matrice. Problemet er nu, at der er kommet et ekstra selskab ind, så der er 3000 rækker under Input mod ca. 2600 før. Derudover giver det et problem med, at summen i sidste kolonne i Bearbejdning skal rykkes en kolonne (fra S til T) og at der i S nu indføres data for det nye selskab. Mit store problem består i at få overført data for det nye selskab til denne kolonne.

Jeg håber det giver mening. Ellers skriv igen!
Avatar billede ceacer Praktikant
10. december 2007 - 19:27 #3
Jeg forhøjet antal point til 200, da det er meget vigtigt for mit ark.
Jeg kan også sende arket, hvis det hjælper nogen?
Avatar billede excelent Ekspert
11. december 2007 - 17:09 #4
prøv send til pm@madsen.tdcadsl.dk
Avatar billede ceacer Praktikant
11. december 2007 - 19:51 #5
mail sendt
Avatar billede excelent Ekspert
14. december 2007 - 11:14 #6
ok
Avatar billede ceacer Praktikant
14. december 2007 - 12:35 #7
Svaret:

Sub find()
'----------------------------------------------
Application.Calculation = xlCalculationManual
'----------------------------------------------
Dim adr As Range
Dim adr4 As Range
Dim søg As String
Dim adr2, adr3, t, rk
Dim s1, s2, s3, s4, s5, s6
Dim x, x1
Application.ScreenUpdating = False
Sheets("Input").Range("B1").EntireColumn.Hidden = False '*NY* kolonne B i Input gøres synlig imens koden kører
rk = Sheets("Bearbejdning").Cells(1000, 2).End(xlUp).Row 'finder sidste række med værdi i kolonne B
Sheets("Bearbejdning").Range("C10:S1000") = "" '*NY* fjerner evt gl. tekst/værdi inden ny skrives ved Opdater
Sheets("Bearbejdning").Range("C10:S" & rk) = 0 ' område C10:S? - hvor ? = sidste række med værdi i kolonne B
On Error Resume Next

'---- indsætte værdier i Bearbejdning -------
For j = 1 To 17 '16
søg = Sheets("Bearbejdning").Cells(8, j + 2) ' søg får værdien i række 8 kolone c til r efter tur
For t = 1 To rk
søg2 = Sheets("Bearbejdning").Cells(t + 9, 2)
Set adr = Sheets("Input").Range("B30:B2710").find(what:=søg, LookIn:=xlValues, lookat:=xlWhole)
adr2 = Sheets("Input").Range(adr.Address).End(xlDown).Row
adr3 = Sheets("Input").Range(adr.Address).Row
Set adr4 = Sheets("Input").Range("C" & adr3 & ":C" & adr2).find(what:=søg2, LookIn:=xlValues, lookat:=xlWhole)
Sheets("Bearbejdning").Cells(t + 9, 2 + j) = adr4.Offset(0, 2).Value
If Sheets("Bearbejdning").Cells(t + 9, 2) = "-" Then
Sheets("Bearbejdning").Cells(t + 9, 2 + j) = "": Sheets("Bearbejdning").Cells(t + 9 + 1, 2 + j) = ""
End If
Next
Next

On Error GoTo 0
'---- Indsætte SUM i Bearbejdning ---------
s1 = 9
s2 = s1 + WorksheetFunction.CountA(Sheets("Kurslister").Range("B7:B175")) - 1
s3 = s2 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("C7:C175")) - 1
s4 = s3 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("D7:D175")) - 1
s5 = s4 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("E7:E175")) - 1
s6 = s5 + 2 + WorksheetFunction.CountA(Sheets("Kurslister").Range("F7:F175")) - 1
'MsgBox ("") & s1 & "-" & s2 & "-" & s3 & "-" & s4 & "-" & s5 & "-" & s6
Sheets("Bearbejdning").Cells(s2, 3).Formula = "=sum(C10:C" & s2 - 1 & ")"
Sheets("Bearbejdning").Cells(s2, 3).Copy Sheets("Bearbejdning").Range("D" & s2 & ":S" & s2)
Sheets("Bearbejdning").Cells(s3, 3).Formula = "=sum(C" & s2 + 2 & ":C" & s3 - 1 & ")"
Sheets("Bearbejdning").Cells(s3, 3).Copy Sheets("Bearbejdning").Range("D" & s3 & ":S" & s3)
Sheets("Bearbejdning").Cells(s4, 3).Formula = "=sum(C" & s3 + 2 & ":C" & s4 - 1 & ")"
Sheets("Bearbejdning").Cells(s4, 3).Copy Sheets("Bearbejdning").Range("D" & s4 & ":S" & s4)
Sheets("Bearbejdning").Cells(s5, 3).Formula = "=sum(C" & s4 + 2 & ":C" & s5 - 1 & ")"
Sheets("Bearbejdning").Cells(s5, 3).Copy Sheets("Bearbejdning").Range("D" & s5 & ":S" & s5)
Sheets("Bearbejdning").Cells(s6, 3).Formula = "=sum(C" & s5 + 2 & ":C" & s6 - 1 & ")"
Sheets("Bearbejdning").Cells(s6, 3).Copy Sheets("Bearbejdning").Range("D" & s6 & ":S" & s6)
'--------------------------------------
Application.Calculation = xlAutomatic
'--------------------------------------
Sheets("Input").Range("B1").EntireColumn.Hidden = True '*NY* kolonne B i Input skjules igen
Application.ScreenUpdating = True

End Sub
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester