• 締切済み

VBA(Excel 2003)の行削除に関する質問です。

初歩的な質問で申し訳ありません。 A B C 1 日付 予定 … 2 ( ) ( ) 3 ( ) ( ) 4 ( ) ( ) :  上記ようなのスケジュール表で、A列に「日付(書式:m"月"d"日")」、 B列に「予定」を昇順で表示しています。  そこで、マクロを用いて、昨日までの日付の行全体を削除して、「セル A2」に今日の日付が来るように(一番上に「今日」の日付)表示するに は、どうすればいいでしょうか?    尚、下記のようなコードのような場合、「セルA2」が昨日以前の日付 の場合有効ですが、「セルA2」が既に「今日」の日付になっている状態 でマクロを実行すると、表示がずれてしまいます。 これでは、「起動時 にマクロ実行」の設定の場合、同じ日に2回目以降エクセルを起動する と、問題が生じてしまいます。  「起動時にマクロ実行」の設定で、同じ日に複数回エクセルを起動する という前提でお願いします。 ************************************************************* Private Sub Workbook_Open() 削除行数 = WorksheetFunction.CountIf([a:a], "<" & Format(Date)) Rows("2:" & 削除行数 + 1).Delete End Sub *************************************************************

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

こんな方法もあります Private Sub Workbook_Open() If Range("a2").Value = Date Then Exit Sub  '追加行 削除行数 = WorksheetFunction.CountIf([a:a], "<" & Date) Rows("2:" & 削除行数 + 1).Delete End Sub 参考まで

shingosps
質問者

お礼

hige_082さん ご回答ありがとうございます。 勉強になります。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

COUNTIFの結果(削除行数)を判断してやればいいでしょう。 また、Format(Date)のFormatはなくてもいいと思いますが。。。 --------------------------  削除行数 = WorksheetFunction.CountIf([a:a], "<" & Date)    If 削除行数 > 0 Then      Rows("2:" & 削除行数 + 1).Delete    End If ------------------------- 以上です。

shingosps
質問者

お礼

myRangeさん 早速回答頂きありがとうございます。 頂いたコードで問題なく表示できました。

関連するQ&A

  • VBA アクティブ行の削除

    エクセルで、アクティブにしているセルの行のA列からL列のみを削除というマクロを組みたいのですが、どのように記述したらいいのでしょうか? アクティブなセルはA列~L列のどこにあっても、その行のA列-L列を削除というようにしたいです。 (例1) A1がアクティブだった場合、A1~L1が削除される (例2) B4がアクティブだった場合、A4~L4が削除される すみませんが、お分かりになる方がいましたらよろしくお願いいたします。

  • 【Excel VBA】重複行の削除

    はじめまして。 IDの重複を削除し、日付データを横1列にまとめるVBAについてご教示いただけますと幸いです。 ------------------------------------------------------- ▼シート1(データ入力がされているシート)    A   B   C   D   E   F    1   ID 日付 2  1234  1/1  1/6  1/10  1/20   3  1234  2/3  2/20 4  1234  3/2 5  7777  1/10  1/15  1/20 6  7777  2/2   2/12  2/22 7  9876  2/3 ⇓ マクロ起動後 ▼シート2(重複行を削除しまとめたシート)    A   B   C   D   E   F   G   H 1   ID 日付 2  1234  1/1  1/6  1/10  1/20  2/3  2/20  3/2 3  7777  1/10  1/15  1/20  2/2  2/12  2/22 4  9876  2/3 【補足】 列情報  ・A列…ID  ・B-F列…日付(左詰め) ※日付はIDごと月毎に行が変わるため、IDによって複数行存在する場合があります。 ※A列のIDは重複しない場合もあれば、4行以上ある場合があります。 ※シート1のデータはおおよそ1000-5000行です。 ※IDに対して、日付は5つあれば問題ありません。そのためG列以降の日付を削除しても支障はございません。 ------------------------------------------------------ VBAの知識があまりなく、調べて出てきたものをコピペ使用も試みたのですが、 上手く動かす事ができませんでした…。 お力添え頂けますと幸いです…。 Windows10でエクセル2016を使用しております。 何卒宜しくお願いいたします。

  • excel VBAについて質問します

    excel VBAについて質問します A列のセルには単なる数値や「44+30」のようなデータが入っているものがある。 ' + の記号があったら、セルの先頭に = を追加して計算させて答えを表示しなさい。 'マクロ実行後、A列には、数値だけが表示されることとする。 マクロ実行前   ⇒  マクロ実行後 22   --------------- 22 44+30 --------------- 77 35 -------------------- 35 22+11 --------------- 33 こういった感じにしたいんですがなかなか上手く行きません。

  • Excel VBAについて

    Excel VBAについて ExcelのセルA1に日付データ(yyyy/mm/dd hh:mm)が入っています。 このエクセルファイルを開いている間、セルA1の日付(時分)が更新されたらマクロを実行するようにしたいのですが、どのようにしたらよいのでしょうか。 セルA1の日付データが更新されるタイミングは決まっていません。 セルA1の日付データが更新されたらマクロ実行というのが難しいのであれば、 10秒おきにマクロを実行というようなことができないでしょうか。 ご教授願います。

  • 行コピーして、今日の日付の行に貼り付けるマクロ

    こんにちは、エクセルマクロについて、助けて頂きたく質問させていただきました。 添付しました画像のような表があり、 セルA2に「=TODAY()」が入っていて、セルB2から右は別シートのデータを参照しています。 マクロを実行すると、2行目を行コピーし、セルA3以下の日付からセルA2の日付(今日の日付)を探し出して、行貼り付けしてほしいです。 行コピーや値で貼り付けはマクロの記録を使って、詳しくない私でもなんとか作ることはできるのですが、 今日の日付を探し出して、そこに貼り付ける。というマクロは作れませんでした・・・。 お助け下さい、宜しくお願いします! ※補足します セルA2の今日の日付は便宜上入力しているだけです。無い方がマクロを組みやすいのなら、無くせます。

  • 【Excel VBA】条件つき行削除

    Excel2003を使用しています。 システムからCSVで落としたデータで、データの並び方に規則性があるので、それを利用して、不要部分のデータをマクロで削除できないかと思い、質問させていただきます。 A列に『累計』を含む文字があった場合、その行のD列が0だったら、その行より上の行のA列に『計上日』と入力されている行までを削除するということをしたいです。 下記でいうと、2~5行までを削除したいです。    A     B     C     D 1 2 計上日 3 4 5 累計                0 6 7 計上日 8 9 累計              1000 上記では、B列、C列には何も書いていませんが、実際はデータが入力されていたり、空欄だったりです。 D列が0の行を削除するコードはわかるのですが、さらに、条件が加わっても同じように処理は可能でしょうか? よろしくお願いします。

  • EXCEL2000、VBAのFindメソッドの仕様(1行目の取扱)について

    EXCEL2000のVBAでマクロを作っています。 Sheet1のA列に下記の様に数字を入れ、作成したfindcheckのマクロを実行します。検索値の5は一番最初に1行目に現れるので、メッセージボックスによって1と表示されるはずなのですが、4と出ます。 おかしいなぁと思って4行目の5を別の数字にするとメッセージボックスで1が表示されるようになりました。いろいろ検索してみると、フィルタなどでは1行目はタイトルとして扱われる…みたいな記述があったので、この場合も1行目は特別な意味を持つのかなぁと思い質問しました。 今回は検索結果が複数ある場合、1番最初に出たセルの行数を表示したいと思っています。1行目を「数値一覧」として、列タイトルの様にしたところ、うまくいきそうでした。もしこの動作が仕様なのかどうかご存じの方がいらっしゃったら教えていただきたいと思います。 どうぞよろしくお願いします。 ■Sheet1のA行目の数字 ----------------------------------------------------------- 5 3 2 5 4 3 2 1 1 ----------------------------------------------------------- ■VBAのコードサンプル ----------------------------------------------------------- Sub findcheck() Dim searchResult As Range Set searchResult = Worksheets("Sheet1").Columns("A").Find("5") If searchResult Is Nothing Then MsgBox "見つかりません" Else MsgBox searchResult.Row End If End Sub -----------------------------------------------------------

  • Excel2010 VBAでスペース区切り

    はじめて質問させて頂きます。 VBA初心者ですが、宜しくお願いします。 CSVデータをエクセルにコピペしてから処理することを考えています。 CSVのデータはエクセルで開くと以下の様に入力されています。     |      A列      |  B列 |  C列 | 1行目|   日付 時刻    |データ1|データ2| 2行目|2014/5/14 13:00:01|  ○  |  △  | 3行目|2014/5/14 13:00:14|  ○  |  △  | 時刻は24h制で入力されています。 A列の日付と時刻の間にはスペースがあり、これをVBAでスペース区切りをしたいのです。 B列に列を追加し、スペース区切りの処理をしようと思い、自動記録すると以下のようになりました。 Sub Macro1()     Columns("B:B").Select     Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove     Columns("A:A").Select     Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _      TextQualifier:=xlNone, ConsecutiveDelimiter:=True, Tab:=True, Semicolon _      :=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array( _      Array(1, 5), Array(2, 1)), TrailingMinusNumbers:=True End Sub ところが、このマクロを実行すると「コピーまたは移動先のセルの内容を置き換えますか?」のメッセージが表示されます。(記録する際には表示されませんでした。) 原因を探ったところ、自動記録のマクロを実行すると時刻が12時間制に変更されB列に、 C列にAM/PMが書き込まれます。(A列の日付は問題なく処理されます。) B列に24時間制の時刻が書き込まれるようにしたいのですが、 何か不足してるとことがあるのでしょうか? 方法を教えて下さい。 お手数ですが、宜しくお願いします。

  • エクセルVBAで空白セルを削除する方法

    みなさん教えてください。 今エクセルVBAで、下記のようにのA列に空白セルがある場合にそのセルを削除し、 空白セルが無い場合何もしないと言うマクロを作っています(下記のように自動記録し ました)。 しかし、作成したマクロは、下記のようにA列に空白セルがない場合はエラーが出てし まいます。 空白セルが無い場合エラーが出ない方法を教えて頂けないでしょうか。 よろしくお願いします。 <マクロ> Sub Macro1() Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.SpecialCells(xlCellTypeBlanks).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End Sub <データ> A --------- 1 2 1 1 1 3 4 ・ ・ ・ (以降約300行続きます)

  • vba なぜこうなるのか・・・。

    こんばんは、よろしくお願いします。 A1セルにデータが入っている状態で、以下の変数を使いA列の最終データが入っている行を調べると、(65536)が表示されます。なぜ、(1)にならないのでしょうか? ためしにA1及びA2セルにデータを入れマクロを実行すると、正確に2が表示されました。 Sub 練習() dim maxrow as long maxrow = Sheets(1).Range("a1").End(xlDown).Row   msgbox maxrow End Sub EXCEL2000を使用しています。よろしくお願いします。  

専門家に質問してみよう