Avatar billede masteraaen Novice
08. juli 2004 - 11:07 Der 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

Men så virker hele funktionen ikke...

Håber der er nogen, der kan hjælpe
Avatar billede bak Forsker
08. juli 2004 - 16:28 #1
Hej aaen

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

Tommy
Avatar billede bak Forsker
08. juli 2004 - 17:09 #2
Se iøvrig http://www.eksperten.dk/spm/432169
Det ligner lidt :-)
Avatar billede masteraaen Novice
08. juli 2004 - 21:47 #3
Wauw! Det var dælme smart og det virker, det med temp()! Det andet link er også mig, der har lavet, men jeg kunne ikke få det til at virke...

Tusinde tak!
Avatar billede masteraaen Novice
08. juli 2004 - 21:48 #4
Har du fået point? Hvis ikke, hvordan giver jeg dig dem?
/
Morten
Avatar billede bak Forsker
09. juli 2004 - 09:14 #5
Jeg skal lige oprette et svar....
Godt at det funker :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester