听起来很简单,但我找不到办法做到这一点。我在VBA上相当有限。
Column A:
Some Text
Some Text
Some Text
Repeated Text
Some Text
Some Text
Repeated Text
SomeText
第一列有一些这样的文字。我还有一个包含30个不同字符串的列表:
Dog
Cat
Lion
Tiger
Bear
...
Elephant
我想用一个条件将这些字符串粘贴到B列。每当在A列的同一行遇到重复的文本时,复制的值将变为动物列表中的下一个字符串。当它到达最后一只动物时它应该恢复到第一只动物“狗”。最后我只想要这样的东西;
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
....
我不能用任何excel公式做到......
答案 0 :(得分:2)
使用A COUNTIF的简单INDEX可以解决问题。在B1放:
=INDEX(D:D,MOD(COUNTIF($A$1:$A1,"Repeated Text"),COUNTA(D:D))+1)
然后复制。
我的动物名单在D栏。
当D中的列表变大或变短时,这将调整,并在到达列表末尾时重复。
答案 1 :(得分:1)
我更喜欢Scott的答案,但这是我的解决方案:A栏中的小动物列表,C中的一些文本以及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