2013-06-18 5 views
1

Я относительно новичок в vba. Я использовал VB давным-давно, поэтому я получаю много информации из этого опыта. Хотя теперь я столкнулся с более сложной задачей, и я не совсем понимаю, как это сделать.Автоматическое создание листов Excel из значений массива

У меня есть лист данных с информацией о версии программного обеспечения в столбце E (например, «3.1.1», «3.1.2» и т. Д.). Я создал цикл поиски через Е. В этом для есть несколько, если заявления, подобные этому:

If Cells(r, Columns("E").Column).Value = "3.1.2" Then 'find criteria 

      'Copy the current row 
      Rows(r).Select 
      Selection.Copy 

      'Switch to the sprint where you want to paste it & paste 
      Sheets("Sprint 2").Select 
      Rows(sprint2).Select 
      ActiveSheet.Paste 

      sprint2 = sprint2 + 1 'next row 

      'Switch back to backlog & continue to search for criteria 
      Sheets("Backlog").Select 
ElseIf... 

Это работает хорошо для меня, за исключением того, что мне нужно создать листы перед запуском макроса. То, что я хотел бы сделать, это:

  1. Поиск по колонке Е
  2. Заполнить массив со всеми уникальными значениями в колонке Е * [править]
  3. Создать лист для каждого значения в массиве

Я хотел бы услышать, что вы, ребята, думаете.

+0

Вы имеете в виду уникальные значения в столбце E? Вы уже создали массив? – MiVoth

+0

Да, вот что я имею в виду. И я еще не сделал или не заполнил массив, так как мои знания массивов очень ограничены. – Philip

ответ

0

Возможно, что помогает:

Sub ColumnE() 
Dim colE As Long, r As Long, c As Object, exists As Boolean 
Dim values As Collection, i As Long 
Set values = New Collection 
colE = Columns("E").Column 
r = Cells(Rows.Count, colE).End(xlUp).Row 
For i = 1 To r ' step 1: loop through column E 
    exists = False 
    For Each c In values ' step 2: look in collection if the element was already inserted 
     If c = Cells(i, colE) Then 
      exists = True 
      Exit For 
     End If 
    Next c 
    If Not exists Then values.Add Cells(i, colE) 
Next i 
For Each c In values ' step 3: add a sheet for every value in collection 
    Worksheets.Add ' WARNING: you should test, if there already is a sheet with that name 
    ActiveSheet.name = c 
Next c 
End Sub 

Мне нравится использовать коллекции более чем массивы в VBA, потому что я могу динамически добавлять новые элементы без изменения размера. (но это зависит от ситуации ...)

+0

Отлично, спасибо большое! – Philip

+0

какую команду я должен использовать для вызова листа? Другими словами: 'Листы (« Спринт 2 »). Выберите« что я должен изменить? 'Таблицы (c) .Выберите' и 'Таблицы (« c »). Выберите' оба не будут работать. – Philip

+0

Попробуйте 'Таблицы (CStr (c)). Активируйте'. (но 'c' определяется только в цикле' for each'. – MiVoth

Смежные вопросы