2017-03-07 41 views
1

が私の場合です。VBA - 列Bのセルが空白でない場合、列A = 1

列Aは空です。 列Bはゲストの部屋番号です 列Cはその部屋のゲストの名前です

どの部屋が占有されているかをカウントしようとしています。私は、カウント式を入れたが、結果は私は知らないなぜ...ここ

はコード0です:ので、私は列Bあれば言って数式を入れしようとしていた

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 

任意の数値(部屋番号)として、それは列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 

あなたが最初のコードとの答えを持っている場合、私はどのように多くの部屋(列B)カウントするには....だけでなく

+0

単純なワークシート「COUNTIF」が適切です。 – Jeeped

+1

@Jeeped、VBAにコードを入れてもいいですか?回答として......... – JohanEs

+0

列Aが空で、列B&Cが満たされていてもいなくてもいい方法は、列Aにカウントを配置する場所を決定する。部屋が満たされているかどうかにかかわらず、部屋のデータの範囲に満たされている別の列を選択します。期待される結果と共にサンプルデータを提供する。部屋番号**は常に**数字ですか、テキストですか(101Aなど)ですか? – Jeeped

答えて

1

をそれを取るが占有されている私のようなコードを使用します。

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

私はそれを働かせる方法を見つけました.....ありがとうございました。今、私は同じことをしたいが、別のシートで "チョコストロブ"と言うことができます。何を置くべきですか? – JohanEs

+0

@JohanEs私のコードを使って "ChocoStrawb"シートに対して同じ作業をしたければ、メインシートに 'Worksheets(" Summary ")。Range(" C6 ")の行に沿って別の行を追加します。値= CountOccupiedRooms( "ChocoStrawb") '。これは小さなサブルーチンと関数を使用する利点です。小さな労力で再利用することができます。 – YowE3K

関連する問題