• ベストアンサー

EXCEL VBAで教えてください。

EXCELで、4列(A~D)仕立ての表があります。D列に入力されている日付が現在より過去の場合、その行を削除するように作成したいのですが、教えていただけますでしょうか?

  • qno
  • お礼率35% (18/51)

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

数字を消さないで、過去の日付けを<<表示>>しているセルの行だけを削除する のであれば、このような感じで如何でしょうか。 Sub Test() Dim Rw As Long For Rw = Range("D65536").End(xlUp).Row To 1 Step -1 If IsDate(Range("D" & Rw).Text) And _ Range("D" & Rw).Value < Date Then Range("D" & Rw).EntireRow.Delete End If Next End Sub

qno
質問者

お礼

ありがとうございます。助かります!

その他の回答 (2)

回答No.2

No1です。 先ほどのでやると、日付が入っていない場合も削除されてしまいますね。 Sub testtest() For i = 40 To 1 Step -1 If Cells(i, "D") <> "" And Cells(i, "D") < Date Then Rows(i).Delete End If Next End Sub としてください。

qno
質問者

お礼

ありがとうございます。さっぱりしていてわかりやすいので試してみます。

回答No.1

仮に、データが1行目から40行目まであるとします。 Sub testtest() For i = 40 To 1 Step -1 If Cells(i, "D") < Date Then Rows(i).Delete End If Next End Sub

関連するQ&A

  • エクセルVBAについて

    VBAに関しての質問です。 A列に日付(10行目から) B列にその日の売上が 300行(300日分)入力されてる表があるとします。 C列にその日を含めた過去N日間の最大の売上を表示させたいのです。 例えば 過去5日間なら過去5日間の最大売上げを毎日表示させたいのです 当然この場合は5日間なのでCの13行目までは空白になります。 「N」日はA1セルに任意の日数で入力することによって希望の期間の数値 が表示できるようにしたいのです。 関数を使ってできるのいですが、事情がありましてエクセルのマクロの 繰り返しのプログラムでやりたいのですが VBAに関しては全く素人ですの。どなたかご教授願えませんでしょうか よろしくお願いします。

  • エクセル VBAでこれは難しいですか?

    列 A B C D 行 1 T1 あ 1 2 2 T2 い 4 5 3 T3 う 7 5 分かりにくいかもしれませんが、上記のような表があるとします。ファイル名:AA.xlsとします。 ”行1”の「T1」や「あ」等はファイルにより違うとします。 1つのファイルの1シートにこういった表が改ページにより(ある領域で1,2ページとしている)たくさんあります。 これを必要な行、列をVBAで作成されたボックス?に入力方式で行、列を入力して、入力された例えば"B"列が削除され、その部分は左詰にされ、そのファイルが新しく別のファイル名で例えばAB.xlsが自動的に作成することは可能でしょうか? 手順としては 1 ファイルにより必要、不要な列・行が違うのであらかじめ削除する列・行を確認する。(このファイルをA1.xlsとする) 2 実行したいファイルを参照で(任意のフォルダに進めるよう)読み込めるようにしたVBAを開き、A1.xlsを選択する。 3 削除したい列・行を入力できる窓があり、そこに打ち込む。 4 削除した列・行のスペース分左詰め、上詰めにされたA2.xlsというファイルが同一フォルダ内に作成される。 VBAは全くの初心者で、インターネットで勉強を始めようとしている青二才です。 最終的にはこれ以上のことをしたいですが、まずは最低限これをしたいです。 余談ですが、これができるようになるためにはやはり一から勉強をするしかないのでしょうか? 今したいことがずばり載っている入門書のそのページだけ勉強しても不可能でしょうか? ・PS3のあるゲームのキャラクターの必殺技のコマンドを覚えても、まずPS3をどうやって起動するのか? という考えと一緒でしょうか?

  • EXCEL VBAについて

    いつも識者の皆様にはお世話になっております。 Excel VBAのことで質問させてください。 下記のようなシートがあります。 データの状態は下記です。 1. 1行目は必ずタイトル行になっています。 2. 1行目が「入荷_1」になっている列以降の日付はシリアル値となっています。 ※必ずしもG1が「入荷_1」となっているとは限りません。H1だったりI1だったりします。 VBAでやりたいことは下記です。 1. 過去取引と現在取引の状態によってA列に入力する文字列を変える。 過去取引_1=有 現在取引_1=有 の場合 「OK」 過去取引_1=有 現在取引_1=無 の場合 「NG」 過去取引_1=ブランク 現在取引_1=有 の場合 「確認要」 2. 「入荷_1」以降の列で「入荷_1」「出荷_1」など、アンダーバー以降の文字列が同じになっている2列を一まとめとして、そのどちらかもしくは両方に日付の入っているセルを探し、その列の1行目の、アンダーバーの次の文字から最後の文字までを[]で囲んだ文字列をB列に入力する。 ※_1にも_2にもある場合は、アンダーバーを使って文字列を連結する。(B2セル) ※パイナップルやぶどうのように入荷か出荷のいずれかにしか日付が入っていないものもある。 3. タイトル行が「入荷_1」となっている列以降で日付の入っている列を探し、出荷から入荷を引いた数字をC列に入力する。 ※_1にも_2にもある場合は、アンダーバーを使って文字列を連結する。(C2セル) これを2行目から1行ずつ最後の行まで行い、かつ、このシートはブックにある複数のシートの中の1つですが、BA1セルが空白ではないシートにだけこの処理をしたいのです。 どうやらSelect Caseという構文を使えばできそうだというところまで突き止めたものの、条件が僕には複雑すぎて(特に2列を1まとめにするところ)まったく進みません。 どなたか、上記内容の場合どのような構文になるのか教えていただけませんでしょうか。 よろしくお願いいたします。

  • エクセルVBAの書き方で教えてください。

    エクセルで、 「A列にデータを入力した日付をB列に自動で入れる」 (A列のデータを消したときは、B列のデータも消える)ということをするのに、 他の質問を参考にして、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then   '対象の列が1列目(A列)なら If Target.Value <> "" Then   '入力された値がブランクでなければ Target.Offset(0, 1).Value = Date   '0行ずれた(同じ行)の1列右隣に日付を入れる Else       'そうでなければ(Deleteキーで消されたら) Target.Offset(0, 1).Value = ""   '同行右隣をブランクすなわち""として消す End If      '入力された値の処理終り End If      '1列目(A列)の処理終り、従ってB列以降はチェックしない End Sub と、入力して、うまく動きました。 ところが、「A列に入力」→「B列に自動で日付」だけでなく、 「D列に入力」→「E列に自動で日付」 「H列に入力」→「I列に自動で日付」と、1つのエクセルシートの中で いくつかの同じ条件のことを繰り返そうと思うとうまくいきません。 この場合、どのようにVBAを記入したら良いのか、教えてください。 よろしくお願いします。

  • エクセルVBA 行追加時に自動で罫線を引きたい

    こんにちは。いつもお世話になっています。 エクセル2007を使用し、データーベースの表を作っています。 A列からE列まで情報の項目があり、(日付・名前等) 3行目からずっとデータを入力しています。 新しい行に、A列からE列の間に何か入力した時、 もしくは入力してある最終行にカーソルがある時、改行を押した場合 次の新規の行AからEまで、自動に罫線を引くにはどうしたらよいのでしょうか?

  • Excel VBAの繰り返し構文について

    A列に日付、B列に曜日、C列に休、D列に1直、E列に2直、という形の年間シフトを作成しています。 初期値としてA2セルに数字を入力→C列が空白の時だけD列に記入するマクロを作成したと思っています。 現在仮として、 Sub C列のセルが空白の行のD列に数値を入力() 下端行 = Range("A" & Rows.Count).End(xlUp).Row '下端検出 For 行 = 3 To 下端行 '1行目から下端行まで1行ずつ繰り返す If Range("C" & 行).Value = "" Then 'その行のC列のセルの値が空白の時 Range("A2").Copy 'A2をコピーする Range("D" & 行).PasteSpecial Paste:=xlPasteFormulas 'その行のA列のセルを起点に 'して数式を貼り付ける End If Next End Sub というマクロを置いていますが、「Range("A2").Copy」の部分を 「A2を初期値として、最初にC列が空白でなくなる時まで初期値を繰り返し、次にC列が空白になった場合は初期値+1の数をD列に入力する。 ただし初期値+1の最大数は6までとする(要するに1~6の繰り返しです)」 という感じに変更したいのですが、どうすればいいのかさっぱりです…。 VBAレベルはこの質問をする程度なのでかなり初級です。

  • エクセル表→セル内データ更新→同じ行の最終更新日欄の日付を自動更新 し

    エクセル表→セル内データ更新→同じ行の最終更新日欄の日付を自動更新 したい。 エクセルで作成した表で、表の中のデータを更新した場合に、その行の最後の列の「最終更新日」の日付を自動的に更新する方法を探しています。 具体的には、エクセルで1行目のA列に「データのキーワード」、B列に「データのハイパーリンク」、C列に「データ記入者」、D列に「最終更新日」の項目を作成し、2行目以降に作成した各データをA~Cの項目に従って記入してデータ一覧表を作成しています。 その際に、A,C列の項目を更新した時と、B列項目のリンクを開いた時に、同じ行D列の最終更新日の日付を自動で入力及び更新する方法はないでしょうか? 恐らくマクロを組む必要があると思うのですが、全くの素人ですので是非教えて頂けないでしょうか? すみませんが、宜しくお願い致します。

  • excel vba についてお聞きします

    excel vba についてお聞きします userformを使ってworksheetにデータを登録するといった事をしたいと考えております userformにはtextboxとcommandbuttonを配置 commandbuttonを押したらtextboxに入力した内容をworksheetに登録させる 同時にworksheetのA列には日付を登録 日付は登録をするその日付を反映させる 同じ日付があった場合は日付の登録はせずにその日付の行、B→C→Dと順に textboxのデータの登録だけをする。 日付の入るA列以外にデータが入る事になります また、textboxの内容が既にworksheetに登録済の場合 『既に登録済みです』といったメッセージを出すようにもしたいのです ご教授の程、よろしくお願いします。

  • EXCEL VBAの構成について

    本を買ったのですが分からないので教えて下さい。 表の最終行のA列からD列をコピーして、Y列の最終行にの1行下に貼り付けたいのですが、どうやって、構文を入力したらいいですか? お願いします。

  • エクセル(vba)で教えてください。

    エクセル(vba)で教えてください。 vbaはほぼ初心者ですので、皆様のお知恵を拝借させてください 現在リストを作成しているのですが、最終更新日時を自動で取得するようにしてみたいのですが、うまくいかないです。 リストは列(項目)固定で、最終行に追加していくというものです。 1カテゴリ=1行での入力になります。 例えば、A,C列の項目のみ記入すると、その行のL列に自動で日時が入力される。 また翌日ブックを開いても、その日時は最終入力日のままだが、追加でD列の項目を 入力すると日時も更新される、というものです。 説明が足りないかもしれませんが、どなたか詳しい方よろしくお願いします。

専門家に質問してみよう