下記のような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」にするマクロを組みたいです。
わかる方がいましたらよろしくお願いします。
No.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
No.5
- 回答日時:
既回答と同じことをしていますが、いろいろやり方があり、コードの印象は変ると言うことの実例。
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列の「小計」の小と計の間のスペース数は統一して、上記
コードの「小計」部一個所を合わせてください。
No.4
- 回答日時:
行削除と非表示の両方の場合を書いておきます。
こんな感じで如何でしょうか。
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にある場合はどうなるのでしょうか自分でやって見たのですがエラーが出てしまいうまくいきませんでした。
No.3
- 回答日時:
> 小計という文字を認識し、その横にある数字を認識し、その条件がすべて「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動作
No.2
- 回答日時:
空いている列、例えばF列にオートフィルタを設定し、フィルタの内容を「0以外」にしておきます。
見出し行など消したくない行はF列(F1など)に「1」と入力しておき、文字色を白にして隠します。
他の行はF列に「=SUM(B2:E2)」など、その行のB~F列の合計を出るようにして、同じく、文字色を白にして隠します。
数値を書き替えた後に「フィルタの実行」を行えば、全部ゼロの行は自動的に隠されます。
また、全部ゼロになって隠れている行にゼロ以外の値を入れ直したい場合は「フィルタの解除」を行います。
なお、小計の行だけ隠したい場合は「仕事A」や「仕事B」の行のF列(F2やF3)に「1」と入れておけば良いでしょう(見出し行と同じ扱いにする)
No.1
- 回答日時:
> 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」だった場合に処理を行いたいのです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ビジネス・キャリア) 仕事のレベル感 4 2022/07/23 21:41
- 分譲マンション 分譲マンションの管理組合で明らかに管理組合の会計ミスについて 10 2023/05/21 01:34
- 事務・総務 Excelの表計算についてお聞きしたいことがあります。 7 2022/04/30 16:32
- ハッキング・フィッシング詐欺 社用メールから個人メールへ資料送信してしまいました... 4 2023/03/19 13:24
- その他(ビジネス・キャリア) 部下への説明 例えば本社があり、営業所は3箇所あるとします。 本社は各仕入先から物を買ってます。 本 1 2022/06/15 07:06
- 派遣社員・契約社員 契約社員か派遣、どちらの会社の条件が客観的にみて良いと思いますか? 9 2022/12/22 11:48
- 財務・会計・経理 過年度の課税漏れ給与に対する対応方法 2 2022/05/17 10:14
- 労働相談 支給されないみなし残業手当について 4 2022/07/01 14:18
- 会社・職場 パワーポイントが無い会社って結構あるんですか? 厳密に言えばパワーポイントを使わせてくれない会社です 3 2022/07/28 22:48
- 会社・職場 パート先で、仕事中に仕事しないで、フラフラしているとよく言われます。フラフラしているのではなく、備品 3 2023/02/08 00:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
非表示列の再表示に失敗
-
VBAで文字列を数値に変換したい
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル 文字数 多い順 並...
-
エクセルで文字が混じった数字...
-
エクセルの表から正の数、負の...
-
エクセル(勝手に太字になる)
-
エクセルの並び変えで、空白セ...
-
エクセルで、列の空欄に隣の列...
-
オートフィルターをかけ、#N/A...
-
エクセル 同じ値を探して隣の...
-
Excelで半角の文字を含むセルを...
-
「B列が日曜の場合」C列に/...
-
基準となる列を参照して、別の...
-
エクセルのセル内の文字の一部...
-
Excel、市から登録している住所...
-
【VBA】特定列に文字が入ってい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
2つのエクセルのデータを同じよ...
-
エクセルで最初のスペースまで...
-
エクセルVBA、別ブックへ転記す...
-
エクセル 文字数 多い順 並...
-
エクセル(勝手に太字になる)
-
VBAで文字列を数値に変換したい
-
エクセルで文字が混じった数字...
-
エクセルの表から正の数、負の...
-
「B列が日曜の場合」C列に/...
-
Excelで半角の文字を含むセルを...
-
エクセルの並び変えで、空白セ...
-
Excel、市から登録している住所...
-
エクセル 同じ値を探して隣の...
-
EXCELで 一桁の数値を二桁に
-
エクセル初心者です 関数の入れ...
-
A列がない・・・A列が非表示に...
-
オートフィルターをかけ、#N/A...
-
エクセルで、列の空欄に隣の列...
おすすめ情報