エクセル・見積表の抽出印刷方法

このQ&Aのポイント
  • エクセルで作成した見積表の数量を入力した行のみを印刷する方法についてお聞きした者です。商品によっては手で入力する必要があるため、事前に空白行を設けたいが、抽出時に空白行も一緒に抽出されてしまう問題が発生しています。
  • 問題となっているのは、抽出した際に空白行も表示されてしまうことです。空白行も非表示にする方法についてお知りになりたいです。
  • 提供されたVBAコード例では、空白行の非表示ができないことが問題として挙げられています。空白行も非表示にする方法についてアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

エクセル・見積表の抽出印刷方法?その3

先日(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 以上です。 宜しくお願いします。

noname#1163
noname#1163

質問者が選んだベストアンサー

  • ベストアンサー
  • kukkychan
  • ベストアンサー率12% (23/190)
回答No.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の 範囲外となってしまうおそれがあるので 気をつけましょう!

関連するQ&A

  • エクセルで作る見積表の抽出方法(ゼロ入力でも抽出したい!)

    OSはWindowsNT、Excel97です。 こんにちは。以前こちらで「見積表の抽出方法」をお聞きして素晴らしい見積表を作らせて頂きました。あの時は、数量欄に数字を入れた行のみ抽出し、さらに元に戻す事も出来るという、以下の2つの構文を教えて頂きました。 Private Sub CommandButton1_Click() ActiveSheet.Unprotect Dim i As Integer i = 2 Do Until i = -1 If Worksheets("単価表").Cells(i, 6).Value = "" Then i = -1 Else If Worksheets("単価表").Cells(i, 6).Text = 0 Or _ Worksheets("単価表").Cells(i, 6).Text = "" Then Worksheets("単価表").Rows(i).Select Selection.EntireRow.Hidden = True End If i = i + 1 End If Loop ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub Private Sub CommandButton2_Click() ActiveSheet.Unprotect Worksheets("単価表").Cells.Select Selection.Rows.Hidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub それでもう1つ質問なのですが、 この構文では、数量欄にゼロ(0)を入れると抽出出来ません。できればゼロを入れた時も抽出されるようにしたいのです。 つまり数量欄が空欄以外はすべて抽出されるようにしたいのです。 説明不足でしたら補足致しますので、宜しくお願い致します。

  • VBA Next For でのコピペについて

    EXCEL VBA初心者です。 AシートEW44からGD44までをコピーしてBというシートの最終行へコピーしたいです。 今下記のように組んでいるのですが、うまく作動しません。 Private Sub CommandButton1_Click() Dim i As Integer For i = 153 To 186 row1 = Worksheets("B").Cells(Rows.Count, 27).End(xlUp).Row Worksheets("A").Cells(i, 44).Value = Worksheets("B").Cells(row1 + 1, 27).Value Next i End Sub アドバイスいただけませんでしょうか。

  • ▼マクロ印刷設定について▲

    下記のプログラムはコマンドボタンを押すと フォームが表示され、氏名を選択すると 印刷しますかと表示されOKを押すと 印刷がかかるようになっているのですが… このプログラムを印刷設定ができるようにしたり、 印刷枚数を指定できるようなプログラムに変えるには どうしたら良いでしょうか…;; アドバイスなど宜しくお願い致します…。 '↓ここから――――――― Private Sub CommandButton1_Click() Cells(2, 17) = 名簿.Value yesno = MsgBox("印刷しますか?", vbYesNo + vbQuestion + vbDefaultButton1 + vbSystemModal, "印刷しますか?") If yesno = vbYes Then ActiveWindow.SelectedSheets.PrintOut copies:=1 End If Unload Userform1 End Sub Private Sub UserForm_lnitialize() For i = 1 To 15 'lが0から7まで(2行-2から9行-2まで) 名簿.Addltem Worksheets("データ").Cells(i + 1, 1).Value '名簿という別のシート Next End Sub Private Sub 名簿_Change() End Sub '↑ここまでです――――――

  • マクロのボタン名設定方法

    お世話になります。 マクロのボタン名を 別のファイルのセルの値に設定したいとおもい プログラムを組んでいるのですが、うまくいきません。 CommandButton1をクリックしCommandButton2へ表示 Private Sub CommandButton1_Click() Workbooks("c:\file.xls").Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet1").CommandButton2.Caption End Sub や Private Sub CommandButton1_Click() Worksheets("Sheet1").CommandButton2.Caption = _ Application.ExecuteExcel4Macro("'C:\[file.xls]Sheet1'!" & Cells(1,1 ).Address(, , xlR1C1)) End Sub などといろいろ試しているのですが、 「インデックスが有効範囲にありません」 とエラーがかえってきます。 そもそもボタン等のプロパティにセットしようとしているのがいけないのでしょうか・・・。 どなたかご教授お願いします。

  • ユーザーホームでの検索について(エクセル)

    コンボボックスで選択した文字とシートの表にある文字が一致か不一致かでMsgBoxに表示させるコードです。 一番上の行を選択しコマンド1ボタンを押すと正常に表示されるが2行目以降を選択すると一致不一致に関わらずすべて注意文が表示されます。  現在シート2,3ともとも10行目までデータがあります。今後データは下の行へと増える予定です。  コマンドボタン1のコード Private Sub cmd検索_Click() Dim i As Long For i = 4 To Sheets("sheet3").Cells(Rows.Count, 3).End(xlUp).Row If Sheets("sheet3").Cells(i, 3) = ComboBox1 Then MsgBox "商品 『 " & Sheets("sheet3").Cells(i, 3).Value & " 』 の在庫数は 『 " & Sheets("sheet3").Cells(i, 9).Value & " 』 です。" Exit Sub Else MsgBox "その商品は登録されていません。", vbExclamation Exit Sub End If Next i End Sub コンボボックスのコード Private Sub UserForm_Initialize() Dim i As Long With Worksheets("sheet2") For i = 4 To .Cells(Rows.Count, 3).End(xlUp).Row ComboBox1.AddItem .Cells(i, 3).Value Next i End With End Sub どこが間違っているのか教えていただけないでしょうか。 よろしくお願いいたします。

  • 空白のセルを行削除する。EXCELマクロなのですが・・

    VBA初心者です。 データーをHPから、単純にコピーしてきて、 EXCELに貼り付けています。 フィルターをかけても、画像かなにかがセルに張り付いているのか、 空白行をすべて削除できません。 いろいろ試して(HPから、空白セルの行削除について書かれてあるマクロを貼り付けて)動いたのが、このVBAです。 しかし、遅いので、早いVBAに簡略できればいいのですが。。 大体、1000行ぐらいの文字を貼り付けて、3/1ぐらいが空白行です。A行のセルの空白のみを、削除したいのですが。  まったくの素人なので、わかりません。 どうかよろしくお願いいたします。 Sub 空白の削除() x% = Worksheets("sheet1").Range("A65536").End(xlUp).Row For i = x% To 1 Step -1 If Worksheets("sheet1").Cells(i, 1).Value = "" Then Worksheets("sheet1").Rows(i).Delete Next End Sub

  • 全く作動しないです。(転記しないです。)

    Private Sub CommandButton1_Click() If CheckBox1 = xlOn Then Worksheets("sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1) .Value = "新規" ElseIf CheckBox1 = xlOff Then Worksheets("sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1) .Value = "リピート" End If End Sub 上記のようなコードですが、まったく作動しないです。 どこが間違っているのでしょうか。

  • VBA コマンドボタン 頭に0がでない

    各ボタンに以下を入れる Private Sub CommandButton1_Click() Selection.Value = Selection.Value & "1" End Sub Private Sub CommandButton2_Click() Selection.Value = Selection.Value & "2" End Sub . . Private Sub CommandButton10_Click() Selection.Value = Selection.Value & "0" End Sub Private Sub CommandButton11_Click() Selection.Value = Selection.Value & "." End Sub 0.1と入力しても0.1が表示できなく、1となってしまいます。 また.1と入力しても0.1でなく、1になってしまいます。 どうすれば良いでしょうか?

  • EXCELでの変数によるMacro自動実行について

    すいませんが教えてください・・・・・・ EXCELシートにツールボックスより、コマンドボタンを2つ配置しました。 (AUTOMATICはPublic変数で標準モジュールで定義しています Dim AUTOMATIC As Boolean ) ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() AUTOMATIC = True End Sub CommandButton_2 : Private Sub CommandButton2_Click() AUTOMATIC = False End Sub ------------------------------------------------------------------ あとはEXCELを起動中に、AUTOMATICが Trueでセル(例えばA2のセル)の 値が100のときには Macroを起動したいのですが、どこにどう記述したら いいか教えて欲しいのです。 ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() if Cells(2,1) = 100 then 'A2はCells(2,1) Macro実行 end if End Sub とAUTOMATICを使用せずに記述しても、毎回CommandButton_1をクリックしな ければMacroが起動することができないので煮詰まってしまいました。 (一度CommandButton_1をクリックしておくとあとはA2セルを監視するだけ でMacroを起動させたい) すいませんがわかる方、教えていただけないでしょうか よろしくお願いします。

  • サブルーチンの使い方

    こんにちは 以前 このサイトでサブルーチンを教えて頂いたのですが 今回は、このサブルーチンを使って Commandbuttonに Sheets("20年7月度").Cells(2, 6).Value = Cells(2, 6) & Mojiを 入れたいのですが、どのようにすれば いいですか? 宜しくお願い致します。 Private Sub mySub(Moji) '数字 If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & Moji Else: TextBox1.Value = TextBox1 & Moji End If End Sub Private Sub CommandButton1_Click() 'サブルーチン Call mySub("1") End Sub Private Sub CommandButton2_Click() Call mySub("2") End Sub Private Sub CommandButton3_Click() Call mySub("3") End Sub Private Sub CommandButton4_Click() Call mySub("4") End Sub Private Sub CommandButton5_Click() Call mySub("5") End Sub Private Sub CommandButton6_Click() Call mySub("6") End Sub Private Sub CommandButton7_Click() Call mySub("7") End Sub Private Sub CommandButton8_Click() Call mySub("8") End Sub Private Sub CommandButton9_Click() Call mySub("9") End Sub Private Sub CommandButton10_Click() Call mySub("0") End Sub Private Sub CommandButton11_Click() Call mySub("00") End Sub Private Sub CommandButton12_Click() Call mySub("000") End Sub

専門家に質問してみよう