2016-06-08 58 views
0
Sub Auto_Open() 
Application.ScreenUpdating = False 

Dim count4u As Long 
Dim count4g As Long 
... 

Dim i As Double 
i = 4 

count4u = 0 
count4g = 0 
count4t = 0 
... 

Sheets("data").Select 



Do While Cells(i, 3).Value <> "" 
Cells(i, 3).Activate 

If Left(ActiveCell.Value, 3) = "CP1" Then 


     If Mid(ActiveCell.Value, 4, 1) = "U" Then 
    count4u = count4u + 1 

    ElseIf Mid(ActiveCell.Value, 4, 1) = "G" Then 
     count4g = count4g + 1 

    ElseIf Mid(ActiveCell.Value, 4, 1) = "T" Then 
    count4t = count4t + 1 

    ElseIf Mid(ActiveCell.Value, 4, 1) = "B" Then 
    count4b = count4b + 1 

    ElseIf Mid(ActiveCell.Value, 4, 1) = "F" Then 
    count4f = count4f + 1 

    ElseIf Mid(ActiveCell.Value, 4, 1) = "C" Then 
    count4c = count4c + 1 
End If 

... 





i = i + 1 
Loop 

Worksheets("Base").Activate 
Range("X6") = count4u 
... 
Call cp2count 


End Sub 

我已经尝试了不同的解决方案,一个试图用每个循环和范围(“C4”,范围(“C4”)。完(xldown))。SpecialCells (xlCellTypeVisible)。另一次我试图选择具有特殊单元的单元(xlcelltypevisible)并按照我的方式循环。我有一个问题能够在不使用activecell函数的情况下计算第4个/第5个位置的字符。计数字符VBA

+0

你知道这可以用公式来完成? VBA是必需的吗? –

+0

我的工作簿生成一个报告,根据用户输入过滤数据透视表(我的数据表不是静态的)。我有VBA代码,将过滤器更改为数据表,我需要计算过滤的结果。 – WannaBeMathGeek

+0

如果没有配方,你会怎么做?左边的函数如何工作?这样做时只能引用一个单元格。 Ex countif(范围(左边(“文本”你会卡在这里,因为你不能引用范围,只有一个单元格 – WannaBeMathGeek

回答

0

如果你不想做的Excel与ARRAYFORMULA直接这样做,那么VBA将要使用范围地区:

Dim rToCheck As Range, rArea As Range, rCell AS Range 
Dim count4u AS Long, count4 AS Long 

count4u = 0 
count4g = 0 

Set rToCheck = Application.Intersect(ThisWorkbook.Worksheets("data").UsedRange,ThisWorkbook.Worksheets("data").Columns(3).SpecialCells(xlCellTypeVisible)) 

If Not(rToCheck Is Nothing) Then 'Make sure we have visible cells! 
    For Each rArea In rToCheck 
     For Each rCell In rArea 
      Select Case Left(rCell.Value,4) 
       Case "CP1U" 
        count4u = count4u + 1 
       Case "CP1G" 
        count4g = count4g + 1 
      End Select 
     Next rCell 
    Next rArea 
End If 

Worksheets("Base").Cells(6,24) = count4u 'Cells(6,24) is Range("X6") 

Set rToCheck = Nothing 
Set rArea = Nothing 
Set rCell = Nothing