为每个循环嵌套的VBA

时间:2018-10-08 15:51:49

标签: excel vba excel-vba

我有一本工作簿,用于安排作业中的下一个即将执行的任务。每行有28个单元格,每个单元格代表提前4周内的一周中的某天。我制定了一个公式来检查单元格的日期以及任务的开始和结束日期,并相应地填充该单元格。

这是公式:

 =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","")))))))),"")

该公式的一些注意事项: 工作表“ SIS”上的D16:D85是在任务描述中查找某些单词的位置 工作表“ Calculation New”上的BH9包含一个要比较的词。字词范围是BH3:BH13 表格“ SIS”上的F10:AF10包含星期几下方的单元格的日期 工作表“ Calculation New”上的AO53:AO122包含任务的开始日期 工作表“ Calculation New”上的AP53:AP122包含任务的结束日期

目前,我得到70行乘以28个单元格,每个单元格中都有此公式。现在,我想使用VBA代码做同样的事情,但是我很难入门。我对VBA不太了解。我研究了关于嵌套每个循环的问题,但到目前为止,我还没有成功。

我将不胜感激。

先谢谢您 丹

这是我到目前为止编写的尚不完整的代码,但我遇到了麻烦,需要一些建议

        Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)

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

2 个答案:

答案 0 :(得分:0)

要开始使用VBA,您可能要在这里开始。有很多可疑的网站提供VBA代码,但这直接来自Microsoft,涵盖了基础知识。编码愉快!

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

答案 1 :(得分:0)

For循环可能很棘手-通常,您可以从一个说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