2017-07-12 87 views
0

我需要针对以下情况的解决方案: 我有一张包含4张工作表的Exel文件。 所有床单的结构都是一样的,只是内容不同而已。在vba中计算值“x”

说明:

  • 用户必须设置在该地区D9一个“X”:I9(这个“X”必须在所有表计,但有一个特殊情况:
  • 用户可以设置在该区域K9的“Y”:P9

在这种情况下只应计算所有的“x”的“y”的区域之后,此片材的

实施例:

表1:D9:I9( “X”)= 6 “×” enter image description here

表2:D9:I9( “X”)= 6 “×” enter image description here

表3: D9:I9(“x”)= 6“x”| M9(“y”) enter image description here

而在表3中是特殊情况。 用户设置了6个“x”,但也设置了“y”。

这意味着,不应计算在“y”之前和相同区域中设置的“x”。

我有以下VBA代码,伟驰算我所有的“X”,而不是机智这种“特殊情况”(我不知道如何)

Function breaking_count() 

Const Area_x As String = "$D$9:$I$9" 
Const Area_y As String = "$K$9:$P$9" 

Dim Nr As Integer, Count_x As Integer 


For Nr = 4 To 1 Step -1 

    With Worksheets(CStr(Nr)) 

     If WorksheetFunction.CountIf(.Range(Area_y), "*y*") > 0 Then Exit For 
     Count_x = Count_x + WorksheetFunction.CountIf(.Range(Area_x), "*x*") 

    End With 

Next 
End Function 

回答

0

下面的代码将显示消息框为每张纸计数为x

Sub breaking_count() 
    Const Area_x As String = "$D$9:$I$9" 
    Const Area_y As String = "$K$9:$P$9" 
    Dim Nr As Integer, Count_x As Integer, Col_Ind 
    Dim temp_Area As Range 

    For Nr = 4 To 1 Step -1 
     'With Worksheets(CStr(Nr)) 
     With Worksheets(Nr) 
      If WorksheetFunction.CountIf(.Range(Area_y), "*y*") > 0 Then 
       'find the index of "y" in Area_y 
       Col_Ind = WorksheetFunction.Match("y", .Range(Area_y)) 
       'Reset the range Area_y in temp_Area using offset 
       Set temp_Area = .Range(.Cells(9, 4).Offset(0, Col_Ind), .Cells(9, 9)) 
       Count_x = Count_x + WorksheetFunction.CountIf(temp_Area, "*x*") 
      Else 
       Count_x = Count_x + WorksheetFunction.CountIf(.Range(Area_x), "*x*") 
      End If 
      MsgBox Worksheets(Nr).Name & " : " & Count_x 
      Count_x = 0 
     End With 

    Next 
End Sub 

让我知道是否有什么不清楚。

+0

非常感谢你:) – Ghost108

+0

@ Ghost108 - 不客气! – Mrig