25. september 2004 - 13:14Der er
21 kommentarer og 2 løsninger
Et VBA problem
Hejsa. Jeg har en tabel der indeholder et vilkårligt antal rækker. i kolonnen J står der en masse tal. Det er så meningen at kolonne K skal indeholder tallene fra 1 til (antallet af rækker). Alt efter hvilket tal der er størst. DVS. hvis J1 indeholder 500.000 og J2 indeholder 25.000 så får K1 værdien 1 og K2 værdien 2. Hvis tallene er lige store, så skal den ene af dem have værdien 1 og den anden værdien to, det er lige meget hvilken der får hvad.
Dernæst vil jeg gerne vide hvordan jeg bagefter finder værdierne i et lodret opslag. Jeg har engang benyttet funktionen LOPSLAG, men jeg mener nok den kun vil slå noget op, hvis kilden står til venstre for. Det gør den ikke i det her tilfælde, og det kommer den heller ikke til. Altså noget med, hvordan jeg får rækkenummeret oplyst, når værdien af i K kolonnen er lig 1, 2, 3... osv.
Det var lige to spørgsmål jeg ikke lige kunne hitte ud af selv.
Måske udtrykker jeg mig uklart. Overskriften sige VBA problem. Derfor vil jeg ikke arbejde med Excel, jeg vil gøre det gennem VBA.
Hvis jeg har 10 rækker altid, så kan jeg jo sagtens gøre det, men fordi det varierer så ændrer det sig efter hvad det skal bruges til, så det duer ikke... Desværre
Public Sub Plads() Dim SH As Worksheet, RW As Long Set SH = Worksheets("Ark1") RW = SH.Range("J65536").End(xlUp).Row For i = 1 To RW SH.Range("k" & i).FormulaR1C1 = "=RANK(RC[-1],R1C10:R" & RW & "C10,0)"' insætter formel Next Set SH = Nothing End Sub
Public Function Opslag(Værdi As Variant) Dim RW As Long RW = Range("J65536").End(xlUp).Row temp = Range("J1:K" & RW) For i = 1 To RW If temp(i, 2) = Værdi Then' finder plads Opslag = temp(i, 1) Exit Function End If Next Opslag = " Ikke fundet" End Function
Jeg har regnet din opslagsfunktion ud. Men jeg kan simpelthen ikke forstå det der FormulaR1C1, den giver nemlig ikke et resultat, som jeg kan fremprovokere ved at gøre det manuelt. Hvordan har du indstillet den der?
Rank = Plads RC[-1] = samme række men cellen til venstre ' hvilken placering skal denne have R1C10:R" & RW & "C10 = Række1 Kolonne10: Række RW kolonne 10' området den skal finde pladsen i
,0)" Skal den størete have nr 1 eller skal den mindste ( 0 eller 1 )
Nu har jeg så det problem at RANK returnerer samme værdi to gange i nogle tilfælde. Det ville jo hjælpe hvis jeg lagde 0,000001 til det første tal og 0,000002 til det næste osv. Inden jeg fandt deres rank, men det er jeg ikke helt klar over hvordan man gør
Jeg har et tillægsspørgsmål, og jeg er villig til at give flere point, hvis det skulle være.
Jeg har brug for at vide hvordan man finder den sidste character i en celle. Fordi jeg har nogle celler der hedder et navn efterfulgt af et tal, og der skal ske noget bestemt når det tal er 1
Public Sub Plads() Dim SH As Worksheet, RW As Long Set SH = Worksheets("Ark1") RW = SH.Range("J65536").End(xlUp).Row For I = 1 To RW SH.Range("k" & I).Formula = "=RANK(RC[-1],R1C10:R" & RW & "C10,0)" Set myRange = SH.Range("K1:K" & I) Set myRange1 = SH.Range("K" & I) A = Application.WorksheetFunction.CountIf(myRange, myRange1) If A > 1 Then SH.Range("J" & I).Value = SH.Range("J" & I).Value + 0.000001 I = I - 1 End If Next Set SH = Nothing Set myRange = Nothing Set myRange1 = Nothing End Sub
Er det ikke lidt som at gå over åen efter vand. Hvis jeg har forstået funktionen korrekt, så er det eneste den gør, at skrive den formel som kabbak foreslog allerførst? Eller er der noget jeg har misforstået?
I øvrigt kunne i så have gjort det nemmere ved at bruge følgende formel
=PLADS(J1;$J$1:$J$5000;1)+TÆL.HVIS(J$1:J1;J1)-1
Så havde i sparet alt det der med 0.000001
Så må i selv vælge om i vil få en makro til at skrive formlen, eller gøre som kabbak foreslog i den første kommentar (dvs. bare skrive formlen i den første celle og kopiere den ned).
Skal da lige forsøge at forklare formålet så. i mit ark, der hedder Input har jeg 3 kolonner, en salgspris, afsætning og variable enhedsomkostninger og nogle andre variable. Nedenunder disse overskrifter skriver man alle de mulige kombinationer der findes for disse variable. I arket Output bliver tallene analyseret og der skal kombinationerne prioriteres efter hvor gode de er. Problemet ligger så i, at der skal laves en afsætningsplan, og hvis jeg reserverer hele J kolonnen til en PLADS funktion, så kan der jo ikke stå noget i den nedenunder min tidligere opstilling. Derfor vil jeg gerne have at den tager fra det sted hvor den starter til det sted hvor den slutter. I stedet for bare at tage hele lortet.
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.