VBA вложено для каждого цикла - PullRequest
0 голосов
/ 08 октября 2018

У меня есть рабочая книга, которая используется для планирования следующего предстоящего задания на задании.каждая строка имеет 28 ячеек, каждая ячейка представляет день недели в течение четырех недель.Я сделал формулу, чтобы проверить дату ячейки с начальной и конечной датой задачи и заполнить ячейку соответственно.

Вот формула:

 =IFERROR(IF(AND(ISNUMBER(SEARCH("Delivery",$D16)),VALUE(F$10)=VALUE('Calculation
 New'!$AO53)),"D",IF(AND(ISNUMBER(SEARCH('Calculation
 New'!$BH$13,$AJ16)),VALUE(F$10)>=VALUE('Calculation
 New'!$AO53),VALUE(F$10)<=VALUE('Calculation
 New'!$AP53)),"N",IF(AND(ISNUMBER(SEARCH('Calculation
 New'!$BH$12,$AJ16)),VALUE(F$10)>=VALUE('Calculation
 New'!$AO53),VALUE(F$10)<=VALUE('Calculation
 New'!$AP53)),"E",IF(AND(VALUE('Calculation
 New'!$AO53)=VALUE('Calculation New'!$AP53),F$10='Calculation
 New'!$AO53,NOT(ISNUMBER(SEARCH('Calculation
 New'!$BH$9,$D16)))),"SF",IF(AND(ISNUMBER(SEARCH('Calculation
 New'!$BH$9,$D16)),VALUE(F$10)>=VALUE('Calculation
 New'!$AO53),VALUE(F$10)<=VALUE('Calculation
 New'!$AP53)),"I",IF(AND(VALUE(F$10)>VALUE('Calculation
 New'!$AO53),VALUE(F$10)<VALUE('Calculation
 New'!$AP53)),"X",IF(VALUE(F$10)=VALUE('Calculation
 New'!$AO53),"S",IF(VALUE(F$10)=VALUE('Calculation
 New'!$AP53),"F","")))))))),"")

несколько вещей к этой формуле: D16: D85 на листе «SIS» - это описание задачи, где искать определенные слова BH9 на листе »Вычисление New "содержит слово для сравнения.Диапазон слов: BH3: BH13 F10: AF10 на листе «SIS» содержит дату для ячеек ниже дня недели AO53: AO122 на листе «Расчет новый» содержит дату начала задачи AP53: AP122 влист «Вычисление нового» содержит дату окончания задачи

в настоящее время, я получил 70 строк по 28 ячеек, и в каждой ячейке есть эта формула.Теперь я хочу использовать код VBA, чтобы сделать то же самое, но мне трудно начинать.Я не очень опытен с VBA.Я исследовал в отношении вложенности для каждого цикла, но пока мне это не удается.

Буду признателен за любую помощь, которую смогу получить.

Заранее спасибо, Дан

Вот код, который я написал до сих пор, не полный, но я застрял и мне нужно немногосовет

        Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)</p>

<code>Dim SDate As Range
Dim EDate As Range
Dim WDate As Range

Set SDate = Worksheets("Calculation New").Range("SDate")
Set EDate = Worksheets("Calculation New").Range("EDate")
Set WDate = Worksheets("Calculation New").Range("WDate")

    For SDate = 1 To Worksheets("Calculation New").Range("SDate").End(xlDown) 'lenght of range varies

       'For WDate = 1 To 28     ' length is always same
           'If cell = WDate Then 'i want to compare each cell of WDate with the start date
             'cell = "X"             

       'Next
   Next
End Sub
</code>

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Для циклов может быть сложно - обычно вы можете начать с массива, говорящего r = ActiveSheet.UsedRange, и пройти через него

Sub nestedLoop()
  r = ActiveSheet.UsedRange
  For i = LBound(r) To UBound(r)
    For j = LBound(r, 2) To UBound(r, 2)
      'evaluate r(i,j) do something
      'Debug.print r(i,j)
    Next j
  Next i
End Sub
0 голосов
/ 08 октября 2018

Чтобы начать работать с VBA, вы можете начать здесь.Есть много сомнительных сайтов, предлагающих код VBA, но это напрямую от Microsoft и охватывает основы.Удачного кодирования!

https://docs.microsoft.com/en-us/office/vba/library-reference/concepts/getting-started-with-vba-in-office

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...