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

このQ&Aのポイント
  • 非表示の列があるか取得したい場合は、VBAのCells.Hiddenプロパティを使用します。
  • 実行時エラー1004が発生する原因は、Cells.Hiddenプロパティが単独のセルではなく、セル範囲を扱う必要があるためです。
  • 最終列はファイルによって異なるため、適切な範囲指定が必要です。
回答を見る
  • ベストアンサー

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

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の時もあります。 ご回答よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>セル全体に非表示の列があるか >最終列はファイルによってまちまちです。 全セルなのか、最終列までの範囲でいいのか、どっちなんでしょう? ま、どっちでも 理解して適宜応用してください: sub macro2()  with activesheet.usedrange  if .columns.count <> .specialcells(xlcelltypevisible).columns.count then   msgbox "column(s) hidden"  end if  end with end sub

ZOPUBWYC
質問者

お礼

回答ありがとうございました。

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! Excel2003までの場合(256列まで)のコードの一例です。 Sub test() Dim j As Long, str As String For j = 1 To 256 If Columns(j).Hidden = True Then str = str & Mid(Cells(1, j).Address, 2, InStr(Cells(1, j).Address, "1") - 3) & "," End If Next j If Len(str) > 0 Then MsgBox "非表示列は、" & vbCrLf & Left(str, Len(str) - 1) & vbCrLf & "列です。" Else MsgBox "非表示列はありません。" End If End Sub こんな感じではどうでしょうか?m(_ _)m

ZOPUBWYC
質問者

お礼

回答ありがとうございました。

関連するQ&A

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

    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

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

    (行いたいこと) 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

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

    二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする 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

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

    お世話になります。 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

  • 13行目のセルの値が0のとき、その列を非表示にする

    Windows7 Excel2007でマクロ作成中の初心者です。 13行目のセルの値が、0のときは、その列を非表示にするというマクロを作ろうとしましたが なかなか難しくておてあげです。探したら次のようなコードがでてきました。 ボタンを押すとK列の値を参照して「A」と表示されている行を隠し、「表示する」ボタンを押すと、 解除するという処理。 Option Explicit Private Sub Cmd隠す_Click()  Dim 行番号 As Long  '行を隠す  For 行番号 = 4 To 13   If Cells(行番号, 11).Value = "A" Then    Cells(行番号, 1).EntireRow.Hidden = True   End If  Next 行番号 End Sub Private Sub Cmd表示する_Click()  '表全体を再表示する  Cells.Select  Selection.EntireRow.Hidden = False  Selection.EntireColumn.Hidden = False  Cells(1, 1).Select End Sub このコードを利用して、13行目のセルの値が、0のときは、その列を非表示にするというコードにしたいのです。 よろしくおねがいします。

  • エクセルマクロで列を削除したい

    エクセル2013です。 マクロの途中で列を削除するようにしてあります。 A列~J列、N列~Q列、T列~U列、W列~Y列を一括削除なのですが A列~J列だけは、作業者が選択した1列だけを残して削除をしたいです。 マウスで選択させて、列を指定する所までは作成できましたが 列削除の部分(★の部分)が 思うように作成できず完成できません。 アドバイスをお願いいたします。 Sub 列削除() Dim マウス選択 Dim 選択列 Dim 選択月表示 Dim 質問 On Error GoTo myError 'INPUT-BOXでキャンセルを選択した時の回避 Set マウス選択 = Application.InputBox("回覧用に編集したい月の列を選択してください", Type:=8) If マウス選択.Columns.Count > 1 Then '選択したしたのが列で有り1列であるか確認 MsgBox "選択したのは列ではありません。又は2列以上を選択しています" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If If マウス選択.Rows.Count > 1 Then '選択したのが行又はセルの場合の処理 Else MsgBox "行又はセルを選択しています。1列を選択してください" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Set マウス選択 = マウス選択.EntireColumn Debug.Print マウス選択.Address 選択列 = マウス選択.Column 'INPUT-BOXで選択した列を数字に置き換える 選択月表示 = Cells(2, 選択列).Value '選択した列の8行目のセルの値を格納 If 選択列 > 10 Then '選択したのが11列以上の場合の処理 MsgBox "11列目以降は選択できません" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" '不要列削除 ★ Union(Columns("A:J"),Columns("N:Q"), Columns("T:U"), Columns("W:Y")).Delete Else MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Exit Sub 'エラーが出なかった時のmyErrorの回避用 myError: 'INPUT-BOXでキャンセルを押した時の処理 MsgBox "キャンセルが押されました。プログラム終了します。" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub End Sub

  • セルには何も入ってないのに、数値型になる理由は?

    セルに何も入ってない状態で Sub Macro() If IsNumeric(Range("a1").Value) = True Then MsgBox "A1には数値が入ってます" End If End Sub を実行すると、 "A1には数値が入ってます" が表示されます。 なぜでしょうか? Sub Macro2() MsgBox TypeName(Range("a1").Value) End Sub を実行すると、stringが返ってきます。

  • msgboxの表示

    A列の値とC列の値をMsgboxに表示するにはどうしたらいいのでしょうか?C列で一番高い商品とその品名A列を表示させたいのですが・・ Sub hinmei() Dim i As Long For i = 2 To Range("C65535").End(xlUp).Row Dim x As Long Dim a As Long x = Cells(i + 1, 5) If Cells(i, 5).Value < x Then a = x End If Next MsgBox a End Sub

  • 条件に一致した列の非表示の仕方を教えて下さい

    VBA初心者です。 B7(Cells(7,2))から始まる表があります。 項目が多くて横に長い表なので、普段そんなに必要ない項目は非表示にさせたいのですが、 非表示にする項目もケースバイケースで選べる方がいいのです。 そこで、別用でオートフィルタ機能も使いたいので、 1行あけた5行目の各項目の上に、『非表示』か『表示』を選べるようリスト入力し、 『非表示』になっている場合は、その項目の列を非表示にしたいのです。 それで、私なりに作ったものが下記になりますが、 『アプリケーション定義またはオブジェクト定義のエラーです』 というメッセージがでます。 原因がよく分からないので、教えて頂けないでしょうか。 -- Sub test() Dim LastCol As Long Dim i As Long LastCol = Cells(5, Columns.Count).End(xlToLeft).Column For i = 1 To LastCol If Cells("5:i") = "非表示" Then Columns(i).Hidden = True End If Next i End Sub -- 今使ってるパソコンはVistaでExcel2007ですが、 会社ではXPでExcel2003のパソコンもありますし、将来は7でExcel2010も考えられるので、 それも考慮したコードを求めてます。 宜しくお願いします。

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

    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列までを非表示にする方法はありますか?

専門家に質問してみよう