- ベストアンサー
Excel VBAで売上データをクリアして再表示
- Excel VBAのコードを使用して、売上データをクリアして再表示する方法について教えてください。
- 特定のデータを除外した後、必要な売上データを印刷するために、Excel VBAの範囲クリアと印刷の処理を行いたいです。また、印刷後にクリアしたデータを再表示する方法も知りたいです。
- Excel VBAを使用して、売上データをクリアして印刷する際に、必要なデータと除外するデータを選択し、印刷後にクリアしたデータを再表示する方法について教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
消去する前に適当な変数に入れて、印刷後に入れておいた値を同じセルに戻すとかで良いんじゃないでしょうか。 strRng2 = Cells(x, y) myRng2.ClearContents 印刷の処理 Cells(x, y) = strRng2
その他の回答 (5)
- tsubu-yuki
- ベストアンサー率46% (179/386)
んー。 簡単に簡単に済ませようとするなら、 始めに基のシートを複製しておいて、 処理終了のタイミングで戻してやる、 という方法もありますね。 具体的には・・ ・基のシートをCopy ・印刷まで処理 ・基のシートを削除 ・Copyしたシートの名前を基のシートの名前に直す な感じでしょうか。 ただこれだとシートをまたぐ計算をさせているとエラーが出ますので、 後半は ・Copyのデータをコピー、元のデータに貼り付け ・Copyシートを削除 の方が良い可能性もありますね。
お礼
ご回答ありがとうございました。 シートをまたぐ計算式の場合にまで 配慮してくださり感謝です 勉強になりました、感謝です
- imogasi
- ベストアンサー率27% (4737/17069)
必要とする売上行と必要としない売上行はどのようにしてプログラムで判別するのか。文章にできない判別ルールがあって、人がシートを見て総合的に判断しないとならないのか。 >必要売上を・・はプログラムで指定できるのでは? そういうことが書いてないこの質問は、不完全ではないか。 全データ復活とも関係しているのではないか。 Range1やRange2は人が指定するのか。 セルに覚えておく手もあるが。 質問にデータ例も挙げず、仕組みの解説もなく、プログラムをやる人らしからぬ、おそまつな質問と思う。 もしフィルタでやれる問題なら、 フィルタ1-表示分印刷ー全データ表示ーフィルタ2ー表示分印刷 で仕舞だろう。 >Application.InputBox をなぜ、利用者にさせる必要があるのか? たまたま最近覚えて、使ってみただけではないか?
お礼
「必要とする売上行」と「必要としない売上行」は 人間の判断必要でプログラムでは指定できないので Application.InputBoxを選択いたしました。 (未熟ゆえに、もっと別の素晴らしい方法が おもいつきませんで、申し訳ございません) 回答者様からしたら 「たまたま最近覚えて、使ってみただけではないか? 」 「おそまつな質問と思う。」 とのお叱りを受けるかもしれませんが 日々勉強中でありますので。 質問分に不足している内容がございました点については 率直にお詫びいたしますが、 初心者の頓珍漢な疑問を切り捨てるかのような お言葉を回答に添えて投げかけていただくのは いささか辛く感じてしまいます。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
追記。 オートフィルタを使うと、表の見た目の大きさが変化してしまうから、表の見た目を変化させたくないので、どうしても、削除と復活でやりたい、と言う場合は、以下のようにして下さい。 1.印刷するシートを「シート丸ごと」、別シートにコピーする。 2.質問者さんのプログラムのように、除外売上で選んだ場所をClearContentsで削除する。 3.印刷する。 4.最初の「1.」でコピーしておいたシートを「シート丸ごと」、元の印刷するシートにコピーする(つまり、2で削除したデータが復活する) 5.質問者さんのプログラムのように、必要売上で選んだ場所をClearContentsで削除する。 6.印刷する。 7.最初の「1.」でコピーしておいたシートを「シート丸ごと」、元の印刷するシートにコピーする(つまり、2で削除したデータが復活する) この処理の「1.」が「復活の為の準備」で、「4.」と「7.」が「復活の処理」になります。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
>復活させる方法がわかりません。 「復活は不可能」なので、通常、こういうのは「オートフィルター」を用います。 印刷範囲外の表の外に「印刷条件」を書きます。 つまり「条件に合えばTrueに、条件に合わなければFalseになる」ように、値を書き込むのです。 そして、その列を、オートフィルタで隠したり、表示したりするのです。 添付画像のような表で、VBでオートフィルターの表示、非表示を切り替える場合、以下のようにします。 TRUEの物だけ表示する Selection.AutoFilter Field:=1, Criteria1:="TRUE" FLASEの物だけ表示する Selection.AutoFilter Field:=1, Criteria1:="FALSE" それを踏まえて、以下のように書き換えます。 Sub Macro4() Dim myRng1 As Range '必要売上 Dim myRng2 As Range '除外売上 Dim myRng3 As Range '作業用 On Error Resume Next ’オートフィルタで全件表示にする。 Selection.AutoFilter Field:=1 '2~10行目の「I列」をすべてFALSEにする。 Range("I2:I10").Value = False Set myRng2 = Application.InputBox("除外売上を選択して下さい", "セル選択", Selection.Address, Type:=8) If myRng2 Is Nothing Then Exit Sub For Each myRng3 In myRng2 '選択した範囲の「I列」のセルをTRUEにする Cells(myRng3.Row, 9).Value = True Next 'オートフィルタで「I列がTRUEの行」のみを表示する Selection.AutoFilter Field:=1, Criteria1:="TRUE" '除外分の印刷の処理。 ’オートフィルタで全件表示にする。 Selection.AutoFilter Field:=1 '2~10行目の「I列」をすべてFALSEにする。 Range("I2:I10").Value = False Set myRng1 = Application.InputBox("必要売上を選択して下さい", "セル選択", Selection.Address, Type:=8) If myRng1 Is Nothing Then Exit Sub For Each myRng3 In myRng1 '選択した範囲の「I列」のセルをTRUEにする Cells(myRng3.Row, 9).Value = True Next 'オートフィルタで「I列がTRUEの行」のみを表示する Selection.AutoFilter Field:=1, Criteria1:="TRUE" '必要分の印刷の処理。 ’オートフィルタで全件表示にする。 Selection.AutoFilter Field:=1 '念の為2~10行目の「I列」をすべてTRUEにする。 Range("I2:I10").Value = True End Sub この例では、表は「2行目から10行目の範囲」にあり、I列にオートフィルタを設定してあって、I列を「印刷範囲の外」にしてあります。お使いの表の大きさに合わせ、変更して使用して下さい。
お礼
サンプル画像まで添えて詳細な記述を教えて下さり 大変勉強になっております。 オートフィルタを使うと 私が考えているような結果が導きだせるのですね。 つたない質問文の中から 丁寧に教えてくださり 大変感謝です。 今回の件で調べている中で 普通のSUMとは別にSUBTOTALを 初めて知りました。 いろいろと組み合わせて頑張っていきたいと思います。 ありがとうございました
- dark1983
- ベストアンサー率44% (30/67)
単純に印刷しないとか表示しないであれば、色を変える方法ではどうですか? 文字色を背景と同じ色にすればいいのではないでしょうか。 背景が白の場合白、表示する場合には黒など Cells(?,?).Font.Color = RGB(255, 255, 255) Cells(?,?).Font.Color = RGB(0,0,0)
お礼
さっそくのご回答ありがとうございます 計算式などが存在しているので 今回は教えてくださった方法は 使えなかったのですが 別件で使わせていただきます 本当にありがとうございました
お礼
ご回答ありがとうございました、 教えてくださった内容でうまくいきました。 勉強になりました、感謝です