使用VBA

时间:2018-07-30 07:49:48

标签: excel vba excel-vba

我被一个泡菜卡住了,有人可以帮忙吗? 我正在尝试检查每个属性是否具有特定的property_id。

例如:-验证每个属性是否具有属性“ ABC,XYZ,LMN,IJK”。还要确认每个日期是否都> 10-12-2018

| Property | Property_ID | Date       |
|----------|-------------|------------|
| A        | ABC         | 10/12/2018 |
| A        | XYZ         | 08/11/2018 |
| A        | LMN         | 12/05/2018 |
| A        | IJK         | 15/05/2018 |
| B        | ABC         | 13/12/2018 |
| B        | XYZ         | 14/10/2018 |
| B        | IJK         | 15/12/2018 |
| C        | LMN         | 01/12/2018 |
| C        | XYZ         | 17/05/2018 |
Expected Result
    | Property | Property_ID | Date       | Result     |
    |----------|-------------|------------|------------|
    | A        | ABC         | 10/12/2018 |
    | A        | XYZ         | 08/11/2018 |
    | A        | LMN         | 12/05/2018 |
    | A        | IJK         | 15/05/2018 |All PID's are found
    | B        | ABC         | 13/12/2018 |
    | B        | XYZ         | 14/10/2018 |
    | B        | IJK         | 15/12/2018 |LMN is missing for Property B
    | C        | LMN         | 01/12/2018 |
    | C        | XYZ         | 17/05/2018 |ABC, IJK is missing for property C

我的逻辑:

'CREATING VARIABLE TO ACCESS SHEET RANGE
sheetName1 = "test"                          'sheetName SHOULD BE EQUAL TO WORKSHEET NAME (REPLACE THE NAME ACCORDINGLY)
Set sht1 = Sheets(sheetName1)

'FINDING TOTAL NUMBER OF ROWS PRESENT IN THE ACTIVE WORKSHEET
totalRowCount = ActiveWorkbook.Worksheets(sheetName1).Range("A1", Worksheets(sheetName1).Range("A1").End(xlDown)).Rows.Count

previous_Value = sht1.Range("A2")
current_Value = Null

'Creating Flags to verify value
ABC = False
XYZ = False
IJK = False
LMN = False
OPQ = False
Date_Validation = Null

For i = 2 To totalRowCount
current_Value = Trim(sht1.Range("A" & i))
If current_Value = previous_Value Then
    promotion_ID = Trim(sht1.Range("B" & i))

    'Validate date
    Date = "10-12-2018"

    If promotion_ID = "ABC" Then
        ABC = True
    ElseIf promotion_ID = "IJK" Then
        IJK = True
    ElseIf promotion_ID = "XYZ" Then
        XYZ = True
    End If

    'FULL SERVICE
    If promotion_ID = "LMN" Then
        LMN = True
    ElseIf promotion_ID = "OPQ" Then
        OPQ = True
    ElseIf promotion_ID = "QWE" Then
        QWE = True
    End If
Else
    sht1.Range("D" & i) = "Here i need to display msg of flag which is not found"
    previous_Value = sht1.Range("A" & i)
End If

1 个答案:

答案 0 :(得分:0)

我在代码中看到几个问题:

  1. 您为循环设置内部的“有效日期”值;
    一种。它永远不会改变;
    b。不会与触发异常的任何事物进行比较。
    C。当前的“日期”应从第一个记录初始化,在循环之外,并且Date_validation应基于该第一个值进行设置,例如:
    Date_validation = Date = Trim(sht1.Range("c2"))
    因此,仅当日期有效时才将“ Date_validation”设置为true,否则任何false值都是例外。
    d。旁注:名为“ Date”的变量很容易遇到关键字问题...我可以建议使用“ PropDate”还是“ PromoDate”。
    e。每次读取的新行(我递增)不仅应测试`date_validation
  2. 如果您的If current_Value = previous_Value Then为假(即新财产),则您没有检查是否满足所有条件,仅检查您现在坐在新财产上。相应的Else应该是ElseIf,例如:
    ElseIf not (ABC and IJK and XYZ and ... and Date_validation ) 'only if all false '.... display error message ' also all if the ABC (etc) ... ' triggers need to be reset to false ' along with Data_validation
  3. 在代码中的消息处,i已经递增,并且位于新记录i上。它可能应该显示为i-1