エクセルで縦方向のオートフィルタの設定方法

このQ&Aのポイント
  • エクセルで縦方向のオートフィルタはできないため、マクロを使用して列の表示・非表示を切り替える方法があります。
  • 具体的には、指定した範囲のセルに0を入力すると、該当する列を非表示にすることができます。
  • しかし、横長の表の場合、条件を指定するセルや非表示にする列が増えるため、マクロが長くなってしまうことがあります。
回答を見る
  • ベストアンサー

エクセルで縦方向のオートフィルタはできないので、

E4~Z4セルに、その列を表示させる場合は1を、させない場合は0が立つようにして If Range("E4").Value = 0 Then Columns("E:E").Select Selection.EntireColumn.Hidden = True End If If Range("F4").Value = 0 Then Columns("F:F").Select Selection.EntireColumn.Hidden = True End If とZまで繰り返したマクロにしてみたらできましたが、 例えばDD列まであるような横長の表の場合、とても長いマクロになってしまいます。 もっとすっきりとしたものにできるでしょうか。 エクセル2003使用のマクロ初心者です。 よろしくお願いします。

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.3

Sub Macro1() For i = 5 To Cells(4, Columns.Count).End(xlToLeft).Column If Cells(4, i).Value = 0 Then Columns(i).EntireColumn.Hidden = True End If Next i End Sub

graycat222
質問者

お礼

うまくいきました。 とても助かりました。本当にありがとうございます。 No.2の方の方法もうまくいきましたが、 こちらの方法は縦の項目が増えても自動的に範囲を広げてくれるので 本当に助かります。 またよろしくお願いします。

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

>縦方向のオートフィルタはできない 別のシートに行列を逆転させたシートを作成、 はどうなのでしょうか?。 あと、VBAについて参考サイト。 セル操作の参考に。 http://www.voicechatjapan.com/excelvba/VBArei3.htm http://www.asahi-net.or.jp/~ef2o-inue/menu/menu01.html >If Range("F4").Value = 0 Then >Columns("F:F").Select にある「F」や「4」は固定文字でなくて変数で同じことを表現できるので それで繰り返し部をスッキリさせます。 セルの表記、OFFSET、繰り返し処理、が参考になると思います。

graycat222
質問者

お礼

逆転シートも考えましたが、No.3のmar00さんの方法でやってみることにしました。 勉強になるサイトを教えていただきありがとうございます。 毎日少しずつ勉強して、いつの日か私が回答者になれるくらい頑張ります。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

例えば20列までを対象にするのでしたら次のようにします。 For ColPos = 5 To 20 If Cells(4, ColPos) <> "" And Cells(4, ColPos).Value = 0 Then Columns(ColPos).Select Selection.EntireColumn.Hidden = True End If Next

graycat222
質問者

お礼

うまく動きました。 ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

Sub MACRO() For Each RG In Range("E4:DD4") If RG = 0 Then RG.EntireColumn.Hidden = True ELSE RG.EntireColumn.Hidden = False End If Next RG End Sub

graycat222
質問者

お礼

うーん、うまく動きませんでしたが、 ありがとうございました。

関連するQ&A

  • エクセルシート:ボタン押下で特定列の表示←→非表示切り替え

    (行いたいこと) sheet1の中にコマンドボタン1があって、そのボタンが押されたとき既にC列からF列が非表示のときは表示してやり、また逆に表示のときは非表示にする。 (macroを作って実行したい) (現在の考えている状況) 後どうすればいいですか。今は何も動作しません。 今macro3というマクロの中に次のようなものが入っています。 Private Sub CommandButton1_Click() If Selection.EntireColumn.Hidden = True Then Columns("B:G").Select Range("G1").Activate Selection.EntireColumn.Hidden = False Else: Columns("C:F").Select Selection.EntireColumn.Hidden = True End Sub Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2006/3/24 ユーザー名 : ' Columns("C:F").Select Selection.EntireColumn.Hidden = True Columns("B:G").Select Range("G1").Activate Selection.EntireColumn.Hidden = False Range("B2").Select End Sub

  • 助けてください! EXCELのセルが表示されなくなりました

    マクロを作成しようと、簡単な記述をテストしたところ、セルが全部表示されなくなりました。 行番号も見えません。列のアルファベットは表示されていますが、選択することもできません。 どうしたら元に戻るでしょうか? テストしたマクロの記述は以下のとおりです。 If Range("P74").Value = 0 Then Columns("P:P").Select Selection.EntireRow.Hidden = True End If End Sub 非常に困っています。どうか助けてください。

  • エクセル2000でのVBAについて

    下記のVBAを書いているのですが、3つのIF文を1つに まとめたいのですが教えてください。 If Range("E16") = "申請者" Then Sheets("ログイン").Select Sheets("報告票").Select ActiveSheet.Unprotect Range("M3:U7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("E16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("D3:L7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("F16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("BS3:CA7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select end if end if end if

  • 【Excel】 マクロが止まってしまいます。

    こんにちは。 マクロを記録し、その内容をA1セルをダブルクリックで実行するようにしたいと思います。 記録したマクロを、[ツール]から実行すると、正常に再生されましたが、以下のようにダブルクリックで実行するようにすると、 「Columns("C:N").Select」のところで止まってしまいます。 どのように書くと良いのか教えてください。 -------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address <> "$A$1" Then Exit Sub Cancel = True Columns("A:U").Select Selection.Copy Sheets("一覧").Select Range("A1").Select Sheets("一覧").Select Sheets.Add ActiveSheet.Paste Columns("C:N").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.EntireColumn.Hidden = True Range("O4").Select End Sub --------------------------------------------------------

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • この場合エクセルVBAでどう書けばいいでしょうか?

    あるシートのH列で、H21からH46のあいだで"False"がある行を非表示にしたいのです。 下記の冗長なマクロでもそうなりますが、For Nextというのを使うともっと簡潔に記述できると思うのですが、初心者のためよくわかりません。ご教示ください。 また、下記の式はシートが保護されていると働きませんが、保護したシートでも動く方法があればそれもあわせて教えていただけると幸いです。 エクセルは95です。 Sub 空白行非表示() G% = Sheets("見積書").Range("H48").Value With Sheets("見積書") Rows("19:47").RowHeight = G% If Range("H21") = False Then Rows("21").EntireRow.Hidden = True End If If Range("H22") = False Then Rows("22").EntireRow.Hidden = True End If If Range("H23") = False Then Rows("23").EntireRow.Hidden = True End If If Range("H24") = False Then Rows("24").EntireRow.Hidden = True End If 途中、繰り返しのため省略 If Range("H42") = False Then Rows("42").EntireRow.Hidden = True End If If Range("H43") = False Then Rows("43").EntireRow.Hidden = True End If If Range("H44") = False Then Rows("44").EntireRow.Hidden = True End If If Range("H45") = False Then Rows("45").EntireRow.Hidden = True End If If Range("H46") = False Then Rows("46").EntireRow.Hidden = True End If End With End Sub

  • 【Excel365マクロ】時間短縮方法

    下記は「行9~170のH列が空白ならば非表示にする」というマクロです。 ---------------------- Sub 空白行非表示() Sheets("シート1").Select Application.ScreenUpdating = False For rw = 9 To 170 If Range("H" & rw) = "" Then Rows(rw).EntireRow.Hidden = True End If Next Application.ScreenUpdating = True Columns("E:E").EntireColumn.Hidden = True Range("B2").Select End Sub ---------------------- 同様のマクロを多用していますが、行数が多いファイルは開始数秒後に「応答なし」が表示され、終わるのに1分近く時間がかかることが多く困っております。 行数が10行程度のファイルは数秒~10数秒程度で終わることもありますが、同じく1分近くかかることもあります。 上記マクロ以外に数秒で終わるマクロはありませんか? フィルターの使用は無しでお願いします。

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • Excelマクロについて

    先日、OKWEBで教えてもらったマクロに手を加えて作ろうとしたのですが、エラーがでて動かなくなりました。 わかる方がいましたら教えてください。 よろしくおねがいします。 Sub 見積書() Application.ScreenUpdating = False '見積書(完成)シートを選択 Sheets("見積書(完成)").Select '行の高さを「15」にする。 Rows("6:67").Select Range("F6").Activate Selection.RowHeight = 15 'S列のS6:S56をコピーしてE6:E7に貼り付ける。 Range("S6:S56").Select Selection.Copy Range("E6:E7").Select ActiveSheet.Paste '5列目(工数)が「0」のとき該当する行の高さを「0」にする。 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 If Cells(i, 5).Value = "0" And Cells(i, 7).Value = "0" Then Rows(i).RowHeight = 0 End If Next '「E8:E55」の範囲を四捨五入する。 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Range("E8:E55") = Application.Round(Range("E8:E55"), 0) '工数を四捨五入 Next 'C列の中に含まれる「小計」を検索しそこから6列目が「0」だったら行の高さを「0」にする。 Dim Rng As Range Const Retu = "C" For Each Rng In Range(Retu & "1", Range(Retu & "100").End(xlUp)) If Trim(Rng.Value) = "小   計" And _ Rng.Offset(, 6) = 0 Then Rng.EntireRow.Hidden = True End If Next Rng End Sub

  • エクセル VBA 表示範囲の簡素化

    よろしくお願いします。 下記構文の簡素化ができないでしょうか。 CommandButtonが30個ほどあります。 ーーーーーーーーーー Private Sub CommandButton1_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("A1:D7") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub ーーーーーーーーーー Private Sub CommandButton2_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("A8:B21") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub ーーーーーーーーーー Private Sub CommandButton3_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("C8:D21") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub

専門家に質問してみよう