2016-09-01 7 views
0

Es klingt einfach, aber ich konnte keinen Weg finden, dies zu tun. Ich bin ziemlich beschränkt auf VBA.Einfach Bedingte Formel oder Makro

Column A:  
Some Text 
Some Text 
Some Text 
Repeated Text 
Some Text 
Some Text 
Repeated Text 
SomeText 

Erste Kolumne hat etwas Text wie folgt. Ich habe auch eine Liste, die 30 verschiedene Zeichenketten wie diese enthält:

Dog 
Cat 
Lion 
Tiger 
Bear 
... 
Elephant 

ich diese Strings in Spalte B Paste mit einer Bedingung kopieren möchten. Immer wenn dieser wiederholte Text in derselben Zeile in Spalte A angetroffen wird, ändert sich der kopierte Wert in die nächste Zeichenfolge in der Tierliste. Wenn es das letzte Tier erreicht, sollte es zum ersten Tier "Hund" zurückkehren. Am Ende will ich einfach so etwas;

Column A:   Column B: 
R1 Some Text   Dog 
R2 Some Text   Dog 
R3 Some Text   Dog 
R4 Repeated Text  Cat 
R5 Some Text   Cat 
R6 Some Text   Cat 
R7 Repeated Text  Lion 
R8 SomeText   Lion 
............. 
R124 Some Text  Elephant 
R125 Some Text  Elephant 
R126 Repeated Text Dog (List is over and it reverted back to the first animal in the list) 
R127 Some text  Dog 
.... 

ich es nicht mit einer Excel-Formel tun könnte ...

Antwort

2

Ein einfacher Index mit einem COUNTIF den Trick. In B1 setzen:

=INDEX(D:D,MOD(COUNTIF($A$1:$A1,"Repeated Text"),COUNTA(D:D))+1) 

Und nach unten kopieren.

Meine Liste der Tiere ist in Spalte D.

Dies wird anpassen, wie die Liste in D größer oder kürzer wird und wiederholt, wenn das Ende der Liste erreicht.

![enter image description here

+0

hinzufügen 'MOD()' für Schleifen, sobald der Zählwert 30 überschreitet? –

+0

@TimWilliams hat es repariert, um zu wiederholen, wenn das Listenende gefunden wird. Danke für den Fang. –

+0

Zuerst wurde es nach dem dritten wiederholten Text gebrochen und fängt an, zum nächsten Tier scheinbar zufällig weiterzugehen. Ich dachte, dass es mit meinem wiederholten Text zusammenhing, der tatsächlich "wiederholter Text" war, also entfernte ich die mutigen Umbauten und Formel funktionierte tadellos. Vielen Dank! –

1

Ich mag Scotts Antwort besser, aber hier ist meine Lösung: Liste der Critters in Spalte A, einen Text in C, und die Ergebnisse in D.

Sub Get_Animal() 
Dim rngAnimals As Range, rngWords As Range, rngThing As Range, strChangeValue As String, AnimalCounter As Long 
Set rngWords = ActiveSheet.Range("C1:C26") 
Set rngAnimals = ActiveSheet.Range("A1:A3") 
strChangeValue = "end" 
AnimalCounter = 1 
ActiveSheet.Range("D1:D99").Clear 
For Each rngThing In rngWords 
    If rngThing.Text = strChangeValue Then 
     AnimalCounter = AnimalCounter + 1 
     If AnimalCounter > rngAnimals.Rows.Count Then 
      AnimalCounter = 1 
     End If 
    End If 
    rngThing.Offset(0, 1) = rngAnimals.Cells(AnimalCounter, 1) 
Next rngThing 

End Sub 
Verwandte Themen