none
Vergleichen und Zuordnen von Werten in Spalten und Zeilen RRS feed

  • Frage

    • Frage an die Experten
    • Nutze VBA mit EXCEL 2007

    !!!! Die Lösung zu meiner Frage steht in meiner Antwort vom 15.08.12 . Diese Prozedur verwende ich. Habe sie aber n.n. auf das im Treed angeführte Beispiel umgeschrieben.

    '--------------------------------------------------------------------------------------------------------

    Ich habe folgendes Problem . In 2 Spalten stehen die gleichen Werte, aber über verschiedene Zeilen verteilt.

    Ich möchte die Werte in Spalte F den Werten in Spalte C über eine Do Loop-Schleife zuordnen.

    Neben der gefundenen Zelle in Spalte F gibt es in der gleichen Zeile zugehörige Daten "G12", "H12"...die ich nach dem Suchen dem Wert in Spalte C zuordnen will.

    Startzelle ist "A1"

    Beispiel:

    Im Ergebnis des Schleifenlaufes sollen die der Spalte E  folgenden Werte

    z.B. G12, in Zelle "E10 eigetragen werden.

    Der Suchlauf und die Zuordnung der Vergleichswerte in Spalte E zur Spalte C wird  ausgeführt .

    Im Ergebnis steht der Vergleichswert Hamburg in Zelle "D10" und Berlin in Zelle "D12".

    Frage:

    Wie kopiere ich in der Prozedur den zu Hamburg gehörigen Zeilenwert in " G 12" in Zelle "E10"

    Ich habe esmit untenstehender Prozedur unter einfügen von

    ActiveCell.Offset(j, 6).Copy Destination:=ActiveCell.Offset(i, 4)  oder

    Range("C2").Offset(j, 0).Copy Destination:=Range("S2").Offset(i, -2)

    oder einer weiteren IF-Anweisung versucht

    'If Range("F2").Offset(i, 0).Value = Range("C2").Offset(j, 0).Value Then

              'ActiveCell.Offset(j, 0).Copy Destination:=ActiveCell.Offset(i, -2)

           'End If

    Was mache ich falsch oder ist die Herangehensweise grundsätzlich falsch?

    Danke für Eure Hilfe

    A   B          C                    D             E             F                    G

    10

    Hamburg

    Berlin

    11

    München

    Bielefeld)

    12

    Berlin

    Hamburg        Hafen

    Die Prozedur

    Sub CRV_R_S_Anwendung()

      Dim i As Integer

       Dim x As Integer

       Dim ws As Worksheet

       Dim rng As Range

       Dim j As Integer

     Set rng = ActiveCell.Offset(0, 0)

    'Set rngQuelle = Range("C1")

     'Set rngVergleich = Range("E1")

    For i = 0 To 442 - 1         'äußere Schleife ( beginnt bei 0)

        j = 0                                            'Initialisierung der inneren Schleife

        Do Until j = 442 - 1      'innere Schleife, läuft maximal bis Endwert

           If Range("E2").Offset(i, 0).Value = Range("C2").Offset(j, 0).Value Then

              Range("C2").Offset(j, 0).Copy Destination:=Range("E2").Offset(i, -10)

    'sobald Übereinstimmung gefunden, Abbruch

             ' und nächstes Quell-Element ansehen

           Exit Do

           End If

      ActiveCell.Offset(j, 5).Copy Destination:=ActiveCell.Offset(i, 3)

           j = j + 1

        Loop

    Next i

    End Sub

    ___________________________________________________

    Ursprüngliche Version der Prozedur  wird nicht weiter beachtet!

    Sub VBA12T2_Sort_CRV_Zuordnen()

    Dim i As Integer

    Dim x As Integer

    Dim ws As Worksheet

    Dim rng As Range

    Dim i2 As Integer

    'Set rng = ActiveCell.Offset(0, 0)

    For i = 2 To 500

    i = i + 1

    i2 = 2

    Do Until i = 0 Or Range("E" & i2).Value = Range("C" & i).Value

    i2 = i2 + 1

    If i2 = 500 Then

    Exit Do

    End If

    Loop

    ' Als Beispiel zum kopieren in die zugehörige Zelle

    ActiveCell.Offset(i2, 20).Copy Destination:=ActiveCell.Offset(i, 3)

    Next i

    If i = 500 Then

    End If

    End Sub

    Beispielhaft der Tabellenkopf

    Spalte

    A       B     C                       D                          E                F

    10

    Hamburg

    Berlin

    11

    München

    Bielefeld)

    12

    Berlin

    Hamburg Hafen

    Danke für Eure Hilfe

    Die Lösung der Aufgabe entspricht folgender Prozedur:

    Range("A1").Select

    'Set rngQuelle = Range("C2")
    'Set rngVergleich = Range("AF3")

    For i = 0 To 500 - 1 'äußere Schleife (.: beginnt bei 0)
    j = 0 'Initialisierung der inneren Schleife

    Do Until j = 500 - 1 'innere Schleife, läuft maximal bis Endwert
    If Range("C2").Offset(i, 0).Value = Range("AF3").Offset(j,
    0).Value Then

    Range("AF3").Offset(j, 0).Copy
    Destination:=Range("D2").Offset(i, 1)

    Range("AK3").Offset(j, 0).Copy
    Destination:=Range("E2").Offset(i, 1)

    Range("AV3:BB3").Offset(j, 0).Copy
    Destination:=Range("F2").Offset(i, 1)

    Range("BN3:BP3").Offset(j, 0).Copy
    Destination:=Range("M2").Offset(i, 1)

    Exit Do
    End If
    j = j + 1
    Loop
    Next i
    End Sub<o:p></o:p>








    Samstag, 11. August 2012 16:37

Alle Antworten

  • Hallo,

    könntest du erklären um was es geht? Was sind das für Daten in der DataGridView(? wenn es eine ist)

    Wie möchtest du diese Daten verändern? Was soll das Ziel sein?

    Welche Operationen auf den Daten siehst du dafür als notwenig an?


    Dann wäre für

    For i = 2 i = i + 1 i2 = 2   x = 1 Do Until i = 0 Or rng("E" & i2).Value2 = rng("C" & i).Value

    auch einfacher zu verstehen was da gemacht werden soll.


    • Bearbeitet Markus222 Samstag, 11. August 2012 21:48
    Samstag, 11. August 2012 21:47
  • Hallo Markus ,

    habe die Frage konkretisiert.

    Fehler beim Kompilieren, Syntaxfehler. in der Zeile For i = 2

    Was mache ich falsch oder ist die Herangehensweise grundsätzlich falsch?

    Beispiel:

    Im Ergebnis des Schleifenlaufes sollen die der Spalte E und in Zeile 12 Zeile folgenden Werte für Hamburg

    z.B. F12,  in  Zelle  "D10 eigetragen werden.

    Sonntag, 12. August 2012 04:26
  • Hi Alfi,

    die richtige Syntax ist:

       For i = 2 To 10 '10 Durch deinen Wert ersätzen
    
       Next

    Wenn ich das richtig gesehen hab, fehlt dir in der Schleife die Abbruchbedingung.

    MFG

    Björn

    Sonntag, 12. August 2012 08:58
  • Danke Björn,

    das war ein wertvoller Hinweis. Jetzt läuft die Prozedur wenigstens an .

    Sie bleibt aber bei

    Do Until i = 0 Or rng("E" & i2).Value = rng("C" & i).Value

    mit Meldung: Anwendungs- oder Objektdefinierter Fehler stecken.

    Was könnte ich falsch gemacht haben?

    MfG

    Albrecht

    Sonntag, 12. August 2012 09:38
  • Hallo Albrecht,

    anbei Beispielcode wie das was du möchtest mit einer DataGridView ginge. (Mit Worksheet kenne ich mich nicht aus. Was ist das denn für ein Worksheet?)

    Es wird hier die erste gefundene Übereinstimmung zugeordnet. Was wäre wenn z.B. in Zeile 15 noch einmal Hamburg dann aber mit dem Wert Schiff vorkommt? Falls das vorkommen kann.
    Sollte dann in Spalte D 10 nur Hamburg oder zb. Hamburg, Schiff stehen?

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        ' Die aktuelle Zeile der äusseren Schleife.
        Dim intRowCurrent As Integer
        ' Der Spaltenindex des aktuelle Suchwertes.
        Dim intColumnSearchValue As Integer = 0
        ' Hierhin soll das Ergebnis der Suche geschrieben werden.
        Dim intCoumnAssignTo As Integer = 1

        ' Wurde eine Zuordnung gemacht?
        Dim blnValue_Assigned As Boolean
        ' Die aktuelle Zeile der inneren Schleife.
        Dim intRowSearch As Integer
        ' Ser Spaltenindex des zu prüfenden Wertes.
        Dim intColumnSearch As Integer = 4
        ' Von hier soll das Ergebnis der Suche genommen werden.
        Dim intColumnAssignFrom As Integer = 5


        ' Durchlaufe alle Zeilen des DataGridViews
        intRowCurrent = 0
        ' Die letzte Zeile (New Row) wird übersprungen.
        Do While intRowCurrent < DataGridView1.Rows.Count - 1

          blnValue_Assigned = False
          intRowSearch = 0
          ' Die letzte Zeile (New Row) wird übersprungen.
          Do While blnValue_Assigned = False _
          And intRowSearch < DataGridView1.Rows.Count - 1

            ' Zuerst wird der bei einer DataGridView Spaltenindex, dann der Zeilenindex angegeben.
            If DataGridView1(intColumnSearch, intRowSearch).Value.ToString =
               DataGridView1(intColumnSearchValue, intRowCurrent).Value.ToString Then
              DataGridView1(intCoumnAssignTo, intRowCurrent).Value =
              DataGridView1(intColumnAssignFrom, intRowSearch).Value

              ' Aktuell wird nur der 1. gefundene Wert zugeordnet.
              blnValue_Assigned = True
            End If

            If blnValue_Assigned = False Then
              intRowSearch = intRowSearch + 1
            End If
          Loop

          intRowCurrent = intRowCurrent + 1
        Loop

    End Sub



    • Bearbeitet Markus222 Sonntag, 12. August 2012 10:00
    Sonntag, 12. August 2012 09:57
  • Hi Alfi,

    einmal vermisse ich eine Zuweisung der an das rgn Objekt.

    Irgendwas in der Form.

    rgn = Worksheet("TabellenName).Range

    Dann hat mir google noch ausgespuckt, das der Fehler auftreten kann wenn das Worksheet Protected ist.

    MFG

    Björn

    Sonntag, 12. August 2012 10:12
  • Hallo Markus,

    das muss ich mir noch durch den Kopf gehen lassen. Da ich Anfänger bin für mich noch zu kompliziert.

    Die Suchfunktion läuft aber die Zuordnung klappt nicht.

    MfG

    Albrecht

    Sonntag, 12. August 2012 11:02
  • rng wurde soeben mit Range ersetzt
    Sonntag, 12. August 2012 11:03
  • Hallo Markus,

    das muss ich mir noch durch den Kopf gehen lassen. Da ich Anfänger bin für mich noch zu kompliziert.

    Die Suchfunktion läuft aber die Zuordnung klappt nicht.


    Der Code ist im Beispiel ist recht einfach. Es ist halt so dass die Variablen nach ihrer Funktion benannt sind.

    Falls es ein Excel Worksheet ist, wie öffnet man so etwas im Code eigentlich? Wenn ich diesen Code hätte könnte ich deine Anforderung heute abend mal nachprogrammieren.

    Sonntag, 12. August 2012 11:09
  • Ich gehe auf Entwicklertools , da steht das geschriebene Makro und führe es aus , War das die Frage?

    Das Makro startet von Zelle A1

    MfG

    Albrecht

    Sonntag, 12. August 2012 11:21
  • Hallo Albrecht,

    der Code deines 1. Beitrags im Thema oben etwas verändert. Scheint so zu funktionieren.

    Nur innerhalb der ''''' Reihen. Das andere war damit es überhaupt in Visual Studio 2010 Professional läuft.  Die Anzahl der Schleifendurchläufe ist auf 20 begrenzt. Ich weiss nicht wie man den Index der letzten gefüllten Zeile im Worksheet herausfindet.

    Imports Excel = Microsoft.Office.Interop.Excel
    Imports Microsoft.Office.Interop.Excel

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim strWorkSheetPath As String = _
            (System.Environment.GetFolderPath(System.Environment.SpecialFolder.UserProfile)) &
            "/Mappe1.xlsx"

        Dim xlApp As New Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim ws As Excel.Worksheet


        Try
          xlWorkBook = xlApp.Workbooks.Open(strWorkSheetPath)
          ws = DirectCast(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)

          '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
          Dim i As Integer
          Dim i2 As Integer
          Dim blnValue_Assigned As Boolean

          i = 1
          Do While i <= 20

            blnValue_Assigned = False
            i2 = 1
            Do While blnValue_Assigned = False _
                     And i2 <= 20

              If ws.Range("E" & i2).Value IsNot Nothing _
              AndAlso ws.Range("C" & i).Value IsNot Nothing _
              AndAlso ws.Range("E" & i2).Value.ToString = _
                      ws.Range("C" & i).Value.ToString _
              AndAlso i <> i2 Then
                ws.Range("D" & i).Value = _
                   ws.Range("F" & i2).Value
                blnValue_Assigned = True
              End If

              If blnValue_Assigned = False Then
                i2 = i2 + 1
              End If
            Loop

            i = i + 1
          Loop
          ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

          xlWorkBook.Save()
          xlWorkBook.Close()
          xlApp.Quit()

        Catch ex As Exception
          MsgBox(ex.Message)
        End Try

        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(ws)
      End Sub


      Private Sub releaseObject(ByVal obj As Object)
        Try
          System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
          obj = Nothing
        Catch ex As Exception
          obj = Nothing
        Finally
          GC.Collect()
        End Try
      End Sub


    • Bearbeitet Markus222 Sonntag, 12. August 2012 17:37
    Sonntag, 12. August 2012 17:04
  • Danke für deine Arbeit.

    Syntaxfehler für die Zeilen        

       If Range("E" & i2).Value IsNot Nothing _
              AndAlso ws.Range("C" & i).Value IsNot Nothing _
               AndAlso ws.Range("E" & i2).Value.ToString = _
                       ws.Range("C" & i).Value.ToString _
               AndAlso i <> i2 Then

    Läuft die Prozedur bei dir?

    Montag, 13. August 2012 08:00
  • Hi Markus,

    mir sind beim überfliegen deiner Codes ein paar Kleinigkeiten Aufgefallen.

    GC.Collect sollte man nie selber aufrufen, da es zu Performance Problemen führen kann.

    Auch der Catch Block der alle Exeptions abfängt und das nichts macht als das Objekt auf Nothing zu setzen, ist nicht wirklich schon.

    Man sollte Möglichst nur spezielle Exeptions Abfangen.

    MFG

    Björn

    Montag, 13. August 2012 08:18
  • Syntaxfehler für die Zeilen        

       If Range("E" & i2).Value IsNot Nothing _
              AndAlso ws.Range("C" & i).Value IsNot Nothing _
               AndAlso ws.Range("E" & i2).Value.ToString = _
                       ws.Range("C" & i).Value.ToString _
               AndAlso i <> i2 Then

    Läuft die Prozedur bei dir?

    Läuft in Visual Studo 2010 Professional und macht die Zuordnungen die du oben beschrieben hast.
    Welche Entwicklungsumgebung benutzt du denn?
    Montag, 13. August 2012 08:49
  • Hallo Björn,

    da ich mich mit der Verwendung von Excel Worksheets in VB.Net nicht auskannte hab ich bei Google gesucht.
    Das was über und unter '''''... steht übernommen und ewas angepasst.

    Das Durchlaufen in 2 Schleifen ist wohl bei grossen Excel Dateien sehr zeitintensiv. Ob man die innere Schleife durch einen Find Befehl ersetzen kann habe ich nicht versucht herauszufinden. Hier wäre wenn es so etwas wie Find, FindNext gibt eine Verbesserungsmöglichkeit.
    Ging mir nur darum den Ansatz von Albrecht zum Laufen zu bringen. Und halt die Do Until Schleife durch Do While zu ersetzen.

    Vielleicht kannst du einen eigenen Vorschlag für die releaseObject Prozedur schreiben.


    • Bearbeitet Markus222 Montag, 13. August 2012 08:56
    Montag, 13. August 2012 08:55
  • Hi Markus,

    hab jetzt einfach mal Sachen ersetzt die mir direkt ins Auge gesprungen sind.

      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim strWorkSheetPath As String = (System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments)) & "/Mappe1.xlsx"
    
            Dim xlApp As New Excel.Application
            Dim xlWorkBook As Excel.Workbook
            Dim worksheet As Excel.Worksheet
    
            Try
                xlWorkBook = DirectCast(xlApp.Workbooks.Open(strWorkSheetPath).Worksheets.Item(1), Excel.Workbook)
                worksheet = DirectCast(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
    
                For i As Integer = 1 To worksheet.Rows.Count - 1
                    For i2 As Integer = 1 To worksheet.Rows.Count - 1
                        If IsMeinePruefung(worksheet, i, i2) Then
                            worksheet.Range("D" & i).Value = worksheet.Range("F" & i2).Value
                            Exit For
                        End If
    
                    Next
                Next
    
                xlWorkBook.Save()
                xlWorkBook.Close()
            Catch ex As Exception 'Hier die spezielle Exception abfangen z.B. FileNotFoundException'
                MsgBox(ex.Message)
            Finally
                worksheet = Nothing
                xlWorkBook = Nothing
                xlApp.Quit()
            End Try
    
        End Sub
    
        ' MeinePrüfung durch Vernünftigen Sprechenden Namen ersetzen'
        Private Function IsMeinePruefung(ByVal worksheet As Worksheet, ByVal i As Integer, ByVal i2 As Integer) As Boolean
            Return worksheet.Range("E" & i2).Value IsNot Nothing _
                        AndAlso worksheet.Range("C" & i).Value IsNot Nothing _
                        AndAlso worksheet.Range("E" & i2).Value.ToString = _
                                worksheet.Range("C" & i).Value.ToString _
                        AndAlso i <> i2
        End Function

    Ob es Funktioniert habe ich jetzt nicht getestet.

    Beim Rows.Count bin ich mir auch nicht sicher ob ich alle Zeilen bekommen oder nur die, die "Benutzt" werden.

    MFG

    Björn

    Montag, 13. August 2012 10:22
  • Hallo Björn,

    habe es mit unter einem neuem Button in das ursprüngliche Testprogramm kopiert. Es funktioniert.
    Dann wenn man
        xlWorkBook = DirectCast(xlApp.Workbooks.Open(strWorkSheetPath).Worksheets.Item(1), Excel.Workbook)
    ersetzt durch
        xlWorkBook = xlApp.Workbooks.Open(strWorkSheetPath)
    und
        For i As Integer = 1 To worksheet.Rows.Count - 1
            For i2 As Integer = 1 To worksheet.Rows.Count - 1
    ersetzt durch
        For i As Integer = 1 To 100
            For i2 As Integer = 1 To 100

    Der worksheet.Rows.Count lautet bei meinem Testdokument 1048576. Gestern das Dokument mit Excel 2007 angelegt. Weiss nicht wie sich das mit worksheet.Rows.Count verhält. Ob das immer so hoch ist?

    Man müsste die letzte belegte Zeile mit einer Funktion herausfinden können. So wären es 1 Millionen mal 1 Millionen Durchläufe der inneren Schleife. (Hab mit meinem mehr als 5 Jahre altem Acer Aspire 9300 Laptop (1 GB Ram, 1,6 GHz AMD Prozessor) lieber nicht geschaut wie lange das braucht..)


    • Bearbeitet Markus222 Montag, 13. August 2012 13:03
    Montag, 13. August 2012 13:01
  • Hi Markus,
    mit UsedRange bekommt man einen belegten Bereich.
     
    --
    Viele Gruesse
    Peter
    Montag, 13. August 2012 13:27
  • Hallo Markus,

    ich nutze MS EXCEL 2007

    Montag, 13. August 2012 15:38
  • mit UsedRange bekommt man einen belegten Bereich.

    Danke Peter,

    Im Excel Testdokument sind 21 Zeilen belegt. UsedRange zeigt 84 Zeilen. Ist aber schon mal ein Fortschritt :-)

    Jetzt müsste man die innere Schleife noch durch einen Find Befehl ersetzen.

    Montag, 13. August 2012 15:48
  • ich nutze MS EXCEL 2007

    Ist der Code oben dann auch dort geschrieben?

    Das hier ist ja ein VB.Net Forum.

    Der Fehler auf den du gelaufen bist war vielleicht dass du unbelegte Spalten angesprochen und nicht auf Nothing geprüft hast. Der Syntaxfehler das es AndAlso und OrElse in deiner Entwicklungsumgebung vielleicht nicht gibt. Vielleicht auch nicht das Fortsetzungszeichen _ u.s.w.

    Du siehst in VB.Net kann man viel machen. Vielleicht orientierst du dich um? Datenbanken sind auch besser.


    • Bearbeitet Markus222 Montag, 13. August 2012 15:56
    Montag, 13. August 2012 15:55
  • Hi Björn,

    es scheint an EXCEL_Versionunterschieden zu liegen.

    Kann die Prozedur nicht ausführen da ich EXCEL 2007 nutze

    If Range("E" & i2).Value IsNot Nothing _
               AndAlso ws.Range("C" & i).Value IsNot Nothing _
               AndAlso ws.Range("E" & i2).Value.ToString = _
                       ws.Range("C" & i).Value.ToString _
               AndAlso i <> i2 Then
               
                ws.Range("D" & i).Value = _
                    ws.Range("F" & i2).Value
                'blnValue_Assigned = True
               End If

    Wird als Syntaxfehler angezeigt

    MfG

    Albrecht

    Montag, 13. August 2012 16:16
  • Hallo Markus,

    das ist sicher das Problem. Der Code ist in EXCEL 2007 geschrieben und da werden die Fortsetzungszeichen nicht erkannt.

    Kannst Du das bitte auch in EXCEL 2007 Modi umschreiben?

    MfG

    Albrecht

    Montag, 13. August 2012 16:21
  • Hallo Albrecht,

    ja. Das hier ist in VB.Net geschrieben.

    Umschreiben kann ich nicht. Weiss nicht wie so etwas geht. Wo in Excel sind Entwicklertools?
    Da können andere bestimmt besser helfen.

    Ansonsten halt die Fortsetzungszeichen raus. AndAlso und OrElse durch And und Or ersetzen. Das was im Thema steht an die Syntax von Excel 2007 anpassen.

    Aber wenn du so VB-mäßigen Code schreibst, das hat evtl. einen anderen Namen als Excel was du benutzt.


    • Bearbeitet Markus222 Montag, 13. August 2012 16:46
    Montag, 13. August 2012 16:45
  • Danke Markus
    Montag, 13. August 2012 19:36
  • Neben der
    Sortierung, der Zuordnung der Vergleichs zu den Quellwerten bestand für mich
    die zweite Aufgabe:

    Hafen von F12 nach D10 und Hamburg von E12 nach E10 zu kopieren

    Ich habe hierzu eine Lösung gefunden. Die komplette Prozedur untenstehend

    Ich habe sie nicht nochmal auf das Eingangsbeispiel umgeschrieben.

    Hier die komplette Prozedur:

    '--------------------------------------------------------------------------

    Range("A1").Select
    'Set rngQuelle = Range("C2")
    'Set rngVergleich = Range("AF3")

    For i = 0 To 500 - 1 'äußere Schleife (beginnt bei 0)
    j = 0 'Initialisierung der inneren Schleife
    Do Until j = 500 - 1 'innere Schleife, läuft maximal bis Endwert
    If Range("C2").Offset(i, 0).Value = Range("AF3").Offset(j,0).Value Then

    Range("AF3").Offset(j, 0).Copy.Destination:=Range("D2").Offset(i, 1)

    Range("AK3").Offset(j, 0).Copy.Destination:=Range("E2").Offset(i, 1)

    Range("AV3:BB3").Offset(j, 0).Copy.Destination:=Range("F2").Offset(i, 1)

    Range("BN3:BP3").Offset(j, 0).Copy.Destination:=Range("M2").Offset(i, 1)

    Exit Do
    End If
    j = j + 1
    Loop
    Next i
    End Sub







    Mittwoch, 15. August 2012 18:57