PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBALoop problemLoop problem
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2012-08-16 16:01
 
 Ändrad av Lolly  på 2012-08-20 15:44:26

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!

Nytt inlägg
 2012-08-22 10:11
 

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

Nytt inlägg
 2012-08-22 11:16
 
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
Nytt inlägg
 2012-08-22 11:20
 

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:)

 

Nytt inlägg
 2012-08-22 13:02
 

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

Nytt inlägg
 2012-08-22 13:45
 

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

Nytt inlägg
 2012-08-22 16:33
 

Ahha... Jag är med! Helt klart bättre än mitt alternativ.

Stort tack återigen!

 

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBALoop problemLoop problem

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter