08. juli 2004 - 11:07Der er
4 kommentarer og 1 løsning
Oprette sub, der skriver til celler
Hejsa.
Jeg har lavet en lille public function i excel, der udregner forskellige værdier, men den returnerer jo kun een værdi til den celle, hvorfra den kaldes. Men jeg vil gerne have nogle af de andre værdier ud til regnearket også. Jeg kan imidlertid ikke få den til at skrive nogen af dem.
Her er min kode:
"""""" Public Function sizematch(BSC, start As Double)
Dim sammenlign, matchtal As Double
Dim i, matchselskab, antalselskaber As Integer
i = 0 matchtal = 0 sammenlign = 1000000000
For i = 1 To 256 If ActiveSheet.Cells(9, i) > 0 Then antalselskaber = i - 1 End If Next i
i = 0
For i = 2 To BSC - 1 matchtal = ActiveSheet.Cells(start, BSC) - ActiveSheet.Cells(start, i) If Abs(matchtal) <= Abs(sammenlign) Then If ActiveSheet.Cells(start, i) > 0 Then sammenlign = matchtal matchselskab = i End If End If Next i i = 0
For i = BSC + 1 To antalselskaber matchtal = ActiveSheet.Cells(start, BSC) - ActiveSheet.Cells(start, i) If Abs(matchtal) <= Abs(sammenlign) Then If ActiveSheet.Cells(start, i) > 0 Then sammenlign = matchtal matchselskab = i End If End If Next i
sizematch = matchselskab End Function """""
Jeg ville gerne for eksempel udskrive antalselskaber og matchtal til to andre celler uden at skulle lave en helt ny funktion. Det er noget med, at en funktion ikke kan udskrive til flere celler, men kan man så gøre det gennem en sub eller sådan noget? I så fald hvordan?
Jeg har prøvet at indsætte linier som Cells(3, 7).Value = antalselskber og Range(2, 7).Select ActiveCell.FormulaR1C1 = antalselskaber
Man kan sagtens få flere resultater ud af een funktion, hvis man definerer at funktionen skal returnere en variant. Du markerer 3 sammenhængende celler og taster funktionen ind i første celle. Afslut indtastningen med ctrl-shift-enter. (array-formel med {} omkring) Du får så de tre resultater i hver sin celle Du kan også skrive =INDEKS(sizematch(xxx, xxx);1) i en celle (giver 1. resultat) =INDEKS(sizematch(xxx, xxx);2) giver 2. resultat osv.
din funktion skal bare lige gøres klar til dette.
Option Explicit
Public Function sizematch(BSC, start As Double) As Variant
Dim sammenlign, matchtal As Double Dim temp(1 To 3)
Dim i, matchselskab, antalselskaber As Integer i = 0 matchtal = 0 sammenlign = 1000000000
For i = 1 To 256 If ActiveSheet.Cells(9, i) > 0 Then antalselskaber = i - 1 End If Next i
i = 0
For i = 2 To BSC - 1 matchtal = ActiveSheet.Cells(start, BSC) - ActiveSheet.Cells(start, i) If Abs(matchtal) <= Abs(sammenlign) Then If ActiveSheet.Cells(start, i) > 0 Then sammenlign = matchtal matchselskab = i End If End If Next i i = 0
For i = BSC + 1 To antalselskaber matchtal = ActiveSheet.Cells(start, BSC) - ActiveSheet.Cells(start, i) If Abs(matchtal) <= Abs(sammenlign) Then If ActiveSheet.Cells(start, i) > 0 Then sammenlign = matchtal matchselskab = i End If End If Next i temp(1) = antalselskaber temp(2) = matchtal temp(3) = matchselskab sizematch = temp End Function
Jeg skal lige oprette et svar.... Godt at det funker :-)
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.