07. maj 2012 - 18:08Der er
14 kommentarer og 1 løsning
Nedskriv største værdi med én.
Jeg har et Array med 6 variabler eks. Array(Y100, YN100, Y200, YN200, Y500, YN500). Ud af disse variabler har kun 2 eller 3 en værdi der er større end nul. resten er nul i sammenhængen. Hvordan finder jeg variablen med den største værdi og tilskriver den én? Forstået på den måde at hvis eks. Y100 er den største og at den har en værdi på 14. Efterfølgende skal den så være 15.
Tak for et godt input. Jeg har prøvet at arbejde lidt med det og har fortsat et par spørgsmål: Med ovenstående kode vælger den ikke den største værdi som er forskellig fra nul. den vælger den sidste værdi som er forskellig fra nul i Arrayet. Hvis Y100 er den største værdi, så skal den stå som den sidste værdi i arrayet. ellers vælges den ikke. En anden problemstilling er, at jeg skal have tilskrevet værdien 1 til Y100, så jeg kan køre et Do Loop med alle variabler incl. den nye Y100 værdi. Ovenstående Array(index) = Array(index) + 1 ændre ikke Y100 værdien. Jeg kan ikke skrive Y100 = Y100 + 1, for det er kun tilfældet hvis Y100 er den største.
Endnu en gang tak for input. Jeg er nu med på hvordan den største værdi findes i Arrayet. og det er jeg sikker på at jeg nok skal kunne få kombineret ind, så jeg både kan vælge den største og den mindste værdi. Det eneste jeg nu mangler er at jeg skal have tilskrevet værdien 1 til Y100, så jeg kan køre et Do Loop med alle variabler incl. den nye Y100 værdi. Ovenstående Array(index) = Array(index) + 1 ændre ikke Y100 værdien. Jeg kan ikke skrive Y100 = Y100 + 1, for det er kun tilfældet hvis Y100 er den største.
Her er lige et udpluk af det program jeg skriver, hvor jeg har brugt din kode:
YValue = Array(Y100, YN100, Y200, YN200, Y500, YN500, Y1000, YN1000, Y2000, YN2000, Y5000, YN5000, Y10000, YN10000) If Y100 + YN100 + Y200 + YN200 + Y500 + YN500 + Y1000 + YN1000 + Y2000 + YN2000 + Y5000 + YN5000 + Y10000 + YN10000 < X Then For i = 0 To UBound(YValue) If YValue(i) > MaxValue Then index = i MaxValue = YValue(i) End If Next YValue(index) = YValue(index) + 1 End If
Ovenstående skal jeg have ind i et Do Loop, så hvis summen fortsat er mindre end X, skal køres igen. Det betyder at den største Y/YN værdi (son nu vælges rigtigt) skal tildeles værdien én. Som det er nu, er det kun YValue(index) der justeres med én. Håber at du også har en løsning på denne problemstilling. Tak.
Når jeg debugger til og med End if i nedenstående, og efterfølgende ser værdien på YValue(index) så er den 14 + 1 = 15. Det er helt som det skal være, for Y100 er den største værdi = 14. Det jeg gerne vil have er, at Y100 også skifter til 15. I nedenstående kode beholder Y100 værdien 14.
Sub LinierInterpolation()
Dim Y100 As Long, YN100 As Long, Y200 As Long, YN200 As Long, Y500 As Long, YN500 As Long, Y1000 As Long Dim YN1000 As Long, Y2000 As Long, YN2000 As Long, Y5000 As Long, YN5000 As Long, Y10000 As Long, YN10000 As Long Dim Val() As Long, X As Long, Y As Long, Factor As Double, v As Long, k As Long, interval As Integer, interval1 As Integer, interpol As Integer Dim index As Integer, MaxValue As Integer, Val2() As Long Dim rCell As Range
Y200 = 7 Y100 = 14 X = 16
YValue = Array(Y100, YN100, Y200, YN200, Y500, YN500, Y1000, YN1000, Y2000, YN2000, Y5000, YN5000, Y10000, YN10000) If Y100 + YN100 + Y200 + YN200 + Y500 + YN500 + Y1000 + YN1000 + Y2000 + YN2000 + Y5000 + YN5000 + Y10000 + YN10000 < X Then For i = 0 To UBound(YValue) If YValue(i) > MaxValue Then index = i MaxValue = YValue(i) End If Next YValue(index) = YValue(index) + 1 End If End Sub
Dim Val() As Long Dim X As Long Dim Y As Long Dim Factor As Double Dim v As Long Dim k As Long Dim interval As Integer Dim interval1 As Integer Dim interpol As Integer
Dim index As Integer Dim MaxValue As Integer Dim totalValue As Long Dim Val2() As Long
Dim rCell As Range
YValue(2) = 7 YValue(0) = 14 X = 16
For i = 0 To UBound(YValue) totalValue = totalValue + YValue(i) Next
If totalValue < X Then For i = 0 To UBound(YValue) If YValue(i) > MaxValue Then index = i MaxValue = YValue(i) End If Next YValue(index) = YValue(index) + 1 End If
Værdierne af Y100 til YN10000 er nogle optalte Case værdier fra tidligere i programmet. Eks. 14 værdier ramme inden for intervallet 1 til 20000 og 7 værdier rammer inden for intervallet 20001 til 30000.
Programafsnit fra et Do loop:
Select Case Val(1, Y - 1) + interval Case 0 To 20000 interval = 100 Y100 = Y100 + 1 Case 20001 To 30000 interval = 200 Y200 = Y200 + 1 Case 30001 To 40000 interval = 500 Y500 = Y500 + 1 Case 40001 To 50000 interval = 1000 Y1000 = Y1000 + 1 Case 50001 To 70000 interval = 2000 Y2000 = Y2000 + 1 Case 70001 To 100000 interval = 5000 Y5000 = Y5000 + 1 Case 100001 To 150000 interval = 10000 Y10000 = Y10000 + 1
Mener du at jeg kan referere til en bestemt plads i arrayet i stedet for at have en ovenstående variabler? Eks Y100 erstattes med YValue(0)i ovenstående?
Tak for det. det prøver jeg. Sidste gang jeg skulle overføre point gik det galt og jeg kom til at give dem til mig selv. Jeg håber at det går bedre denne gang, men ellers må du lige sige til.
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.