プロが教える店舗&オフィスのセキュリティ対策術

先日(No.130709とNo.130958)、エクセルで作成した見積表の数量を入力した行のみを印刷したいとお聞きした者です。その際は、多くの方に回答を頂き、誠にありがとうございました。おかげさまで完成間近ですが、もう1つ問題が出てきてしまいました。宜しくお願いします。
商品によっては、行を追加し手で入力しなくてはならないものがあるので、あらかじめ空白行(金額列には0が入っています)を設けておきたいのですが、そうすると抽出した際、空白行も一緒に抽出されてしまいます。空白行がある場合は、下記の構文のやり方では無理なのでしょうか?空白行も非表示にしたいのです。

Private Sub CommandButton1_Click()
Dim i As Integer
i=2
Do Until i=-1
If Worksheets("Sheet1").Cells(i,1).Value=""Then
i=-1
Else
If Worksheets("Sheet1").Cells(i,6).Text=0Or_
Worksheets("Sheet1").Cells(i,6).Text=""Then
Worksheets("Sheet1").Rows(i).Select
Selection.EntireRow.Hidden=True
End If
i=i+1
End If
Loop
End Sub

Private Sub CommandButton2_Click()
Worksheets("Sheet1").Cells.Select
Selection.Rows.Hidden=False
End Sub

以上です。
宜しくお願いします。

A 回答 (1件)

こんにちわ!


なぜそのような動きをするかというと
一番上の行から順番に1行づつチェック
をして、項目欄が空白になった時点で
処理を終了するロジックになっているからです。
もしあらかじめ空白行を使用するのであれば
ロジックの上から5行目
If Worksheets("Sheet1").Cells(i,1).Value=""Then

If Worksheets("Sheet1").Cells(i,6).Value=""Then
に変更すれば大丈夫だと思います。
(6列目が金額欄なんですよね?)

または、
行を追加するボタンを作成してはどうでしょうか?
行削除もついでに作っておくと便利かもしれません。
ボタンの作成の仕方は前回と同じです。

1.ツールバーの
 三角定規と定規と鉛筆のボタンを押して
 編集モードにして下さい。

2.「行追加」「行削除」
 をそれぞれボタン追加してください。
 (前回追加したボタンの横がいいと思います。)

3.「行追加」ボタンをダブルクリックして
 下さい。
 そうすると下記の記述が出ると思います。
 Private Sub CommandButton3_Click()
 End Sub

 その間に下記を追加します。
 Private Sub CommandButton3_Click()
Dim i As Integer

Selection.EntireRow.Insert
i = ActiveCell.Row
Cells((i - 1), 6).Copy Destination:=Cells(i, 6)
 End Sub

 上記の処理の意味はアクティブ行
 に行を挿入し、6列目を金額と仮定
 して、1行前の列の金額欄をコピー
 し、挿入した行の金額欄に貼り付ける
 事によって、合計算出計算のみコピー
 している。


3.「行削除」ボタンをダブルクリックして
 下さい。
 そうすると下記の記述が出ると思います。
 Private Sub CommandButton4_Click()
 End Sub

 その間に下記を追加します。
 Private Sub CommandButton4_Click()
Selection.EntireRow.Delete
 End Sub

 上記の処理はアクティブ行
 削除している。

以上で行追加、行削除ボタン完成です。
ただし、合計の直前と見出し行の直下に
行を追加すると、合計の金額のSUMの
範囲外となってしまうおそれがあるので
気をつけましょう!
    • good
    • 0

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