Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
条件による行の非表示について
投稿日時: 19/07/11 16:03:05
投稿者: HAL22

B列が空白の場合は、その行を非表示にしたいのですが
宜しくお願い致します。
※B列は結合しています。
 
例として
セル番地B6(6/7行目) セル番地B8(8/9行目)を非表示に
したいと考えています。
  
   
   
     B列
----------------------
4行目
5行目 2019年8月1日 →セル番地B4
 ----------------------
6行目
7行目        →セル番地B6
 ----------------------
8行目
9行目        →セル番地B8
----------------------  
 
また、現在この様に作成していますので
印刷時に行を非表示設定を行いたいと思います。
 
 
Sub 印刷()
 
Dim Result As Long
 Result = MsgBox("印刷しますか?", vbYesNo + vbExclamation, "印刷確認")
     
    If Result = vbYes Then
 
  
 
 ''[はい]がクリックされたときの処理
    Sheets("表-1").PrintOut
 
 
 
  Else
        ''[いいえ]がクリックされたときの処理
         
 'MsgBox "処理を中止します", vbCritical
  Result = MsgBox("処理を中止しました。", vbOKOnly + vbCritical, "印刷確認")
    End If
   
End Sub
 
 
宜しく、お願い致します。

回答
投稿日時: 19/07/11 16:44:49
投稿者: Suzu

Excel表の行の非表示について
https://www.moug.net/faq/viewtopic.php?t=78434
 
閉じたんだから納得されたのではないのでしょうか?
 
オートフィルターの部分を、マクロの記録をしてみてはいかがですか?
 
あるいは、こうやりたい けど、ここの部分 の考え方やコードが判りません
 
ってのなら積極的に、アドバイスしようと思いますが
 
 
このご質問の仕方は、コード作成依頼にしか見えません。
 
 
複数行にわたってセルの結合を行った場合、
今回の様に、B4 値なし、B5値あり のだと、B4に値が引き継がれ、B5には値なし になります。
     → 連結解除をしてみれば判ります。

投稿日時: 19/07/11 17:27:32
投稿者: HAL22

本当に、噂通りサイトは正確の悪い集団です。
 
 
 
>閉じたんだから納得されたのではないのでしょうか?
→ダメがから再度でしょ。
  
>オートフィルターの部分を、マクロの記録をしてみてはいかがですか?
→オートフィルター 使えなかったのですから、無意味です。

回答
投稿日時: 19/07/11 18:16:20
投稿者: sk

引用:
B列が空白の場合は、その行を非表示にしたい

引用:
※B列は結合しています。

Dim ws As Excel.Worksheet
Dim rngColumn As Excel.Range
Dim rngCell As Excel.Range
Dim lngFirstRow As Long
Dim lngLastRow As Long
 
Set ws = ActiveSheet
 
lngFirstRow = 1
With ws.UsedRange
    lngLastRow = .Cells(.Rows.Count, .Columns.Count).Row
End With
 
Set rngColumn = ws.Range(ws.Cells(lngFirstRow , 2), _
                         ws.Cells(lngLastRow, 2))
 
rngColumn.EntireRow.Hidden = False
 
For Each rngCell In rngColumn
    With rngCell
        If .Address = .MergeArea.Cells(1, 1).Address Then
            If .Value = "" Then
                .MergeArea.EntireRow.Hidden = True
            End If
        End If
    End With
Next
 
Set rngColumn = Nothing
Set ws = Nothing
 
---------------------------------------------------------------
 
先頭行/最終行の指定は適当にどうぞ。
 
引用:
印刷時に行を非表示設定を行いたいと思います。

印刷が完了したら非表示化された行を再表示するように
なさればよろしいでしょう。

投稿日時: 19/07/11 18:41:07
投稿者: HAL22

sk さん
 
ありがとうございます。
レベルが高くて、理解出来ません。
 
質問です。
 
>先頭行/最終行の指定は適当にどうぞ。
→先頭行/最終行の指定はどれですか?
 
 
>印刷が完了したら非表示化された行を再表示するように
>なさればよろしいでしょう。
→はい、問題ありません。
 
 
今、私が使用している
コードとどの様に組合わせて(どこへ記載)使用したらいいのでしょうか?
Sub 印刷()
   
Dim Result As Long
  Result = MsgBox("印刷しますか?", vbYesNo + vbExclamation, "印刷確認")
       
     If Result = vbYes Then
   :
   :
 
申し訳別けありませんが、宜しくお願い致します。

回答
投稿日時: 19/07/11 23:32:58
投稿者: simple

前のスレッドのダミー列の数式は、開始行が偶数ならそれでよいし、
もし奇数なら、
=(INDEX(B:B,ROW()-MOD(ROW()+1,2))<>"")*1
とすればきちんと機能するはずです。
不明点を放置せず、再質問したほうが良かったと思います。
 
そう言うまっとうな指摘に対して、
> 本当に、噂通りサイトは正確の悪い集団です。
という言葉を使うのなら、残念ながら自ら退出されたほうがよいのではないですか?
その後の言葉からしても、とても人にものを尋ねる態度とは思えません。

回答
投稿日時: 19/07/12 09:36:32
投稿者: sk

HAL22 さんの引用:
先頭行/最終行の指定はどれですか?

引用:
lngFirstRow = 1
With ws.UsedRange
    lngLastRow = .Cells(.Rows.Count, .Columns.Count).Row
End With

HAL22 さんの引用:
今、私が使用している
コードとどの様に組合わせて(どこへ記載)使用したらいいのでしょうか?

HAL22 さんの引用:
''[はい]がクリックされたときの処理
Sheets("表-1").PrintOut

あとは以下の箇所をそれぞれ修正なさればよいでしょう。
 
引用:
Set ws = ActiveSheet

Set ws = Worksheets("表-1")
 
HAL22 さんの引用:
Sheets("表-1").PrintOut

引用:
Set rngColumn = Nothing
Set ws = Nothing

ws.PrintOut
 
rngColumn.EntireRow.Hidden = False
 
Set rngColumn = Nothing
Set ws = Nothing

回答
投稿日時: 19/07/12 12:56:02
投稿者: どら

誤)正確の悪い集団です。
 
正)性格の悪い集団です。

回答
投稿日時: 19/07/13 10:58:47
投稿者: mattuwan44

>性格の悪い集団です。
 
別に集団ではないのですが^^;
それぞれ回答側は、
面白い情報がないか見に来たついでに、
困っている人がいれば、知っていることを書いてあげてるだけかと思います。
まぁ、言葉尻をとらえて、
性格が悪い
意地が悪い
かき乱している
とか、、、、
まぁ、そういう一面もあるかも知れませんが、
何もコメントが貰えないよりは全然ましかとおもうのですが。。。
(とりあえず気にしてもらえてるのは解るでしょ?)
まぁ、こちらは、もうそういう言葉にも慣れているので、なんとも思わないのですが。。
質問しても、2日経っても3日経っても回答がつかない方が悲しいです><
 
文字だけでやり取りするのは、ニュアンスが伝わらないので難しいです。
そんなこんなも含めて、いちいち腹を立てずに、慣れていかなければ、
ネット上でコミュニケーションは難しいかなと思います。
回答に悪意がないのは、他の質問の回答を見れば解るはずです。
 
で、本題。
 
やりたいことは、
0)特定のシートを印刷するとき、
1)シート上の表のうち、
2)シートのB列のセルの(結合セル有)値が空白の場合、
3)非表示にして印刷
4)印刷後は、元に戻す
 
ですか?
 
問題に取り組む前に、前提条件の対象のセル範囲を明確にする必要があります。
B列の4行目から、9行目の説明はありますが、A列やC列または、1〜3行目はどういう状況ですか?
それから、
表の範囲はどこからどこまでで、
その中に元々の空白行などはありませんか?
 
回答側にはそちらのパソコンが見えないので、
お手数ですが、詳しく説明していただけませんか?
色々考えてみても、こちらの想定外の状況が後からボロボロ出てくる可能性があるなら、
こちらの考える時間が無駄になりますから。
よろしくお願いします。

投稿日時: 19/07/14 13:16:30
投稿者: HAL22

mattuwan44 さま
 
下記の様に、回答致しますので、こちらこそ宜しくお願い致します。
 
 
〉0)特定のシートを印刷するとき、
〉1)シート上の表のうち、
〉2)シートのB列のセルの(結合セル有)値が空白の場合、
〉3)非表示にして印刷
〉4)印刷後は、元に戻す
〉ですか?
はい、その通りです。
これプラス、Excelにも出力も行う事も検討しています。
 
 
・シート名:表-1
・セル範囲について
B列には
=IFERROR((I$7&"/"&I$8&"/"&ROW(A1))*1,"")
で、日付を表示しています。
(セル:I7 に年  H7に月をしていしています。)
 
カレンダー表です。
例で言えば、2019年2月28日迄ですので、29日、30日、31日 3行を非表示に行う
 
 
B17〜B77 (結合セル有)
→値が空白の可能性のあるセルはB73、B75、B77だけです。
表自体はB17〜X77  (タイトル行を入れるとB13〜です。)
A列は使用していません。
C列は他のシートを参照して、文字を参照していますが
B列が空白の場合は、C列も空白となります。
 
 
これで、情報たりますか?
 
宜しくお願い致します。

回答
投稿日時: 19/07/16 08:01:36
投稿者: mattuwan44

すみません。
口出しておいて、その後なかなかぱそこんの前に座れてません。
情報はほぼ足りてますが、
詳しくコメントできません。
 
気にはなってちょいちょい見てますし、
質問者さんがいじいじしている気持も重々承知してますが、
合間にコメント出来るようなことではないので、
夜にでも、こちらの時間が取れたらにさせてください。

投稿日時: 19/07/16 11:37:27
投稿者: HAL22

mattuwan44 さま
お気遣い、ありがとうございます。
 
>合間にコメント出来るようなことではないので、
>夜にでも、こちらの時間が取れたらにさせてください。
→宜しくお願い致します。

トピックに返信