2017-03-07 63 views
1

這裏是我的情況:VBA - 如果列B中的單元格不是空白,則列A = 1

列A爲空。 B列是客人的房間號碼 C列是該房間中客人的姓名

我想要統計有多少房間被佔用。所以我把計數公式,但結果是0。我不知道爲什麼..

下面是代碼:

Sheets("Champagne").Select 
Range("B2").AutoFill Destination:=Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row) 
LastRow = Range("A2").End(xlDown).Row 
Cells(LastRow + 2, "A").Formula = "=SUM(A2:A" & LastRow & ")" 
LRowA = [A4200].End(xlUp).Address 
Range("A:A").Interior.ColorIndex = xlNone 
Range("A2:" & LRowA).Interior.ColorIndex = 33 
Range("A:A").HorizontalAlignment = xlCenter 

所以後來我試圖把一個公式,如果B柱說作爲任何數字(房間號),它將在列A中算作1。然後在列A末尾加上一個總和。

這是我試圖放置的代碼,但它將123456放入C欄。

Sheets("Champagne").Select 

For Each Cel In Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row) 
If Cel.Value <> "" Then Cel.Offset(1, 0).Value = "123456" 
Range("A2").AutoFill Destination:=Range("A2:A" & Cells(Rows.Count, 2).End(xlUp).Row) 
LastRow = Range("A2").End(xlDown).Row 
Next 

Range("B2").AutoFill Destination:=Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row) 
LastRow = Range("A2").End(xlDown).Row 
Cells(LastRow + 2, "A").Formula = "=SUM(A2:A" & LastRow & ")" 
LRowA = [A4200].End(xlUp).Address 
Range("A:A").Interior.ColorIndex = xlNone 
Range("A2:" & LRowA).Interior.ColorIndex = 33 
Range("A:A").HorizontalAlignment = xlCenter 

如果你有第一個代碼的答案,我把它以及....

+0

一個簡單的工作表'COUNTIF'似乎更合適。 – Jeeped

+1

@Jeeped,你可以把它的代碼在VBA的數量if..please ..作爲一個答案.... – JohanEs

+0

如果列A是空的列B&C可能會或可能不會被填充,那麼沒有確定將計數放在A列中的哪個位置。選擇另一個填充房間數據範圍的列,而不管房間是否已滿。將樣本數據與預期結果一起提供。房間號碼**總是**號碼還是一些文字(例如101A)? – Jeeped

回答

1

要統計有多少房(列B)被佔用,我會用這樣的代碼:

Function CountOccupiedRooms(sheetname As String) As Long 
    Dim j As Long 
    dim c As Range 
    With Worksheets(sheetname) 
     'Check that some data exists 
     If IsEmpty(.Range("B2").Value) Then 
      CountOccupiedRooms = 0 
      Exit Function 
     End If 

     For Each c In .Range("B2", .Cells(.Rows.Count, "B").End(xlUp)) 
      If Application.WorksheetFunction.CountIf(.Range("B2:B" & c.Row), c.Value) = 1 Then 
       j = j + 1 
      End If 
     Next 
    End With 
    CountOccupiedRooms = j 
End Function 

,然後,假設你希望把這個數字在單元格中的某個地方,該代碼可以在你的主代碼稱爲

Worksheets("Summary").Range("C5").Value = CountOccupiedRooms("Champagne") 
Worksheets("Summary").Range("C6").Value = CountOccupiedRooms("ChocoStrawb") 

目標工作表的名稱(「摘要」)和地點(「C5」和「C6」 )只是出於說明的目的 - 你可以使用任何你喜歡的東西。

+0

它不起作用。看看我是否以另一種方式去做,也許會更容易。看下面的答案。 – JohanEs

+0

我找到了讓它工作的方法.....非常感謝你..現在如果我想要做同樣的事情,但在另一張工作表讓我們說所謂的「ChocoStrawb」..我應該怎麼做 – JohanEs

+0

@JohanEs如果你希望使用我的代碼爲表「ChocoStrawb」執行相同的任務,您可以沿着「工作表」(「摘要」)的行添加另一行代碼(「C6」)。值= CountOccupiedRooms(「ChocoStrawb」)'。這是使用小型子程序和功能的優勢 - 它們可以通過很少的努力重複使用。 – YowE3K

相關問題