dポイントプレゼントキャンペーン実施中!

下記のようなExcelの表があるとします。

   A    B     C     D     E
1      会社A   会社B   会社C    会社D
2 仕事A 23 45 67 27
3 仕事B 45 24 65 33
4 小計 68 69 132 60

この状態のときはいいのですが、

   A    B     C     D     E
1      会社A   会社B   会社C    会社D
2 仕事A 0 0 0 0
3 仕事B 0 0 0 0
4 小計 0 0 0 0

上記のようにB4、C4、D4、E4がそれぞれ「0」のときに4行目を削除または行の高さを「0」にするマクロを組みたいです。

わかる方がいましたらよろしくお願いします。

A 回答 (6件)

>「小計」がある場所がC列で「0」の場所が、F、G、H、Iにある場合は


> どうなるのでしょうか。

次のようになります。
4行目で「小計」がある列を文字列で指定します。
この「小計」から右に2つおいて、3つ目から4セル 0か空欄のときが対象になります。

Sub 小計全部ゼロ_行削除()
Dim Rng As Range
Dim Rw As Long
Const Retu = "C" '<--- ここで「小計」の列を指定します。(0数値は右3つ目から)
For Rw = Range(Retu & "65536").End(xlUp).Row To 1 Step -1
  Set Rng = Range(Retu & Rw)
  If Trim(Rng.Value) = "小計" And _
    Rng.Offset(, 3) = 0 And Rng.Offset(, 4) = 0 And _
    Rng.Offset(, 5) = 0 And Rng.Offset(, 6) = 0 Then
    Rows(Rw).Delete
  End If
Next Rw
Set Rng = Nothing
End Sub


Sub 小計全部ゼロ_行非表示()
Dim Rng As Range
Const Retu = "C" '<--- ここで「小計」の列を指定します。
For Each Rng In Range(Retu & "1", Range(Retu & "65536").End(xlUp))
  If Trim(Rng.Value) = "小計" And _
    Rng.Offset(, 3) = 0 And Rng.Offset(, 4) = 0 And _
    Rng.Offset(, 5) = 0 And Rng.Offset(, 6) = 0 Then
    Rng.EntireRow.Hidden = True
  End If
Next Rng
End Sub

この回答への補足

小計全部ゼロ_行非表示の方で行ったのですが、デバックエラーが出てしまいました。

補足日時:2004/02/13 19:13
    • good
    • 0
この回答へのお礼

うまくいきました。
ありがとうございました。

お礼日時:2004/02/13 20:31

既回答と同じことをしていますが、いろいろやり方があり、コードの印象は変ると言うことの実例。


Sub test02()
For i = Range("A65536").End(xlUp).Row To 1 Step -1
p = InStr(Cells(i, "A"), "小計")
x = Application.WorksheetFunction.And(p > 0, Cells(i, "B") = 0, Cells(i, "C") = 0, _
Cells(i, "D") = 0, Cells(i, "E") = 0)
If x Then
Rows(i).Delete
End If
Next i
End Sub
A列の「小計」の小と計の間のスペース数は統一して、上記
コードの「小計」部一個所を合わせてください。
    • good
    • 0

行削除と非表示の両方の場合を書いておきます。



こんな感じで如何でしょうか。

Sub 小計全部ゼロ_行削除()
Dim Rng As Range
Dim Rw As Long
For Rw = Range("A65536").End(xlUp).Row To 1 Step -1
  Set Rng = Range("A" & Rw)
  If Trim(Rng.Value) = "小計" And _
    Rng.Offset(, 1) = 0 And Rng.Offset(, 2) = 0 And _
    Rng.Offset(, 3) = 0 And Rng.Offset(, 4) = 0 Then
    Rows(Rw).Delete
  End If
Next Rw
Set Rng = Nothing
End Sub


Sub 小計全部ゼロ_行非表示()
Dim Rng As Range
For Each Rng In Range("A1", Range("A65536").End(xlUp))
  If Trim(Rng.Value) = "小計" And _
    Rng.Offset(, 1) = 0 And Rng.Offset(, 2) = 0 And _
    Rng.Offset(, 3) = 0 And Rng.Offset(, 4) = 0 Then
    Rng.EntireRow.Hidden = True
  End If
Next Rng
End Sub

この回答への補足

ありがとうございます。
このマクロのままだと実行できるのですが、「小計」がある場所がC列で「0」の場所がF、G、H、Iにある場合はどうなるのでしょうか自分でやって見たのですがエラーが出てしまいうまくいきませんでした。

補足日時:2004/02/13 18:20
    • good
    • 0

> 小計という文字を認識し、その横にある数字を認識し、その条件がすべて「0」だった



即席ですが、Findメソッドと組み合わせた例です。この例では、A1~A300までの間に「小計」があったら、その列の2~5行目を検査して、すべて0ならその行を非表示にします。
ループ文が入っていますので、データが膨大な場合は処理が遅くなり、お勧めできません。


Private Sub Worksheet_Calculate()
Cells.EntireRow.Hidden = False
With ActiveSheet.Range("A1:A300")
 Set c = .Find("小計", LookIn:=xlValues)
 If Not c Is Nothing Then
  firstAddress = c.Address
  Do
   Set c = .FindNext(c)
   r = Range(c.Address).Row
   If Cells(r, 2).Value = 0 And _
    Cells(r, 3).Value = 0 And _
    Cells(r, 4).Value = 0 And _
    Cells(r, 5).Value = 0 Then
    Rows(Range(c.Address).Row).Hidden = True
   End If
  Loop While Not c Is Nothing And c.Address <> firstAddress
 End If
End With
Set c = Nothing
End Sub

WIN2000 EXCEL2000動作
    • good
    • 0

空いている列、例えばF列にオートフィルタを設定し、フィルタの内容を「0以外」にしておきます。



見出し行など消したくない行はF列(F1など)に「1」と入力しておき、文字色を白にして隠します。

他の行はF列に「=SUM(B2:E2)」など、その行のB~F列の合計を出るようにして、同じく、文字色を白にして隠します。

数値を書き替えた後に「フィルタの実行」を行えば、全部ゼロの行は自動的に隠されます。

また、全部ゼロになって隠れている行にゼロ以外の値を入れ直したい場合は「フィルタの解除」を行います。

なお、小計の行だけ隠したい場合は「仕事A」や「仕事B」の行のF列(F2やF3)に「1」と入れておけば良いでしょう(見出し行と同じ扱いにする)
    • good
    • 0

> B4、C4、D4、E4がそれぞれ「0」のときに4行目を


> 行の高さを「0」にするマクロ

Calculateイベントで再計算が行われた直後に条件のセルの値がすべて"0"であれば、4行目を非表示にします。該当シートのコードウインドウに記述してください。

Private Sub Worksheet_Calculate()
If Range("B4").Value = 0 And _
  Range("C4").Value = 0 And _
  Range("D4").Value = 0 And _
  Range("E4").Value = 0 Then
  Rows("4:4").Hidden = True
Else
  Rows("4:4").Hidden = False
End If
End Sub

WIN2000,EXCEL2000で動作

この回答への補足

すいません説明不足でした。
小計という文字を認識し、その横にある数字を認識し、その条件がすべて「0」だった場合に処理を行いたいのです。

よろしくお願いします。

補足日時:2004/02/12 17:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!