Avatar billede overgreat Forsker
04. marts 2017 - 12:05 Der er 6 kommentarer og
1 løsning

VBA udvikling af nuværendescript så det tager x-antal rækker med (fremfor kun første)

Hej

Jeg har fået udarbejdet et simpelt script, som henter datoer ind fra andet ark... Jeg får dog kun hentet det ind til en række... kan det løses så det under afvikling gennemfører for alle de rækker der er.

Resultatet til c-kolonnen: fx. Horsens 01012017;Esbjerg 02022017;Vejle 030302017

Ark 1
                    A              B                                      C
1              Nr 1          Horsens;Esbjerg; Vejle        Resultatet for linjen 1
2.              Nr 2          Horsens;Esbjerg;                Resultatet for linjen  2                                       
3.              ....            ..................;                        .................
x.              Nr x          Horsens;Esbjerg;                Resultatet for linjen  x   

Ark 2

                    A
1                Esbjerg              02022017
2.              Horsens              01012017
3.              Vejle                    03032017
..                .........                  ..............
x.              x-by                              x-dato       
                                       

Nuværende VBA script:
Sub NameAndDates()

Dim ByNavne As String
Dim AppNameList() As String
Dim ByNavn As String
Dim Result As String
ByNavne = Worksheets("Ark1").Cells(1, 2)
ByNavneList = Split(ByNavne, ";")
For i = 0 To UBound(ByNavneList)
For j = 2 To 99
ByNavn = Worksheets("Ark2").Cells(j, 1)
If (ByNavn = ByNavneList(i)) Then
Result = Result & ByNavneList(i) & " " & Worksheets("Ark2").Cells(j, 2) & "; "
End If
Next j
Next i
Worksheets("Ark1").Cells(1, 3) = Result

End Sub
Avatar billede vegaz Juniormester
04. marts 2017 - 13:14 #1
Du kan finde den sidste række sådan her:

Dim sht As Worksheet
Dim LastRow As Long

Set sht = ThisWorkbook.Worksheets("Ark1")
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

Msgbox LastRow

Så kan du bruge lastrow i din procedure
Avatar billede overgreat Forsker
04. marts 2017 - 13:27 #2
Jeg er nok ikke helt skarp på VBA'en... Hvordan/hvor indlejrer jeg informationen om sidste række... så den tager alle linjerne frem til den sidste?
Avatar billede vegaz Juniormester
04. marts 2017 - 14:02 #3
Er lige på telefonen men vil skyde på det er i dit bynavne du skal kigge. Ser på det senere hvis det ikke er løst :-)
Avatar billede kabbak Professor
04. marts 2017 - 16:51 #4
Sub NameAndDates()

    Dim ByNavne As String
    Dim AppNameList() As String
    Dim ByNavn As String
    Dim Result As String
    Dim Rk As Long, X As Long, J As Integer

    With Worksheets("Ark1")
        Rk = .UsedRange.Rows.Count    'tæller rækker
        For X = 1 To Rk
            ByNavneList = Split(.Cells(X, 2), ";")

            For i = 0 To UBound(ByNavneList)
                For J = 2 To 99
                    ByNavn = Worksheets("Ark2").Cells(J, 1)
                    If (ByNavn = ByNavneList(i)) Then
                        Result = Result & ByNavneList(i) & " " & Worksheets("Ark2").Cells(J, 2) & "; "
                        Exit For
                    End If
                Next J
            Next i
            .Cells(X, 3) = Result
        Next X
    End With

End Sub


prøv denne
Avatar billede overgreat Forsker
06. marts 2017 - 11:07 #5
Den virker perfekt med en enkelt undtagelse - nemlig at resultat i række 2 bliver resultatet for række 1 og 2 - Række 3 bliver resultatet for række 1,2 og 3.... osv.
Avatar billede kabbak Professor
06. marts 2017 - 12:08 #6
Sub NameAndDates()

    Dim ByNavne As String
    Dim AppNameList() As String
    Dim ByNavn As String
    Dim Result As String
    Dim Rk As Long, X As Long, J As Integer

    With Worksheets("Ark1")
        Rk = .UsedRange.Rows.Count    'tæller rækker
        For X = 1 To Rk
            ByNavneList = Split(.Cells(X, 2), ";")

            For i = 0 To UBound(ByNavneList)
                For J = 2 To 99
                    ByNavn = Worksheets("Ark2").Cells(J, 1)
                    If (ByNavn = ByNavneList(i)) Then
                        Result = Result & ByNavneList(i) & " " & Worksheets("Ark2").Cells(J, 2) & "; "
                        Exit For
                    End If
                Next J
            Next i
            .Cells(X, 3) = Result
Result =""
        Next X
    End With

End Sub
Avatar billede overgreat Forsker
06. marts 2017 - 12:29 #7
Det er virkelig perfekt - tusind tak for hjælpen!
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

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