2012-03-28 13 views
2

Ich habe den Bereich rngData und Array aCopyrows() [int].Geben Sie die Zeilennummer innerhalb des benutzerdefinierten Bereichs anstelle der absoluten Zeilennummer zurück

die folgende Schleife um das Array zu bevöl verwendet wird:

For Each c In rngData 

    If c.Value = "Search term 1" Then 
     aCopyrow(1) = c.Row 
    ElseIf c.Value = "Search term 2" Then 
     aCopyrow(2) = c.Row 
    ElseIf c.Value = "Search term 3" Then 
     aCopyrow(3) = c.Row 
    End If 

Next c 

I das Array will, dass die Zeilennummern zu speichern, entsprechend rngData, oder mit anderen Worten: wenn eine Übereinstimmung in der ersten Reihe von rngData gefunden wird , wird die ganze Zahl 1 in aCopyrow gespeichert. Bei Verwendung dieser Methode wird jedoch die globale Zeilennummer dieser bestimmten Zelle gespeichert.

Jede Hilfe wird geschätzt!

rngData.c.Row gibt mir nur einen Fehler (Methode nicht unterstützt).

+0

Gibt es eine Möglichkeit, dass 'rngData' mehrere 'Suchbegriff 1' oder' Suchbegriff2' oder 'Suchbegriff3' haben kann? –

+0

Nein, die Suchbegriffe sind Firmennamen und können nur einmal vorkommen. – beerskij

+0

Eine letzte Frage. Sind diese Werte in einer einzelnen Zeile/Spalte? d. h. "rngData" wie "I13: M13" oder "B1: B100"? –

Antwort

1

Wie wäre:

aCopyrow(1) = c.Row - rngData.Cells(1,1).Row + 1 

und wenn es mehr als 3 Ifs sind, können Sie wie folgt durchlaufen könnte der Code kompakter zu machen:

Dim i as Long 

For Each c In rngData 

    For i = 1 To 3 
     If c.Value = "Search term " & i Then 
      aCopyrow(i) = c.Row - rngData.Cells(1,1).Row + 1 
     End If 
    Next i 

Next c 
+0

Danke für den Tipp, aber es wird nur drei Suchbegriffe geben. Deine Lösung ist eine Art von was ich gerade mache, obwohl ich es ein bisschen ungeschickt finde. Aber vielleicht ist es der einzige Weg, also danke :) – beerskij

0

Verwenden Sie ein Array der Daten, es wird viel schneller sein:

Dim vArray As Variant 

vArray = rngData.Value 

For lRow = 1 To UBound(vArray, 1) 
    For lCol = 1 To UBound(vArray, 2) 
     If vArray(lRow, lCol) = "Search term 1" Then 
      aCopyrow(1) = lRow 
     ElseIf vArray(lRow, lCol) = "Search term 2" Then 
      aCopyrow(2) = lRow 
     ElseIf vArray(lRow, lCol) = "Search term 3" Then 
      aCopyrow(3) = lRow 
     End If 
    Next lCol 
Next lRow 
Verwandte Themen