简单的条件公式或宏

时间:2016-09-01 19:42:05

标签: excel vba excel-vba

听起来很简单,但我找不到办法做到这一点。我在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公式做到......

2 个答案:

答案 0 :(得分:2)

使用A COUNTIF的简单INDEX可以解决问题。在B1放:

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

然后复制。

我的动物名单在D栏。

当D中的列表变大或变短时,这将调整,并在到达列表末尾时重复。

![enter image description here

答案 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