每行迭代中的逻辑运算

我正在更新基于可用性代码的容量表。 特定范围内的可用性代码具有相同的容量(有一些例外)。 每个可用性代码在“F”列中列出。 相关能力将被列在“I”栏中。

代码的目标是:

  • 阅读单元格“F”中的可用性代码 – 可以是300-799之间的任何nnn
  • 确定它所处的范围 – 300-499,500-599,600-699,700-799,但例外的是762,763,764,765,768
  • 在单元格“I”中分配容量 – 目前使用Row.Offset
  • 迭代一行,并重复数据的最后一个“F”单元格

     Sub Capacity() Dim ACNum As Range Dim WB As Workbook Dim WS As Worksheet Set WB = ActiveWorkbook Set WS = WB.ActiveWorksheet Set ACNum = WS.Range("F:F") For Each Row In ACNum.Cells Set AC = WS.Cells(WS.Rows.Count, "F").End(xlUp).Offset(1) If (AC = "762" Or AC = "763" Or AC = "764" Or AC = "765" Or AC = "768") Then Row.Offset(0, 3).Value = "72" ElseIf (AC >= "300" And AC <= "499") Then Row.Offset(0, 3).Value = "181" ElseIf (AC >= "500" And AC <= "599") Then Row.Offset(0, 3).Value = "163" ElseIf (AC >= "600" And AC <= "699") Then Row.Offset(0, 3).Value = "124" ElseIf (AC >= "700" And AC <= "799") And _ (AC <> "762" Or AC <> "763" Or AC <> "764" Or AC <> "765" Or AC <> "768") Then Row.Offset(0, 3).Value = "144" End If Next Row End Sub 

每次执行此操作时,都会收到一个通用错误,在第13行(第一个If语句的开头)中以黄色突出显示。 如果我试图使用Excel的评估工具,它的选项是灰色的,我不能通过macros。

我无法确定我做错了什么。 我有一段时间没有在Excel VBA工作,所以我可能会错过一个小的细节。 这似乎很直接。

编辑 :添加了“公式”方法解决scheme

这应该做的

 Option Explicit Sub Capacity() Dim cell As Range Dim noNumbers As String Dim code As Integer noNumbers = "-762-763-764-765-768-" '<== code exceptions For Each cell In ActiveSheet.Columns("F").SpecialCells(xlCellTypeConstants, xlNumbers) '<= consider only numbers in "availibility code" column With cell If InStr(noNumbers, "-" & .value & "-") > 0 Then code = 72 Else Select Case .value Case 300 To 499 code = 181 Case 500 To 599 code = 163 Case 600 To 699 code = 124 Case 700 To 799 code = 144 Case Else code = -1 End Select End If .Offset(0, 3) = code End With Next cell End Sub 

根据你的解释,我假定“可用性代码”实际上是一个数字,所以声明和使用“integer”types的variables( code )来处理它,然后使用Select Case语句去掉parsing条件,避免重复了很多人物

正如丹•多诺霍(Dan Donoghue)所build议的,您可能想要使用公式方法。 我使用http://chandoo.org/wp/2010/06/24/between-formula-excel/中的“中位数”函数得出了以下结论&#x3002;

 Sub Capacity2() With ActiveSheet.Columns("F").SpecialCells(xlCellTypeConstants, xlNumbers) '<= consider only numbers in "availibility code" column .Offset(, 3).FormulaR1C1 = "=if(isnumber(search(""-"" & RC[-3] & ""-"",""-762-763-764-765-768-"")),72," _ & "if(RC[-3]=MEDIAN(RC[-3],300,499),181," _ & "if(RC[-3]=MEDIAN(RC[-3],500,599),163," _ & "if(RC[-3]=MEDIAN(RC[-3],600,699),124," _ & "if(RC[-3]=MEDIAN(RC[-3],700,799),144,-1" _ & ")))))" End With 

当然,您也可以直接在Excel单元格中执行而不是运行VBAmacros