• ベストアンサー

列の表示非表示をするマクロ

C列とE列が非表示ならば再表示 表示されていれば非表示になるマクロを設定したいです。 このマクロを正しくするにはどうすればいいですか? Sub 再表示また非表示() If Columns("C:C,E:E").Hidden = True Then Columns("C:C,E:E").Hidden = False Else: Columns("C:C,E:E").Hidden = False Columns("C:C,E:E").Hidden = True End If End Sub

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.4

>どうやって調べたらいいでしょうか。 弱った。昔のBASIC からある機能なので、当たり前に使っていました。 サイトで調べたわけではないし、多分ないと思います。 Not True ☞ Fales Not False ☞ True になるので、True Falseで指定する所で、反対の動作をしたいなら使えます。 イミディエイトで、 ? [C:C].EntireColumn.Hidden と入力してみて、True Falseのどちらかが出てくれば使えます。 例えば   ThisWorkbook.Close Not ThisWorkbook.Saved 保存していなければ保存終了、保存してあれば保存せず終了。 Saved は保存してなければFalse になります。 ActiveWorkbook.CloseはTrueを指定すれば保存終了。

terabayahi1988
質問者

お礼

ありがとうございます。奥が深くて難しいです。イミディエイトで色々調べてみます。

その他の回答 (3)

  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.3

C列が非表示かどうかで判断します。 (C列が非表示でE列が表示☞表示)   [C:C,E:E].EntireColumn.Hidden = Not [C:C].EntireColumn.Hidden

terabayahi1988
質問者

補足

ありがとうございます。無事動作しました。大かっこも初耳でした。これはNotを左辺に代入しているところまでわかりました。 他にもNotの方法で活用できないかと思い、調べたいのですがうまく調べられません。どうやって調べたらいいでしょうか。

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.2

Columnsは離れた列の指定はできないのでエラーになります。 連続していれば大丈夫です。 Columns("C:E").Hidden = True .Hiddenに限らず離れた列を指定する場合はRangeで.EntireColumnを使ってください(.EntireColumnをつけなくてもいい場合もあります) RangeでEntireColumnは離れてなくても使えます。 そういう仕様だと思ってください。

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.1

以下で試してみてください。 If Range("C:C,E:E").EntireColumn.Hidden = True Then Range("C:C,E:E").EntireColumn.Hidden = False Else Range("C:C,E:E").EntireColumn.Hidden = True End If

terabayahi1988
質問者

補足

無事動作しました。ありがとうございます。 まだ少し教えていただきたいことがあります。 ifに変更したためかと思っていたのですが、 複数行にしたところでエラーが出ていたようです。 『実行時エラー"13" 型が一致しません。』 これはどうしてでしょうか。 .Hiddenで複数行を選ぶときはEntireColumnを使わないと作動しない理屈がよくわからないです。そういうものとして覚えるものなんですか?

関連する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

  • 非表示の列があるか取得したい。

    Sub Macro1() Columns("a").Hidden = True End Sub としたら、A列が非表示になりますよね。 そして、セル全体に非表示の列があるかどうかを取得したい場合はどうすればいいでしょう? Sub Macro2() If Cells.Hidden = True Then MsgBox "非表示の列があります" End If End Sub をすると、実行時エラー1004になります。 それに Cells.Hiddenの時点で、列だけじゃなくなってしまいます。 あと、最終列はファイルによってまちまちです。 Z列の時もあれば、EAの時もあります。 ご回答よろしくお願いします。

  • 印刷したくない列を非表示にするマクロなのですが、

    印刷したくない列を非表示にするマクロなのですが、 印刷後、あらためて列を再表示する必要があり大変手間です。 印刷後も自動で再表示する方法をご教示いただきたく存じます。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Columns("A:C").Select Selection.EntireColumn.Hidden = True End Sub

  • 表のなかに空白セルがある場合列を日表示にする

    お世話になります。 D5からBK200くらいの表があり、 コマンドボタンにより 空白の列を非表示にしたいと思っています。 いろいろ調べて書いてみたのですが、うまくいきません。 どなたか教えていただけないでしょうか。 よろしくお願いします。 Sub 空白列表示しない() Dim I As Long For I = 5 To 200 If Cells(5, I).Value = "" Then Columns(I).Hidden = True Else End If Next End Sub

  • 前月の列以前を非表示にするマクロ

    Sub 前月非表示ボタン() Dim FoundCel As Range Set FoundCel = Range("1:1").Find(What:=Format(Date, "yyyy年m月"), LookIn:=xlValues) If FoundCel Is Nothing Then MsgBox "見つかりません" Else FoundCel.Offset(ColumnOffset:=-1).EntireColumn.Hidden = True End If End Sub 上記マクロでは、前月(I列)を非表示にできますが、前月以前であるD列からI列までを非表示にする方法はありますか?

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

    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使用のマクロ初心者です。 よろしくお願いします。

  • 下記のマクロは

    E列の5行目から2000行までの間で 鉄、銅、銀、空白以外の文字が入っていたら 『鉱1_Click』という別のマクロを行うというマクロなのですが、 『銀』に限ってはE列5行目~2000行の間に1つだけあっても 『鉱1_Click』を走らせるようにしたいのですが、 どのように改造すればできると思いますか? Private Sub 鉱_Click() Dim ColumnA Dim flg As Boolean flg = False ColumnA = Columns("E:E") For i = 5 To 2000 If ColumnA(i, 1) = "鉄" Or ColumnA(i, 1) = "銅" Or ColumnA(i, 1) = "銀" Or ColumnA(i, 1) = "" Then Else flg = True Exit For End If Next If flg Then 鉱1_Click Else End If End Sub

  • 二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする

    二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする windows7 excelでマクロ作成中の初心者です。 以下のコードで27行目のセルの値が0のとき列を非表示にします。 Private Sub 列非表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = True End If Next 列番号 ActiveSheet.Protect End Sub ------------------------------------------------- Private Sub 列表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = False End If Next 列番号 ActiveSheet.Protect End Sub この27行と、もう一行の28行、どちらかの行が、0のときに列を非表示・表示したいのですが、出来ません。 試行錯誤してもできないのです。どうかよろしくおねがいします。 For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 or Cells(28, 列番号).Value = 0 Then or( Cells(27, 列番号).EntireColumn.Hidden = True, Cells(27, 列番号).EntireColumn.Hidden = True) End If

  • 【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分近くかかることもあります。 上記マクロ以外に数秒で終わるマクロはありませんか? フィルターの使用は無しでお願いします。

  • エクセル2003 列の表示、非表示 マクロ

    エクセル2003です。 マクロについては初心者以下です。 ワークシートでダブルクリックしたときC列を表示、非表示にするマクロをインターネットで検索してちょっとやって見たのですが、C列だけでなくE、J、M列も表示非表示を同時に行いたい場合は どうすればよいでしょうか? 自動記録も使って見たのですが全部の列が非表示になってしまいだめでした。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Columns("C") .Hidden = Not .Hidden End With End Sub あと、ダブルクリックをセル以外の場所で行ったときに実行するようにできたりするのでしょうか? 今の状態だとデータのあるセルを間違えて変更したり、ダブルクリック後セルを移動しないと再び実行できないので・・ 他によい方法等ありましたら教えて頂きたいです。

専門家に質問してみよう