30. maj 2002 - 13:15Der er
12 kommentarer og 2 løsninger
Problemer med at skrive kode i VBA
Jeg har nogle data, f.eks.
nr Rækkefølge 1 x1 y1 a 2 x2 y2 b 3 x3 y3 c 4 x4 y4 d 5 x5 y5 e 6 x6 y6 f
hvor rækkefølge er en bestemt rækkefølge jeg har fundet disse punkter skal komme i. Jeg vil dog gerne bevare den oprindelige rækkefølge, derfor er det skrevet i en separat kolonne.
Nu vil jeg gerne have skevet en kode der ser nogenlunde således ud:
A = tilfældigt tal (a-f) Do B = tilfældigt tal (a-f) Loop until B > A C = sqr((XA - XB+1)^2 + (YA - YB+1)^2) D = sqr((XB - XA+1)^2 + (YB - YA+1)^2)
Så skal den nye rækkefølge regnes ud: Eks. Hvis A = a og B = e Før Nu a a (= A) b e (= B) c d d c e b (= A + 1) f f (= B + 1) dvs at efter A så skal den "tælle" fra B og baglens til A+1 hvorefter den skal fortsætte fra B+1 og fremefter som det var før.
Jeg håber det er nogenlunde forståeligt. Håber på hurtigt svar.
Jeg overvejede at forsøge - men gik i stå, da jeg ikke forstår hvad du vil. Sikkert fordi jeg ikke læser det godt nok. Men hvad er XA, XB... for nogle størrelser? (Bemærk - kommentar, ikke svar;-)
Du må meget gerne kigge på det. Jeg bliver nødt til at smutte i 2-3 timer, hvis du vil kigge på det imens??? Så vil jeg blive MEGET glad, da det er til en opgave der skal afleveres i morgen! Pernille
Alle de X, Y, A, B ... forvirrer mig. Kan du ikke mere generelt fortælle hvad du vil - noget med at smide nogle tal i et array eller? Jeg må indrømme at jeg er for doven til at prøve at gennemskue hvad du mener (beklager :o). Men kan du fortælle, at du har et eller flere arrays som du vil gøre noget bestemt med, eller på enden måde formulere opgaven mere generelt (måske endda gengive den opgavetekst du har fået?), kan jeg måske hjælpe lidt mere (måske - holder "fri i aften, og den skal jo afleveres i morgen..)
Og bare nysgerrig - "opgave" - tager du et kursus i VBA til Excel eller (går ud fra at vi snakker VBA i Excel ;o)
Jo, det er VBA i Excel, vi snakker om! Og jo, det har også meget med det pågældende spørgsmål at gøre.
Det er en opgave i forbindelse med mit studie (Cand.Merc.) hvor vi skal kode nogle "nearest neighbor-" samt "2-opt-" heuristikker ud fra nogle datasæt. Da jeg aldrig rigtigt har leget meget med VBA (eller VB for den sags skyld) er det lidt svært for mig at kode. Jeg kan sagtens fortælle dig (i ord) hvordan og hvorledes det hele skal hænge sammen, men så snart VBA skal kodes så går det galt.
Jeg vil meget gerne sende dig min datafil samt en oversigt over, hvordan det hele hænger sammen (altså i ord), hvis du vil kigge på det.
Jeg ville blive enormt glad, hvis der var en eller anden der kunne hjælpe mig ud af den lille krise, jeg sidder i lige nu!?!
Jeg er ret sikker på at det er ret simpelt at løse dit problem - hvis man ellers kan forstå det. Havde tjacob eller en af de andre ikke allerede sendt noget der virkede til dig? Men selvfølgeligt er det svært for dig, hvis du ikke så godt kender VB. Og for mig, når jeg ikke forstår hvad du vil...
Du har fanget mig på et uheldigt tidspunkt, for jeg har ikke mere tid i dag. Og under alle omstændigheder bruger jeg sjældent alt for mange halve timer på andres problemer, med mindre det er noget jeg selv kan lære noget af. Sååå - med mindre det kan vente, så får du nok ikke 13 i morgen (med mindre andre kommer til - der er jo mange venlige kloge hoveder herinde ;o)
Hvis du går helt i panik, så send en email i aften på martin_moth@yahoo.com, så kan jeg MÅSKE kikke på et - jeg lover ingenting... ;o) Held og lykke.
Nu er det sikkert for sent, men her er en løsning ;-)
Du indlæser den oprindelige rækkefølge i et array (arrOrg). Med koden indlæses den nye rækkefølge i arrNew. Derefter skriver du arrNew til regnearket. Dette eksempel har 10 elementer, men det kan du jo bare rette.
Dim ArrOrg(1 To 10), arrNew(1 To 10) Dim i, Rnd1, Rnd2, c
'her skal du indlæse værdierne til arrOrg()
Randomize Rnd1 = Int(9 * Rnd + 1) 'Rnd1 går fra 1 til 9 Rnd2 = Int((10 - Rnd1) * Rnd + Rnd1 + 1) 'Rnd2 går fra Rnd1 til 10
For i = 1 To 10 'først kopieres hele arrayet arrNew(i) = ArrOrg(i) Next i c = 0 For i = Rnd1 + 1 To Rnd2 'her indlæses stumpen i omvendt rækkefølge arrNew(i) = ArrOrg(Rnd2 - c) c = c + 1 Next i
Ja, som du selv skriver er det for sent...nu har jeg afleveret opgaven, selvom den ikke blev særlig god! :-( Surt show! Nå, men jeg synes alligevel du skal have lidt point for dit svar og som tak for din hjælp.
Pernille: Når du, både indenfor planlægning og finansiering, skal implementere algoritmer som er stærkt afhængige af tilfældige tal må du *aldrig* bruge de rand() funktioner som er indbygget i programmeringssprogene!!!
Kvaliteten af de tilfældige tal der genereres af disse funktioner er *meget* dårlig, så hvis du skal bruge noget med tilfældige tal i fremtiden (måske til dit speciale!) vil jeg anbefale dig at kigge på hjemmesiden for Numerical Recipes: http://www.library.cornell.edu/nr/bookcpdf.html - under kapitel 7 står der noget om at generere tilfældige tal - der er også kodeeksempler i C.
Mvh
TIpsen
NB: Både Tor, Ole og Niels-Christian ved mere om dette ;-)
Synes godt om
Ny brugerNybegynder
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.