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

このQ&Aのポイント
  • VBAを使用して条件に一致した列を非表示にする方法について教えてください。表が項目が多くて横に長いため、非表示にする項目もケースバイケースで選びたいです。
  • オートフィルタ機能を使用して条件に一致した列を非表示にする方法について教えてください。表が項目が多くて横に長いため、非表示にする項目もケースバイケースで選びたいです。
  • VBAを使って表の中の特定の列を非表示にする方法について教えてください。条件に一致した列の上にリストを作成し、非表示か表示かを選ぶことができるようにしたいです。
回答を見る
  • ベストアンサー

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

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も考えられるので、 それも考慮したコードを求めてます。 宜しくお願いします。

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

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

セルの書き方に問題があります。次のようにすればよいでしょう。 If Cells(5, i) = "非表示" Then

ichigo999
質問者

お礼

おはようございます。 出来ました!! ありがとうございました。

関連するQ&A

  • エクセルののマクロについて教えてください

    Sub search() Dim i As Long, lastCol As Long, c As Range, str As String, wS As Worksheet Set wS = Worksheets("sheet2") wS.Cells.Clear str = Application.InputBox("検索内容を入力") Application.ScreenUpdating = False With Worksheets("sheet1") lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column .Columns(lastCol + 1).Insert For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row Set c = Range(.Cells(i, "A"), .Cells(i, lastCol)).Find(what:=str, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then .Cells(i, lastCol + 1) = 1 End If Next i If WorksheetFunction.CountIf(.Columns(lastCol + 1), 1) > 0 Then .Range("A1").AutoFilter field:=lastCol + 1, Criteria1:=1 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy wS.Range("A1") wS.Columns.AutoFit wS.Columns(lastCol + 1).Delete wS.Activate .Columns(lastCol + 1).Delete .AutoFilterMode = False Else MsgBox "該当データなし" End If End With Application.ScreenUpdating = True End Sub エクセルで上のシステムをネットから持ってきました。 上から5行目のinputboxを"Sheet3"のA列からデータを持ってきてプルダウンで表示させたいのですがユーザーフォームでオブジェクトを組まないで表示させる方法を教えてください

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

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

  • ある列の計算式が入っているセルの行のみを削除したい

    Excel2007でマクロを作成している超初心者です。 B列のセルには 空白 文字列 計算式が入っています。このうち計算式の入っているセルの行のみを削除したいのですが、どうしたらよろしいでしょうか?  セルには =IF(C17="","",+K17*L17)という式が入っています。 次式は0か空白の場合ですが、これをどのように修正したらできるでしょうか? Sub 行の削除() Dim i As Long For i = 1 To Selection.End(xlDown).Columns Step 1 Select Case Range("B" & i).Value Case 0, "" Columns(i).Delete End Select Next End Sub

  • 列を変更して転記したいのですが。

    すみません、誰か教えていただけませんか。 A列に値が入力がされていて、その値をF列に転記していき 15行までいけば2列横にズレて転記していき更に、15行で 2列横と続けたいのですがうまく出来ません。 下記のように記述してみたのですが、値が置き換わるだけで 転記出来ません。 誰か教えて頂けませんでしょうか。 Sub TEST() Dim i As Long, ii As Long Dim myR As Long myR = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row ii = 5 For i = 1 To myR Cells(1, ii).End(xlUp).Offset(0, 1).Value = Cells(i, 1).Value If Cells(1, ii).End(xlUp).Row = 15 Then ii = ii + 2 End If Next i End Sub 宜しくお願いします。

  • 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 表の並び替え (追加質問)

    先日表の並び替えでVBAを教えていただいたのですが、 できればもう少し詳しくご教授願いたいと思います。 【前回の質問】 同じ請求書内に含まれる情報をひとつの請求書列の横に並べて配置したいのですが。 請求書 製品 価格  個数 aaa   AAA  200  10 aaa   BBB  400  10 aaa   CCC  300  5 bbb   AAA  100  50 bbb   BBB  500  10 請求書 製品 価格  個数 製品 価格  個数 製品 価格  個数 aaa   AAA  200  10 BBB  400  10  CCC  300  5 bbb   AAA  100  50 BBB  500  10 にたいして、 Sub test()  Dim LastCol_1 As Long  Dim LastCol_r As Long  Dim LastCol_Max As Long  Dim LastRow_A As Long  Dim r As Long  LastCol_1 = Cells(1, Columns.Count).End(xlToLeft).Column  LastRow_A = Cells(Rows.Count, "A").End(xlUp).Row  Application.ScreenUpdating = False  'データの並べ替え  For r = LastRow_A To 3 Step -1   LastCol_r = Cells(r, Columns.Count).End(xlToLeft).Column   If Range("A" & r).Value = Range("A" & r - 1).Value Then     Range("A" & r).Resize(, LastCol_r - 1).Offset(, 1).Copy _      Destination:=Cells(r - 1, LastCol_1 + 1)     Rows(r).Delete   End If  Next r    '見出し行の編集  With ActiveSheet.UsedRange   LastCol_Max = .Cells(.Cells.Count).Column  End With  Range("A" & 1).Resize(, LastCol_1 - 1).Offset(, 1).Copy _      Destination:=Cells(1, LastCol_1 + 1).Resize(, LastCol_Max - LastCol_1)  Application.ScreenUpdating = True   End Sub というVBAコードをいただきました。 結果は大満足だったのすが、たとえばもし請求書columnの横に繰り返したくないcolumnがもう1列ある場合はどのようにしたらよいのでしょうか。請求書番号と同様1行に1回のみ表示させたいのです。 請求書 Year 製品 価格  個数 aaa   2007 AAA  200  10 aaa   2007 BBB  400  10 ↓↓↓↓↓↓↓↓↓ 請求書 Year 製品 価格  個数 製品 価格  個数 aaa   2007 AAA  200  10 BBB  400  10   お手数ですが、コメントいただければ幸いです。

  • VBA 空白表示させたい

    教えて頂いたVBAなのですが Sub Macro1() Dim Ws01 As Worksheet Dim Counter As Long, i As Long, j As Long Dim INP As String Set wS = Worksheets("Sheet4") wS.Cells.ClearContents If Selection(Selection.Count).Row <> 2 Then Exit Sub Counter = 0 For i = 3 To ActiveSheet.UsedRange.Rows.Count INP = "" For j = Selection(1).Column To Selection(Selection.Count).Column If Cells(i, j) = 1 Then INP = INP & Cells(2, j) & "," End If Next j If INP <> "" Then Counter = Counter + 1 wS.Cells(Counter, "A") = Left(INP, Len(INP) - 1) End If Next i End Sub ---------------------------------------------------------------------- g      h       i      j パセリ クレソン メキャベツの葉 ごぼう 1      1             1 1                    1 1行目 パセリ,クレソン,メキャベツの葉 2行目  3行目 パセリ,メキャベツの葉 と、2行目は詰めずに空白表示したいです。 どこをどうすればできますか?

  • 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のときは、その列を非表示にするというコードにしたいのです。 よろしくおねがいします。

  • 型が一致しません

    下記はセルが0の時、行全体を表示しないにするようにするVBAですが、型が一致しませんとエラーになります、どこを直せばいいのですか。 Dim I As Integer Sub Macro4() For I = 4 To 76 If Cells(I, 8) = 0 Then Rows("I:I").Select Selection.EntireRow.Hidden = True End If Next I End Sub

  • Excel VBAで文字列の部分一致の文字列を表示

    以前、こちらで頭5文字までの一致で文字列を表示するVBAを教えて頂きました。今回はFINDなどの部分一致での文字列を表示することをしたいのですが、ご教示いただけますと幸いです。 下記はSheet1のA3に文字を5文字以内いれるとSheet2のC列からピックアップしてSheet1のA列に文字列を表示する及びSheet2のB列のデータをSheet1のC列に表示させるVBAです。 Sub Test2() Dim Ws1 As Worksheet, Ws2 As Worksheet Dim SData As String, i As Long, VRet As Variant Dim c As Range, LastRow As Long Set Ws1 = Sheets("Sheet1") Set Ws2 = Sheets("Sheet2") SData = CStr(Ws1.Range("A3").Value) If SData = "" Then Exit Sub i = 5 LastRow = Ws1.Cells(Rows.Count, "A").End(xlUp).Row If LastRow < i Then LastRow = i End If Ws1.Range(Ws1.Cells(i, "A"), Ws1.Cells(LastRow, "C")).ClearContents With Ws2 For Each c In .Range(.Cells(1, "C"), .Cells(Rows.Count, "C").End(xlUp)) VRet = InStr(1, CStr(c.Value), SData, vbTextCompare) If VRet = 1 And Len(c.Value) >= 10 Then Ws1.Cells(i, "A").Resize(1, 2).Value = c.Resize(1, 2).Value 'とりあえずSheet2のB列のデータ(C列のデータに同期したデータ)をSheet1のC列に Ws1.Cells(i, "C").Value = .Cells(c.Row, "B").Value i = i + 1 End If Next End With End Sub 宜しくお願い致します。

専門家に質問してみよう