2016-10-04 7 views
0

Я работаю над макросом VBA, и в одном разделе мне нужно его подсчитать количество электронных таблиц, но с твист. Некоторые из листов будут иметь одно и то же имя и считаться листом, листом (1), листом (2). Мне нужно, чтобы эти листы были считаются одной группой, поэтому листы будут = 3 вместо индивидуально.VBA Excel подсчитывает одинаковые имена имен файлов

Простой пример кода я нашел для иллюстрации:

Sub aTest() 

Dim myArray() As Variant, dict As Object 
Dim i As Long, v As Variant 
myArray=Array("Apple","Orange","Pineapple", 
"Banana","Banana(1)","Apple","Banana(2)", 
"Pineapple(1)","Pineapple(2)") 
Set dict = CreateObject("Scripting.Dictionary") 

For i = LBound(myArray) To UBound(myArray) 
    If dict.exists(myArray(i)) Then 
     dict.Item(myArray(i)) = dict.Item(myArray(i)) + 1 
    Else 
     dict.Add myArray(i), 1 
    End If 
Next i 

For Each v In dict.keys 
    MsgBox v & " " & dict.Item(v) 
Next v 

End Sub 

яблоки считаются как 2, и оранжевый, как 1, но бананы и ананасы подсчитывают по отдельности, а не в качестве группы. Что мне нужно, чтобы получить счет , чтобы игнорировать «(#)» в конце этих листов?

ответ

1

Посмотрите на элемент массива и проверьте «(». Если вы ее нашли, уронить ту часть текста, прежде чем делать сам чек.

Это должно делать то, что вам требуется. Дайте мне знать, если Вам необходима дополнительная информация

Sub aTest() 

Dim myArray() As Variant, dict As Object 
Dim i As Long, v As Variant, bracketPos As Long 

myArray = Array("Apple", "Orange", "Pineapple", "Banana", "Banana(1)", _ 
      "Apple", "Banana(2)", "Pineapple(1)", "Pineapple(2)") 
Set dict = CreateObject("Scripting.Dictionary") 

For i = LBound(myArray) To UBound(myArray) 
    bracketPos = InStr(myArray(i), "(") 
    If bracketPos > 0 Then 
     myArray(i) = Left(myArray(i), bracketPos - 1) 
    End If 

    If dict.Exists(myArray(i)) Then 
     dict.Item(myArray(i)) = dict.Item(myArray(i)) + 1 
    Else 
     dict.Add myArray(i), 1 
    End If 
Next i 

For Each v In dict.keys 
    Debug.Print v & " " & dict.Item(v) 
Next v 

End Sub 

Это дает следующий результат:.!.

Apple 2 
Orange 1 
Pineapple 3 
Banana 3 
+1

Благодаря Dave «bracketPos» было то, что я искал, я знал, что есть какой-то способ, чтобы определить, просто не мог не думай это небрежно. –