|
|
|
|
|
|
|
| | |
| | |
| | |
| | |
| | |
|
|
Lolly |
Medlem sedan: 2012-08-16
6 inlägg
|
|
|
Hej,
Värdena nedan (Di-RM) kommer från samma rad i en exceltabell. Di= är länkad till cell A34, d= är länkad till cell B34 osv. Tabellen är på ca 20 rader och jag vill skapa en loop tar Di-Rm för varje rad fram tills dess att Res är mindre än Rm. Då skall loopen stanna. Observera att beräkningen inte är klar förrän samtliga värden länkats till ny rad, dvs Di=, d=, q= och Rm=. Detta måste alltså vara klart före man kan fastställa om Res är mindre än Rm.
Beräkning |
|
Di = |
95 |
d = |
8,07 |
q = |
1,068187622 |
Rm = |
1701 |
|
|
Res |
2500 |
Jag har satt ihop nedanstående, men loopen stannar inte när Res(x)<=Rm(max), utan den fortsätter att ersätta ända fram till rad 38???
Sub Starta()
'
Dim x As String
Dim max As String
Dim o As String
x = Range("J29").Value
max = Range("I13").Value
o = Range("J30").Value
Do Until x <= max
Range("I10:I13").Select
Selection.Replace What:="34", Replacement:="35", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="35", Replacement:="36", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="36", Replacement:="37", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="37", Replacement:="38", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Exit Do
Loop
End Sub
Stort tack på förhand!
|
|
|
|
| |
|
Kihlman |
Medlem sedan: 2012-04-20
283 inlägg
|
|
|
Hej!
Din första Selection.Replace byter 34 till 35.
På nästa rad byter du 35 till 36.
På nästa rad byter du 36 till 37
På nästa rad byter du 37 till 38
Sedan hoppad du ur loopen med Exit do.
Resultatet är att i första varvet byts 34 till 35 till 36 till 37 till 38. Med andra ord är det därför du hamnar på 38 redan efter ett varv i loopen. Ett alternativ är då att ta dina rader för replace och sortera dem i fallande ordning så att du börjar leta 37>38, sedan 36>37 osv.
Mvh
/Kihlman
Kihlman
Excelforum drivs av Excelspecialisten som bedriver utveckling av program, utbildning samt support och hjälp i Excel och VBA.
www.excelspecialisten.se
|
|
|
|
| |
|
Lolly |
Medlem sedan: 2012-08-16
6 inlägg
|
|
|
Tusen tack!
Men jag måste få fråga, jag trodde att mitt villkor ”Do Until x <= max” skulle göra att loppen stannade när detta villkor var uppfyllt. För varje ersättning jag gör, dvs ersätter 34 med 35 osv, så förändras värdet x. Jag vet att x blir <= max när jag ersätter 35 till 36. Men detta tas ingen hänsyn till, utan lopen fortsätter ändå till 38. Är det fortfarande av den anledning som du beskriver och i sådana fall, hur sorterar jag värdena?
Mvh Josephine
|
|
|
|
| |
|
Lolly |
Medlem sedan: 2012-08-16
6 inlägg
|
|
|
Lolly skrev
Tusen tack! Men jag måste få fråga, jag trodde att mitt villkor ”Do Until x <= max” skulle göra att loppen stannade när detta villkor var uppfyllt. För varje ersättning jag gör, dvs ersätter 34 med 35 osv, så förändras värdet x. Jag vet att x blir <= max när jag ersätter 35 till 36. Men detta tas ingen hänsyn till, utan lopen fortsätter ändå till 38. Är det fortfarande av den anledning som du beskriver och i sådana fall, hur sorterar jag värdena? Mvh Josephine
Lopen... inte loppen:)
|
|
|
|
| |
|
Lolly |
Medlem sedan: 2012-08-16
6 inlägg
|
|
|
Jag löste det! Kanske lite omständigt, men det funkar:)
Dim x As String
Dim max As String
Dim o As String
x = Range("J29").Value
max = Range("I13").Value
o = Range("J30").Value
Do Until x <= max
If Range("J29").Value > Range("I13").Value Then
Range("I10:I14").Select
Selection.Replace What:="34", Replacement:="35", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="35", Replacement:="36", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="36", Replacement:="37", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="37", Replacement:="38", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="38", Replacement:="39", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="39", Replacement:="40", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="40", Replacement:="41", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="41", Replacement:="42", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="42", Replacement:="43", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="43", Replacement:="44", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="44", Replacement:="45", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
If Range("J29").Value > Range("I13").Value Then
Selection.Replace What:="45", Replacement:="46", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
Exit Do
Loop
End Sub
|
|
|
|
| |
|
Kihlman |
Medlem sedan: 2012-04-20
283 inlägg
|
|
|
Hej igen!
Exit do tre rader från slutet avslutar loopen i dess första varv. Villkoret för loopen är alltså inte det som dödar den utan Exit do.
Ditt exempel ovan är onödigt komplicerat. Mitt förslag är enligt nedan
Do Until x <= max
Range("I10:I13").Select
Selection.Replace What:="37", Replacement:="38", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="36", Replacement:="37", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="35", Replacement:="36", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="34", Replacement:="35", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Loop
Mvh
Kihlman
Excelforum drivs av Excelspecialisten som bedriver utveckling av program, utbildning samt support och hjälp i Excel och VBA.
www.excelspecialisten.se
|
|
|
|
| |
|
Lolly |
Medlem sedan: 2012-08-16
6 inlägg
|
|
|
Ahha... Jag är med! Helt klart bättre än mitt alternativ.
Stort tack återigen!
|
|
|
|
| |
| | |
| | |
| | |
|
|
|
|
|
|
|
|
|
|