ママのスキンケアのお悩みにおすすめアイテム

エクセルで、例えば下記のようにセルに表示されている状態(厳密には、数式で他のセルから引用してきた値)において、「みかん」と表示されている列以外を非表示としたいです。
< 例 >
列A1「みかん」・列B1「りんご」・列C1「バナナ」・列D1「みかん」・列E1「みかん」・
列F1「りんご」・列G1「メロン」・列H1「バナナ」・列I1「みかん」・列J1「もも」…。
これをVBAを利用して、「みかん」の列、列A,列D,列E,列I以外を非表示にするような方法が
あれば、教えてください。
運用としては、それぞれのセルに入る果物の名称が変わっても、毎回「みかん」以外は非表示と
することが希望です。よろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    早速のご返答ありがとうございます。
    ご教示いただきましたコードで非表示できること確認いたしました。
    ありがとうございます。
    ただ、最初に明記していなかった私が悪いのですが
    空白のセル(例えば、AA1から右側のセルには何も入力されていない)は
    表示されたままとしておきたいのですが、そういったことも可能でしょうか?
    何度もお手を煩わせて申し訳ございません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/07/27 23:38

A 回答 (4件)

ちょっと離れていました。


>空白のセル(例えば、AA1から右側のセルには何も入力されていない)は表示されたままとしておきたい

何度も修正してしまって分かり難くなってしまったかも知れませんので
変数を増やし書き替えますね。

Sub Sample()
Dim i As Long, LastCol As Long
Dim myRng As Range
  Application.ScreenUpdating = False
  With ActiveSheet
    .Cells.Columns.Hidden = False
    LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
    For i = 1 To LastCol
      If .Cells(1, i).Text = "みかん" Then
        If myRng Is Nothing Then
          Set myRng = .Cells(1, i)
        Else
          Set myRng = Union(myRng, .Cells(1, i))
        End If
      End If
    Next i
    If Not myRng Is Nothing Then
      .Range(.Columns(1), .Columns(LastCol)).Hidden = True
      myRng.EntireColumn.Hidden = False
    End If
    Application.Goto Reference:=Range("A1"), Scroll:=True  ’A1セルは表示されていない可能性がありますが一番左と言う意味で
  End With
  Application.ScreenUpdating = True
End Sub

こんな感じでどうでしょう。
    • good
    • 0
この回答へのお礼

何度もご丁寧にありがとうございます。
エラーの対処も含めこちらの希望していたカタチとして作動すること確認できました。
大変助かりました。

お礼日時:2020/07/28 00:31

3連投申し訳ありません。


反省します。
>運用としては、それぞれのセルに入る果物の名称が変わっても、毎回「みかん」以外は非表示とすることが希望です。
数式でとなると、非表示のままプロセスを実行すると言う事ですよね。、、ゴメンナサイ。

With ActiveSheet の次の行に .Cells.Columns.Hidden = False が必要になります。(一度すべての列を表示する)
理由は、表示されている右以降の変更された値を取得できない為

また、画面制御(Application.ScreenUpdating)などのコードも加えた方が良いかも知れません。
    • good
    • 0

#1です投稿後気が付きました。


>厳密には、数式で他のセルから引用してきた値
数式でエラーがセルにある場合、.Cells(1, i).Value = "みかん" でエラー13が返る可能性があります。
エラー処理を追加するか、  .Cells(1, i).Text = "みかん"  に変更してください。
    • good
    • 0

こんばんは、


よく見かけるコードになりますが、一例です。

Sub Sample()
Dim i As Long
Dim myRng As Range
  With ActiveSheet
    For i = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
      If .Cells(1, i).Value = "みかん" Then
        If myRng Is Nothing Then
          Set myRng = .Cells(1, i)
        Else
          Set myRng = Union(myRng, .Cells(1, i))
        End If
      End If
    Next i
    If Not myRng Is Nothing Then
      .Cells.Columns.Hidden = True
      myRng.EntireColumn.Hidden = False
    End If
  End With
End Sub

再表示する為のコードも
Sub re()
 ActiveSheet.Cells.Columns.Hidden = False
End Sub
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング