2016-06-08 124 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