Excel VBAの非表示方法とは?初心者向けの解説

このQ&Aのポイント
  • Excel VBAを勉強中の初心者の方に向けて、A列の日付を非表示する方法について解説します。指定した日付から昨日までの範囲を非表示にし、今日の日付を先頭に表示する方法を紹介します。
  • Findメソッドを使用して昨日の日付が入っているセルを検索し、A1セルから昨日のセルまでを非表示にする方法について詳しく説明します。また、別の方法として、セルの範囲を指定して非表示にする方法も紹介します。
  • Excel VBAのコードを使用して、A列の日付を非表示にする方法についてご説明しました。ぜひ、試してみてください。もしわからない部分があれば、遠慮なく質問してください。
回答を見る
  • ベストアンサー

Excel VBAの非表示について(初心者)

Excel VBAを勉強中の者です。 A列に日付が連続で入っている表で、A1に入力されている一番古い日付から 昨日の日付までを非表示にし、今日の日付を先頭に表示したいと思っています。 Findメソッドで昨日の日付が入っているセルを検索し、A1セルから昨日のセルまでを 非表示にしようと思い下記のようにしてみたのですができませんでした。 Dim i As Range Dim x As Byte Dim y As Byte Set i = Range("A1:A65536").Find(What:=Date-1) x = i.Row Rows("1:x").Hidden = True または x = i.Address Range("A1:x").EntireRow.Select Selection.Hidden = True 教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

おしいですね Rows("1:x").Hidden = True x まで " で囲むと x も文字列として扱われてしまいますのでエラーになります。 Rows("1:" & x).Hidden = True にしてください。

mihimarumaru
質問者

お礼

実際に自分の書いたコードを添削していただけるのが一番身に付くようで有難く思っています。ありがとうございます。 その上で他のより良い方法もみなさんに教えていただけたのでとても参考になりました。みなさん、ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

質問者のコードの修正回答は、既に出ている。 それとは別に、参考に Sub test01() Range("A2", Range("A1:A65536").Find(What:=Date - 1)).Select Selection.EntireRow.Hidden = True End Sub のように変数も必要なく、3行にも出来る。A1セルは見出し文言とみて残した。

mihimarumaru
質問者

お礼

すばらしいです。 とても参考になります。 ありがとうございました。

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

こんにちは! 色々方法はあるかと思います。 FINDメソッドではなく、For~Nextでの方法です。 一例です。 Sub test() Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) < DateValue(Date) Then Rows(i).Hidden = True End If Next i End Sub こんな感じではどうでしょうか?m(__)m

mihimarumaru
質問者

お礼

なるほど。全く思い付きませんでした。とても参考になります。 ありがとうございます。

関連するQ&A

  • エクセル 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

  • エクセルのマクロで行選択

    現在、エクセルでマクロを組んでいます。 行いたい内容としては 1.行6~1765までを選択 2. 1.で選択した行を非表示 3. 行6~"セルH2の値"までをを選択 4. 3.で選択した行を再表示 3の段階で失敗してしまいます。 Rangeメソッドに失敗しました、と出ます ソースは以下のとおりです ----- Private Sub CommandButton2_Click() Dim x As Integer Range("6:1765").EntireRow.Select Selection.EntireRow.Hidden = True x = Range("H2").Value Range("6:x").EntireRow.Select Selection.EntireRow.Hidden = False End Sub ---- 解決法がわかる方、教えてください よろしくお願いします。

  • エクセルのVBAで

    日付を入力したシートでシートを開くと今日の日付のセルがあった場合左上に表示させるモジュールで、 Sub test() Dim R As Range Set R = Range("A:A").Find(Date) If Not R Is Nothing Then Application.Goto reference:=R, scroll:=True End If End Sub のように作成したのですが、うまく働きません。 原因は、日付を表示したセルが、A1に2006/4/1を入力してA2以降のセルはA1+1、A2+1・・・で対応しています。 よって、アクションが働かないのではと推測しているのですが、このことを改善するにはどのようにしたらいいでしょうか? 日付をダイレクトに入力しないのは、2007年にも先頭セルのみの書き換えで対応しようとしたためです。

  • 行を非表示するVBA

    下記は行を非表示するVBAです、 エラーになり非表示できませんどこが間違っているのですか、よろしくお願いします。 Sub Macro7() Dim a As Integer a = 15 Rows("a:a").Select Selection.EntireRow.Hidden = True End Sub

  • この場合エクセル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

  • VBA チェックした項目以外を非表示

    現在下記のようなコードがあります。 C列に項目が入力されており そのC列に入力されている項目と同じ文字が ユーザーフォームのチェックボックスのキャプションになっています。 今回やりたいのはチェックボックスにチェックした項目以外を 非表示にしたいというものですが 現状は、1つだけのチェックなら正常に機能します。 2つ以上チェックしてしまうとオブジェクト名が大きい方が優先されて しまい1つだけの項目しか表示されません。 どのようにコードを書き換えればよろしいでしょうか? Private Sub CommandButton1_Click() Dim i As Integer Dim d As Date Dim y As Date Dim myMSG As String Dim myFlg As Boolean Dim rng As Range Dim rng2 As Range myFlg = False For i = 1 To 14 If Me.Controls("CheckBox" & i).Value = True Then myMSG = Me.Controls("CheckBox" & i).Caption myFlg = True End If Next i If myFlg = False Then GoTo Label1 End If Set rng2 = Range("C:C").Find(what:=myMSG, lookat:=xlWhole) If rng2 Is Nothing Then MsgBox Me.ComboBox1 & "日に" & myMSG & "は使用していません。", vbInformation Exit Sub Else For x = 2 To Range("C65536").End(xlUp).Row If Range("C" & x).Value <> myMSG Then Rows(x & ":" & x).EntireRow.Hidden = True End If Next x End If End Sub

  • エクセルvbaで同姓同名の抽出方法について

    エクセルVBAで質問があります。 ワークシート1(上段、example1)のB2のセルにひらがな(苗字)を入力したとき、ワークシート2(下段、example2)で作成して該当した情報をワークシート1のC2からe7へ反映させたいと考えています。 ワークシート2に、1000人越えの情報があり、かつ、同姓同名が何人かいて、フィルタをかけてもフィルタ結果後から目的の人を見つけるのが大変なんです。 入力したコードは、下記の通りなのですが、どこをどう直せばいいのか分かりません。どなたか教えていただけないでしょうか? Sub sample() Dim i As Byte   i = 1   If < Worksheets("example2!A2:A9").Value > = 5 Then         Worksheets(i + 4, "example2!C2:E2").Value = EntireRow("example2!D:F").EntireRow = True    ElseIf 4 < Worksheets(i + 3, "example2!A2:A9").Value > = 4 Then         Range.Worksheets("example1!C3:E3").Value = EntireRow("example2!D:F").EntireRow = True    ElseIf 3 < Worksheets(i + 2, "example2!A2:A9").Value > = 3 Then         Range.Worksheets("example1!C4:E4").Value = EntireRow("example2!D:F").EntireRow = True    ElseIf 2 < Worksheets(i + 1, "example2!A2:A9").Value > = 2 Then         Range.Worksheets("example1!C5:E5").Value = EntireRow("example2!D:F").EntireRow = True    ElseIf 1 < Worksheets(i + 0, "example2!A2:A9").Value > = 1 Then         Range.Worksheets("example1!C6:E6").Value = EntireRow("example2!D:F").EntireRow = True    ElseIf 0 < Worksheets(i + -1, "example2!A2:A9").Value > = 0 Then         Range.Worksheets("example1!C7:E7").Value = EntireRow("example2!D:F").EntireRow = True Else End If       Range("example1!B2").Value = " " End sub

  • エクセルVBAのエラー

    よろしくお願いします。 VBA初心者のものです。 下記のコードを作成しましたが、 アプリケーション定義?がされていません というエラーが出ます。 わかりやすく教えていただけないでしょうか。 修正方法を教えてください。 0901名簿.xlsという名前の ファイルAのsheet1の 情報(ファイルBのセルBD1に日付4桁が記入されている)を ファイルBのセルA1の情報を元にファイルBのセルB1に抽出したい Sub 関数の挿入() Dim i As Long Dim あ As String Dim い As String Dim う As String あ="=VLOOKUP(A1,[" い=Range("BD1") う="名簿.xls]Sheet1!$F:$I,1,0)" For i = 2 To 50 Range("A" & i )= あ & い & う Next i End Sub

  • エクセルVBA初心者です。

    エクセルVBA初心者です。 a1   3   5 a2   2   7 a3   1   7 a4   3   1 上で例えると、求めたい値は3*5+2*7+1*7+3*1=39です。  a1という文字を検索し、そして(a1の隣のセル)*(a1の隣の隣のセル)  次に (a2の隣のセル)*(a2の隣の隣のセル) と言う風にくりかえし、  最後に今まで乗算してでた値を合計してセルに結果を入力させるマクロなのですが、  エラーが何度も出て修正してはいるのですが、もうお手上げ状態です。   #以下がそのマクロです。 Sub マクロ() Dim fCell As Range, fAdr As String Dim a() As Double Dim i As Integer, j As Integer i = 0 j = 0 Set fCel = Cells.Find(What:="a1", LookAt:=xlWhole) If Not fCell Is Nothing Then Do While fCell.Offset(j, 0).Address <> fCell.End(Direction:=Down).Address j = j + 1 Loop ReDim a(j) As Double fAdr = fCell.Address For i = 0 To (j - 1) a(i) = fCell.Offset(0, 2).Value = fCell.Offset(0, 1).Value * fCell.Offset(0, 2).Value a(5) = a(5) + a(i) Next i fCell.Offset(j + 1, 1).Value = a(5) Else End If End Sub 本当に初心的なことだと思いますが、どうかよろしくお願いします。

  • VBA(エクセル)での条件付日付表示について

    A列に数字を入力、A25でA列の合計をするべく「=SUM(A1:A24)」という計算式の入ったシートがあるとします。(以下、B、C…と同じような列が続く) A列に入力されている数字が変更され、A25の合計値が変わった場合、その下のセル(A26)に日付と時刻を表示させたいのですが、うまくいきません。 ネットで検索したら、特定のセルの値が変更された時に日付と時刻を表示させる方法は何となくわかったのですが、この場合だと、直接A25のデータ変更された時のみA26に日付が表示されるだけで、A25の合計値がいくら変わったところで最新の時刻を表示させる事が出来ません。 どうすれば、A26に時刻を表示出来るのでしょうか? EXCEL、VBA初心者共に初心者で、あまりよくわかっていなくて申し訳ないのですが、どうぞご教授よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRng As Range Dim i As Range Set myRng = Me.Application.Intersect(Target, Me.Range("25:25")) If Not myRng Is Nothing Then Application.EnableEvents = False For Each i In myRng If IsEmpty(i.Value) Then i.Offset(1, 0).ClearContents Else i.Offset(1, 0).Value = Now End If Next i Application.EnableEvents = True End If End Sub

専門家に質問してみよう