2014-01-30 3 views
1

안녕하세요 내 워크 시트를 반복하고 특정 문자열을 찾을 매크로를 만들려고합니다. 한 번 그 문자열을 발견하면 옆에있는 열을보고 싶습니다. 그리고 PoweredOn 또는 PoweredOff라고 말하면 카운터에 1을 더한 다음 끝에 숫자를 표시하십시오.VBA Excel에서 문자열 계산 문제가 발생했습니다.

내 Excel에서 내 가상 컴퓨터로 열 A 및 B 열 전원 상태입니다 템플릿을 하나의 가상 컴퓨터를 찾는 루프 설정이 있고 전원이 켜져 있지만 내 매크로 실행할 때 인쇄합니다 0으로 여기에 내 코드가 있습니다.

Dim POT As Integer 
Dim POFFT As Integer 
Sheets("tabvInfo").Select 
Range("A2").Select 

Do 
If ActiveCell.Value = ("vCloud Cell Template") Then 
    If ActiveCell.Offset(0, 1).Value = ("PoweredOn") Then 
    POT = Selection.Cell.Count 

Else 
    If ActiveCell.Offset(0, 1).Value = ("PoweredOff") Then 
    POFFT = Selection.Cell.Count 
    End If 
    End If 
    End If 

    ActiveCell.Offset(1, 0).Select 


Loop Until IsEmpty(ActiveCell.Offset(1, 0)) 

MsgBox ("The number of powerered on VMs is " & POT) 
MsgBox ("The number of powerered off VMs is " & POFFT) 

아무도 내가 왜 0을 얻고 있는지 말해 줄 수 있습니까? 나는 또한 내 시스템에서 다른 템플릿을 보면서 값의 수를 유지하면서 각 템플릿에 대해 do 루프를 만들 필요가 있거나 배열을 사용하여이 작업을 수행 할 수 있습니까?

+0

따라서 열 A의 셀에는''vCloud 셀 템플리트 ''또는'' "만 포함될 수 있습니까? –

+0

예 전체 문자열이 들어있는 셀을 셀 수만 싶었습니다. – LizzardMan

답변

1

이 대신

Sub Main() 
    Dim POT As Long 
    Dim POFFT As Long 

    Dim c As Range 
    For Each c In Sheets("tabvInfo").Range("A2:A" & Sheets("tabvInfo").Range("A" & Rows.Count).End(xlUp).Row) 
     If StrComp(c, "vCloud Cell Template", vbTextCompare) = 0 Then 
      If StrComp(c.Offset(0, 1), "PoweredOn", vbTextCompare) = 0 Then 
       POT = POT + 1 
      ElseIf StrComp(c.Offset(0, 1), "PoweredOff", vbTextCompare) = 0 Then 
       POFFT = POFFT + 1 
      End If 
     End If 
    Next 

    MsgBox ("The number of powerered on VMs is " & POT) 
    MsgBox ("The number of powerered off VMs is " & POFFT) 
End Sub 

그것은 .Select 문 및 .ActiveCell을 제거하십시오. 그것은 당신이 원하는 것을 성취하는 단순한 for 루프입니다.


난 당신이 생각하는 확실하지 오전하지만 당신은 당신이

을 할 수있는 루프를 사용이 필요 없도록 PoweredOn 오프

=COUNTIFS(A:A,"vCloud Cell Template",B:B, "PoweredOn") 
=COUNTIFS(A:A,"vCloud Cell Template",B:B, "PoweredOFF") 
따라서

2 개 아주 간단한 공식을 사용하여 달성 할 수

Sub NoLoop() 
    MsgBox "Powered ON: " & Evaluate("=COUNTIFS(A:A,""vCloud Cell Template"",B:B, ""PoweredOn"")") 
    MsgBox "Powered OFF: " & Evaluate("=COUNTIFS(A:A,""vCloud Cell Template"",B:B, ""PoweredOff"")") 
End Sub 
+2

VBA가 필요없이 끊임없이 업데이트되도록 두 "수식"을 넣을 수도 있습니다. –

+0

많은 도움을 주신 덕분에 :) – LizzardMan

+0

@MarkFitzgerald 필자는 'COUNTIFS (A : A, "vCloud Cell Template", B : B, "PoweredOn")를 실제로 나열한 이후로 생각했습니다. 미래의 방문자들에게 도움이 될 것입니다. –

관련 문제