Excel vba для каждого диапазона и проблемы разделения

#excel #vba

Вопрос:

Пожалуйста, помогите решить мою проблему. Я использую приведенный ниже сценарий, но ничего не получаю в таблице активов..

  Sub Dutylist()
 Dim dutyTable(1 To 2, 1 To 4) As String
 Dim Cyc As Integer, Team As Integer
 Dim Svalue As Range, Srange As Range
 Dim Result() As String
 //Cycle 1
 dutyTable(1, 1) = "A,B,C,D,E,F,G"
 dutyTable(1, 2) = "D,C,A,B,A,E,D"
 dutyTable(1, 3) = "B,A,E,C,B,D,E"
 dutyTable(1, 4) = "C,B,C,D,C,A,A"
 //Cycle 2
 dutyTable(2, 1) = "B,E,D,A,D,B,A"
 dutyTable(2, 2) = "B,A,E,C,C,D,B"
 dutyTable(2, 3) = "D,C,A,B,B,E,B"
 dutyTable(2, 4) = "E,A,B,D,A,C,D"

 Cyc = 1
 Set Srange = ActiveSheet.Range("a:a")
 For Team = 1 To 4
      Result = Split(dutyTable(Cyc, Team), ",")
    For Each Svalue In Srange
       If Svalue = "Team " amp; CStr(Team) Then
          Svalue.Offset(0, 1).Resize(, UBound(Result)   1).Value = Result
       End If
    Next Svalue
 Next Team
 End Sub
 

Какие — либо проблемы с моим кодом выше?

Комментарии:

1. Работает для меня, когда у вас на самом деле есть такие значения, как Team 1 и т.д. в столбце «A:A». Но вы можете захотеть оптимизировать свой цикл, для каждого значения от 1 до 4 вы теперь буквально проходите по каждой ячейке во всем столбце >>>>>>>>>>>>>>> Очень Медленно!

Ответ №1:

Мое понимание выполнения вашего кода должно быть следующим: то, что я изменил, — это переставить Looping с некоторыми изменениями, а также вы должны set range ссылаться на последнюю использованную строку, а A:A не для ускорения выполнения.

В основном код будет соответствовать значению Col A для команды, если он будет найден, то вернет dutyTable1 значение на основе cycle предоставленного вами,

  Sub Dutylist()
 Dim dutyTable(1 To 2, 1 To 4) As String
 Dim Cyc As Integer, Team As Integer
 Dim Svalue As Range, Srange As Range
 Dim Result() As String
 Dim i As Long

 dutyTable(1, 1) = "A,B,C,D,E,F,G"
 dutyTable(1, 2) = "D,C,A,B,A,E,D"
 dutyTable(1, 3) = "B,A,E,C,B,D,E"
 dutyTable(1, 4) = "C,B,C,D,C,A,A"

 dutyTable(2, 1) = "B,E,D,A,D,B,A"
 dutyTable(2, 2) = "B,A,E,C,C,D,B"
 dutyTable(2, 3) = "D,C,A,B,B,E,B"
 dutyTable(2, 4) = "E,A,B,D,A,C,D"

 Cyc = 1
 Set Srange = ActiveSheet.Range("a1:a20")

For Each Svalue In Srange
    For Team = 1 To 4
        Result = Split(dutyTable(Cyc, Team), ",")
            If InStr(Svalue.Value, Team) > 0 Then
               Svalue.Offset(0, 1).Resize(, UBound(Result)   1).Value = Result
            End If
    Next Team
Next Svalue

 End Sub
 

Вывод (тестируются только 3 команды, могут быть расширены)

введите описание изображения здесь

Комментарии:

1. Спасибо, что ответили и помогли. Мой код-это поиск и поиск «Команды 1″,»Команды 2», «Команды 3», «Команды 4» из таблицы активов и экспорт рабочей смены в нужную команду

2. drive.google.com/file/d/1RWQfwzbNcE-A01IMAz6F_fzeldFWr-pr/…

3. Как получилось, что ваш результат не соответствует ни одной таблице, которую вы создаете, я не могу понять логику, лежащую в основе… Например, как вы попадаете B,C,A,E... в команду 1?

4. Извините за мой плохой английский и вашего пациента. Я имею в виду, что каждую неделю я должен запускать новый цикл для обеих 4 команд с заданной рабочей сменой каждый день недели. Найдите местоположение «команда 1» и выведите для него значения таблицы массива dutytable(1,1). Затем найдите «Команду 2» и используйте массив обязательных значений(1,2) на листе, И другие команды также выполнят те же процедуры. Если на следующей неделе я буду использовать массив цикла 2 dutytable(2,1)……. И я могу установить еще 5 дежурных массивов в своей программе.

5. Проверьте мой отредактированный ответ, если вы напишете Team 1 , тоже будет работать, примите ответ, если поможете 🙂