• ベストアンサー

Excel 値以上を行ごと非表示

初心者の為中々組めず困っています。 画像のような表のA列の特定条件の際は非表示にする方法を模索中です。 条件(以上/以下)で行ごと非表示に出来るようにする方法又は… 万年カレンダーにしている為、1日と月末の位置が変わるのでそれに合わせて 前月の日付と翌月の不要な日付が入った時は非表示になるようなVBAはないでしょうか。 A3からA39に日付、B列に曜日が固定で入力。 ※他ブックに転記する為に縦の曜日固定カレンダーにしています。 If monthもうまく行かず頭打ちの状態です。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 失礼しました。 >A3からA39に日付、B列に曜日が固定で入力。 >※他ブックに転記する為に縦の曜日固定カレンダーにしています。 という条件を見落としておりました。  曜日が固定という事であれば、曜日のセルの文字色は固定で済ます事が出来ますから、条件付き書式を使わなくとも、通常のセルの書式設定だけで文字色の設定は出来ますし、 >前月の日付と翌月の不要な日付が入った時は非表示になる という件は関数だけで実現出来ますから、VBAも条件付き書式も使わずに済ます事が出来ます。  それで確認したいのですが、 >A3からA39に日付、B列に曜日が固定で入力。 となっていて、尚且つ、質問者様が添付されている画像ではB4セルに「月」(曜日)が入力されているという事は、B列に固定で入力されている曜日とは、B3セルに入力されていると思われる「日」(曜日)から始まっていると考えれば宜しいのでしょうか?  それと、特定の年の特定の月のカレンダーを表示させるためには、何年の年の何月の月のカレンダーであるのかを指定しておかねばなりませんが、その指定方法はどうなっているのかという事が御質問文には説明が御座いません。  特定のセルに西暦年と月を入力する事で指定するのでしょうか? それともワークシート関数のTODAY()関数やVBAのDate関数を使って現在の月を指定するのでしょうか?  そう言った事が不明ですので、取りあえず仮の話として、曜日は日曜日から始まっていて、A1セルに西暦年を、B1セルに月を入力する事で、何年何月のカレンダーを表示させるのかを指定するものとした場合に関して回答させて頂きます。  まず、A3セルに次の関数を入力して下さい。 =IFERROR(DAY($A$1&"/"&$B$1&"/"&ROWS(A$3:A3)-WEEKDAY($A$1&"/"&$B$1&"/1")+1),"")  次に、B3セルに次の関数を入力して下さい。 =IF(ISERROR(DAY($A$1&"/"&$B$1&"/"&$A3)),"",TEXT($A$1&"/"&$B$1&"/"&$A3,"aaa"))  次に、A3~B3セルの書式設定の表示形式を[標準]に設定して下さい。  次に、A3~B3のセル範囲をコピーして、A4~B39のセル範囲に貼り付けて下さい。  次に、B3セルから7行ごとの曜日のセルの文字色を赤色に設定して下さい。  次に、B9セルから7行ごとの曜日のセルの文字色を青色に設定して下さい。  以上です。  尚、セルに何年何月を入力するのではなく、ワークシート関数のTODAY()関数を使って年月を指定する場合には、A3セルに入力する関数を =IFERROR(DAY(TEXT(TODAY(),"yyyy/m/")&ROWS(A$3:A3)-WEEKDAY(TEXT(TODAY(),"yyyy/m"))+1),"") に、B3セルに入力する関数を =IF(ISERROR((TEXT(TODAY(),"yyyy/m/")&$A3)+0),"",TEXT(TEXT(TODAY(),"yyyy/m/")&$A3,"aaa")) に、それぞれ変更して下さい。

mimiko143
質問者

お礼

言葉足らずな説明にも関わらず親切に回答頂きありがとうございました。 ですが当方、新しい画像をつけて説明する方法が分かりかねる為、一度質問を締め切らせて頂いて再投稿しようとおもいます。 折角お時間割いていただいたのに申訳ありません。 今回の回答は今後のマクロ作成に活かさせていただきます。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>組めず困って エクセルVBAによってプログラムを組む事? >表のA列の特定条件の際は非表示にする方法を模索中です 「模索」って何。WEBで調べているとか、知らないだけでは。 ーー A列に日付、B列に曜日がある例で Sub test01() Range("A2:A51").NumberFormat = "yyyy/mm/dd" Range("B2:B51").NumberFormat = "aaa" For Each cl In Range("A1:A51") cl.Offset(0, 2) = Weekday(cl) If Weekday(cl) = 1 Then cl.EntireRow.Hidden = True End If Next End Sub ーー 考えたデータ例 A1:B51程度に(51に意味なし) 連日の日付をA列に入れておいて 下記コードを実行して、日曜日を非表示にした例。 年月日 曜日 曜日コード 2016/02/12 金 6 2016/02/13 土 7 2016/02/15 月 2 2016/02/16 火 3 2016/02/17 水 4 2016/02/18 木 5 2016/02/19 金 6 2016/02/20 土 7 2016/02/22 月 2 2016/02/23 火 3 2016/02/24 水 4 2016/02/25 木 5 2016/02/26 金 6 >非表示に出来るようにする方法又は… の「...」は何のこと? >万年カレンダーにしている為、1日と月末の位置が変わるのでそれに合わせて 前月の日付と翌月の不要な日付が入った時は非表示になるようなVBAはないでしょうか。  あるなしではなく、組めるかどうかでしょう。 解決法があるなしの課題もあるが、普通はコードを組み合わせて、自分で組めるかどうかでしょう。 ーー 2月以外を非表示にする例 Sub test02() Range("A2:A51").NumberFormat = "yyyy/mm/dd" Range("B2:B51").NumberFormat = "aaa" For Each cl In Range("A2:A60") If Month(cl) <> 2 Then cl.EntireRow.Hidden = True End If Next End Sub のようなのはどうですか。 ーー エクセルでは「条件付き書式」というのがある。 VBAでこれを使うと、上記のような繰り返しのコードを記述しなくても済むのではないかと思った。しかし書式の変更はできるが、(条件該当)行の非表示はないのではないかと思います。そこで オートフィルタでフィルタして行を選(別)択し、その分だけ非表示にして、対応でできそうです。 http://okwave.jp/qa/q7431104.htmlのベストアンサー参照。 ーー 質問の文章に、「文章でしたいこと」を説明してほしい。このコーナーの写真はぼやけて見にくいこと、写真を1枚挙げただけでは、変化の前後がつかみにくいので、言語で表現してほしい。 >条件(以上/以下)で行ごと非表示に出来 と>万年カレンダーにしている為、 の関連はなに?両方知りたいだけか?

mimiko143
質問者

お礼

言葉足らずな説明にも関わらず、回答回答ありがとうございます。 大きなヒントを頂きました。 ですが当方画像等を付け加える方法が分かりかねる為、一度締め切らせていただいて再投稿しようと思います。 貴重なお時間割いて頂いたのに申訳ありません。 ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 VBAを使うまでもありません。関数とセルの書式設定で対応できます。  まず、A1セルとA2セルの書式設定の表示形式を[ユーザー定義]の d に設定して下さい。  次に、B1セルの書式設定の表示形式を[ユーザー定義]の aaa に設定して下さい。  次に、B1セルに「数式を使用して、書式設定するセルを決定」する条件付き書式を2つ設定して、 =WEEKDAY(B1)=1 という数式の条件を満たせば文字色が赤、 =WEEKDAY(B1)=7 という数式の条件を満たせば文字色が青となる様にして下さい。  次に、A2セルに次の様な関数を入力して下さい。 =IF(ISNUMBER((TEXT($A$1,"yyyy/m/")&ROWS(B$1:B1))+0),(TEXT($A$1,"yyyy/m/")&ROWS(B$1:B1))+0,"")  次に、B1セルに次の様な関数を入力して下さい。 =IF(ISNUMBER((TEXT($A$1,"yyyy/m/")&ROWS(B$1:B1))+0),$A1,"")  次に、B1セルをコピーして、B2セルに貼り付けて下さい。  次に、A2~B2のセル範囲をコピーして、A列~B列の3行目以下に貼り付けて下さい。  以上で準備は完了で、後はA1セルにその月の最初の日付を入力すれば、月始めから月末までの日付のみが自動的に表示されます。

関連するQ&A

専門家に質問してみよう