比较列表并替换工作表名称

时间:2016-03-15 14:02:50

标签: excel vba excel-vba

我有一个工作表(“转储”),其中包含2列“全名”(AA,BB,CC等)和“电子邮件地址”(123 @ test.com,321 @ test.com等)。

整个Excel包含200多个工作表(命名为AA,BB,CC等)。

我需要一个VBA脚本来将工作表名称与“转储”表中的“全名”列进行比较,并仅在工作表名称与“全名”匹配时将工作表名称替换为“电子邮件地址”,即仅在AA(全名)= AA(工作表名称)时替换。

我有代码将“全名”替换为“电子邮件地址”而不进行验证。

Sub replace()
    Dim arr As Variant
    arr = Range("A2:A5").Value
    For i = LBound(arr) To UBound(arr)
        Sheets(i + 1).Activate
        Sheets(i).Name = arr(i, 1)
    Next i
End Sub

谢谢:)

1 个答案:

答案 0 :(得分:0)

你可以这样做(未经测试):

Sub replace()
    Dim col As New Collection
    Dim cell As Range
    Dim sh As WorkSheet

    ' Step 1: Create a dictionary that maps names to emails
    For Each cell in Sheets("Dump").Range("A2:A999")
        If cell.value = "" Then Exit For ' no more names
        col.Add cell.Offset(0, 1).value, cell.value
    Next
    ' Step 2: Go through all sheets and rename them
    For Each sh in Sheets
        sh.Activate ' not really necessary, but it gives some visual clue
        On Error Resume Next ' ignore mismatch errors
            sh.Name = col.Item(sh.Name) ' replace name by email
        On Error Goto 0
    Next
End Sub

这假设您在A列中有全名,从第2行开始,在B列中有电子邮件地址。