• ベストアンサー

条件に一致する行を削除するマクロの書き方

お世話になります。 EXCELのシート(添付参照ください)で受発注管理をしてます。 「No.」は(月2桁)(日2桁)(連番=01~無限。これまでの最大は3桁)+アルファベット(1文字以上) で自動的に振られます。 ここから別ファイルをつくりたいのですが。 0)シートを新しいブックに「コピー」 1)「出荷数」に何らかの数字がある行を削除 2)「メモ」に特定の言葉(この表では”倉庫”)がある行を削除 3)作業日(この表では0912XXa=9月12日)から1か月以前のデータの行を削除   (つまり8月13日以降のデータを残す) 4)表全体を選択して「No.」をキーにして並び替え 5)セルA1を選択 6)名前を付けて保存(形式は 「(特定の言葉)+(西暦年4桁)(月2桁)(日2桁)+データベース.xls) これを一連のマクロで処理したいと考えております。 0、1、2、4、5、6は何とかなりそうなのですが、3)が私の技量ではできません。 1か月前ということは上に書きました通り、8/13~のみ残すということなのですが、 アタマに0813が付くデータはありません。この場合は0828~を残します。 2か月前でしたら同じく0713XXxのデータはありませんので、 0714~以降を残すことになります。 これはどうやって記述すればうまくいくでしょうか? ご教示いただければ幸いです。 ※すみません。再掲です。  「何とかなりそう」と書いたのですが、ほかの部分も怪しいです。  可能でしたら0~6すべて書いていただけると喜びます。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>(4)を一旦外して実行しますと、 >(3)で、実行時エラー13 型が一致しません ということは、5行目6行目の他にもまだご相談で説明されてないナイショの部分がある事を示唆しています。 (3)の一体どこでエラーが出るのかも情報がありませんので、エラーの原因を推定する事も、対応を考えることもできません。ちなみにご相談で掲示された通りにサンプルデータを作成して確認していますが、エラーは再現しません。 5行目から始まるもそうですが、そういう部分は「教わればあとは自分で出来ると思って説明しなかった部分」なのですから、基本自力で解決してください。自力でマクロを修正できないなら、あなたのエクセルをご相談で例示されたのと全に仕上げてからマクロを使ってください。 それまでの「つなぎ」として、あてずっぽに対応を考えたマクロを掲示しておきますので、参考にしてください。 sub macro2()  dim Target as range  dim myDate as date  dim s as string  dim r as long ’「作業日」(9月12日)のデータの行のセルを選択し、この日がそれだとエクセルに教える  on error resume next  set target = application.inputbox("Select TODAY's row", type:=8)  if target is nothing then exit sub  mydate = datevalue("2014/" & format(left(cells(target(1).row, "A").value, 4), "00/00"))  mydate = dateadd("M", -1, mydate) + 1  s = format(mydate, "mmdd")  on error goto 0 ’(0)  activesheet.copy ’(1)  range("F5:F" & range("F65536").end(xlup).row).autofilter field:=1, criteria1:="<>"  activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup  activesheet.autofiltermode = false ’(2)  range("H5:H" & range("H65536").end(xlup).row).autofilter field:=1, criteria1:="<>"  activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup  activesheet.autofiltermode = false ’(4)  range("A5:IV" & range("A65536").end(xlup).row).sort key1:=range("A5"), order1:=xlascending, header:=xlyes ’(3)  for r = range("A65536").end(xlup).row to 6 step -1   if cells(r, "A")<s then    rows("6:" & r).delete    exit for   end if  next r ’(5)  range("A1").select ’(6)  activeworkbook.saveas filename:="特定の言葉" & format(date, "yyyymmdd") & "データベース.xls" end sub

noname#198543
質問者

お礼

再度の回答ありがとうございます。 実際のデータに当てはめて自分なりに書き換えてみましたが、 1か所だけエラーが出て進みません。 ((2)の部分で、実行時エラー1004 RangeクラスのAutoFilterメソッドが失敗) ここから先は自分で頑張ってみようと思います。 お手数お掛けしました。

noname#198543
質問者

補足

おっしゃる通り、出していない情報があります (具体的に言うと、もっとデータ列がありまして、 そこが空欄だったりします)。 こういう場で質問する自分も悪いのですが、 機密に該当するものもありますので…。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

sub macro1()  dim myDate as date  dim s as string  dim r as long ’(0)  activesheet.copy ’(1)  range("F:F").autofilter field:=1, criteria1:="<>"  activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup  activesheet.autofiltermode = false ’(2)  range("H:H").autofilter field:=1, criteria1:="<>"  activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup  activesheet.autofiltermode = false ’(4)  range("A1").currentregion.sort key1:=range("A1"), order1:=xlascending, header:=xlyes ’(3)  mydate = datevalue("2014/" & format(left(range("A65536").end(xlup).value, 4),"00/00"))  mydate = dateadd("M", -1, mydate) + 1  s = format(mydate, "mmdd")  for r = range("A65536").end(xlup).row to 2 step -1   if cells(r, "A")<s then    rows("2:" & r).delete    exit for   end if  next r ’(5)  range("A1").select ’(6)  activeworkbook.saveas filename:="特定の言葉" & format(date, "yyyymmdd") & "データベース.xls" end sub

noname#198543
質問者

お礼

ご回答ありがとうございます。 補足に情報を追加しましたのでそれを踏まえて 再度ご回答いただけないでしょうか。

noname#198543
質問者

補足

一度成功したかに見えたのですが、 二回目からエラーが出るようになってしまいました。 表でははしょってしまったのですが、実際は 5行目が見出し行で、6行目からデータが始まります。 エラーの内容としては、 (4)のところで、RangeクラスのSortメソッドが 失敗しました、と出ます。 (4)を一旦外して実行しますと、 (3)で、実行時エラー13 型が一致しません となってしまいます。 再度ご回答いただけますと幸いです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【マクロ】データが1つもない行を削除する

    添付した画像のようなファイルがあります。 この表の中で、データが一つもない行は削除して、上詰めにするマクロを実行したいです。 また、このシートの表は11行で終わっていますが、 他のシートは25行目で終わっていたりとバラバラです。 すべてのシートでこの処理を行いたいと思っていますので、 他のシートで処理を行ってもエラーのでないマクロを教えていただけたら幸いです。 ちなみに、 ・各シートに表はひとつづつ。 ・各シートの表の開始セルは同じ。 ・全シートに対して一気に処理を行いたい。←指定した処理をすべてのシートで行うマクロは作成済なので大丈夫です。

  • 行削除のマクロ

    B列~F列にデータが入っていてB列の最終行の下セルを選択しクリップボードのデータを貼り付けた後、貼り付けたデータの最初の3行を削除するマクロを作っています。 Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub これでB列の最終行の下にデータを貼り付けることまで出来たのですが貼り付けた最初の3行の削除の仕方がわかりません。 いい方法があれば教えていただけないでしょうか。  例えばB列の10行目まで既に入力されていた場合、11行目からクリップボードのデータを貼り付け(ここまでは上のプログラムで出来ました。)、11行目から13行目を削除したいのですがどうしたらいいでしょうか?

  • マクロによる条件での行の入力と削除

     初めまして、よろしくお願いします。  次のような二枚のシートがあります  シート1      A  B  C   1     2       ・      99      100 23    101 25   102 31   103 34  104 43  105 44  106 49  107 50  108 55  109 60  110  111  ・  ・  シート2      A  B  C   1     2       ・      99      100 23  1 2 3   101 25  4 5 6 102 31  7 8 9     103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 55  5 6 7 109 60  8 9 0 110  111  ・  ・ シート1とシート2のA列に入っている数字が通し番号です。シート2では加えてその通し番号のデーター数字がB列、C列、D列に入っています。 のこシート1の通し番号31が削除、代わりに通し番5番と51番を追加し、  シート1      A  B  C   1     2       ・      99      100  5 101 23    102 25     103 34  104 43  105 44  106 49  107 50  108 51 109 55  110 60  111  112  ・  ・ マクロを実行すると  シート2      A  B  C   1     2       ・      99      100  5 101 23  1 2 3   102 25  4 5 6    103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 51 109 55  5 6 7 110 60  8 9 0 111  112  ・  ・ シート2がこように通し番号31が入っていた行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加されるマクロを教えていただきたく、よろしくお願いします。

  • 特定行の削除

    100行のデータがあり、その中から、10行目から20行目までを削除 したいとします。 この場合、左の行ボタンを10行目から20行目までシフトクリックで 選択し、削除、としているのですが、これが例えば、1000行ある データの、100から200行とかいうことになってくると、シフトクリック ではちょっとしんどいです。 他に特定の行を選択し、削除する簡単な方法はないでしょうか?

  • セルの値が同じ行を条件に従って行削除するマクロ

    A~E列までデータがあり 行数は約30,000行あります。 A列は半角英数字と-で桁数は11桁又は14桁です。 数字のみもあれば数字と英字の組み合わせもあります。 (英字はどこの桁にあるか何個あるかは不規則です) 例 ABCD123456789X 124345678901234 55555-55555 ABC12345DEF678 E列には半角の 1 か 2 しかありません。 A列が同じ値の行を検出して重複している行は1行だけ残して 後は行削除をしたいです。 行削除はE列の値によって判定したいです。 重複行は1つの値に対して何行あるか不明です。 30,000行のうち、重複行を削除すると10,000行くらいになる予定です。 (1)重複行にてE列の値が1だけの場合    どれでもいいので1行残して残りは行削除 (2)重複行にてE列の値が2だけの場合   どれでもいいので1行残して残りは行削除 (3)重複行にてE列の値が1も2もある場合   E列の値が2の行をどれでもいいので1行残して残りは削除 例 (1) 1234567890XXXX-1 1234567890XXXX-1 1234567890XXXX-1 ↓ 1234567890XXXX-1 (2) 123ABCDE901234-2 123ABCDE901234-2 ↓ 123ABCDE901234-2 (3) 12345678901234-1 12345678901234-2 ↓ 12345678901234-2 ABC45678901234-1 ABC45678901234-2 ABC45678901234-1 ABC45678901234-2 ↓ ABC45678901234-2 手作業では5時間かかりましたがミスだらけです。 まだ数ファイル残っており手作業では厳しいのでマクロを 作成したいのですが、どう記述していのかまったく検討が付きません。 どうかよろしくお願いします。

  • マクロで、0のデーターの行を削除

    下記のような表があるのです(毎月のため苦労して消してます)が、データーの合計欄(セル)が0の行を削除するマクロはどうしたらよいのですか?   A   B    C  コード  合計  内容 1 001   0    0     この行を削除 2 003   5    2・・・  この行は残す 3 004   9    4・・・  この業は残す 4 010   0    0     この行は削除

  • VBA 条件の一致する行の特定のセルの削除について

    VBA初心者です。よろしくお願いします。 <sheet1>     A  B   C  D  E 1   1 1211 佐藤 10 100 2   2 1344  山田 25 150 3   3 1522 田中  5 80 4   4 1655  高橋 35 200 ・ ・ 100 100 3682 小林 40 300 <sheet2>    A   B 1 1344 2 この様な表があったとします。(見辛くてすみません) "sheet2"A1セルに入力した内容と同じ内容を"sheet1"のB列から検索し、その行のB~Eのセルを削除するにはどのようにしたら良いでしょうか? 例えば"sheet2で"「1344」と入力した場合、"sheet1"の「1344」のある2行目のB~Eのセルを削除するといった感じです。 削除後の空白は詰める必要はなく、マクロを記録させるボタンは"sheet2"に貼り付けます。 色々調べましたがどうにも分からない為質問させていただきます。 よろしくお願い致します。

  • excelで、ある条件に対し正なら行を削除したい

    Excelを用いてグラフを作成したいと思っています。 しかし、データ量が多く、グラフが読みにくくなるため、 間引きをおこなうことにしました。 間引く際に一つ一つけしていくととても時間がかかるので マクロを作りたいと思ってます。 しかしはじめてマクロを作るため、調べてもよくわからなかったので 教えていただきたく思います。 データは一秒感覚で測定したデータが三万行ほどになっています。 それを三十秒感覚に間引いてグラフにしたいと思っています。 シートにはこのように記述しています 時間 |測定結果 12:34:56|○○ 12:34:57|○○ : 時間の欄の下二桁が00と30のとき以外の行を削除したいです。 一部分の判断が難しいようなら、一番左に列を挿入し、 00、01、02と秒数のとこだけ書き出し、それを用いて判断するのもいいかなと 思っています。 マクロに詳しい方いましたら、どのようにして組んだらいいか教えてください。 お願い致します。

  • 在庫表シートから、売れた商品の「整理番号」を含む行を削除したいのですが

    マクロで”在庫管理”をしようとしています。 ”在庫表”シートのI列の2行目(セル;I2)に「整理番号」のタイトル、データは3行目から下方向に4桁の数値で並べて200行程度あります。(行方向には、仕入日、商品名、仕入先、金額などのデータが入れてあります。) 「売上入力シート」に、売れた「整理番号」をセル:D3から下方向に数量分入力し、それを売上表に転記(ここは出来ました)後、在庫表から売れた「整理番号」を含む行を削除したいのですが、これの”マクロコード”ができず、悩んでおります。 ヒントでも教えていただければ、助かります。 マクロの勉強を始めて数ヶ月の初心者ですが、よろしくお願いします。

  • Excel 空白行を上に詰めるマクロ

    関数を使用して、sheet1からsheet2に必要なデータを抜き取りました。 sheet2のセルには関数が入っています。 sheet2の抽出データには1行単位(まれに2~3行続けて)空白が発生します。 この行を削除し、かつ上に詰めて表示をしたいのですが、下記の条件で実行可能でしょうか? (例) sheet1 ⇒ sheet2   A   B   C     A  B  C 1 あ  い  う   1 あ  い  か 2        か   2 (空白行) 3 き  く   け    3 き  く  し   4 こ  さ   し   4 (空白行) ●2行目、4行目を削除し、且つ5行目以降に入力されている関数は削除したくない ●空白行削除のマクロは自動?(sheet1のデータを変更したら)で実行できるようにしたい よろしくお願いします。

新人が目の敵にされています
このQ&Aのポイント
  • 5月から20代の女性が入社して私たちのA課に配属されました。その女性が40代の社長の娘とその娘と仲良しでA課所属女性の2人から目の敵にされていて、少しずつジャブをもらって精神的にボロボロのようです。
  • 具体的には電話も他の女性がワンコールもしないうちにほぼ取って彼女も取ろうとアクションはしてるのですがなかなか取れず、あの小娘は電話に全く出ないみたいに言われたり、全体には挨拶しているのですが、自分の目の前に来て挨拶をしないと納得いかないようでそれだけで挨拶も出来ないとか流されたり、自分は遠目で見ても年中スマホをいじっていて勤務中に私の所にも仕事と関係のないLINEが来るのに
  • 彼女が休憩時間に入ってからデスクでスマホを確認するだけで厳しく指導されていたり、デスクでは飲食はするなと言われていますが、娘のごみ箱を見るとお菓子のカスだらけです。さらにこの間は来客が来て麦茶の準備をして麦茶を冷蔵庫に片付けてからお客様のところに持っていったら時間をかけずにまずは先に出すと注意され、後日、それを実践していたら出しに行っている間に給湯室で待ち伏せされて片付けをしっかりするように怒られていて「片づけるために戻ってきた」と言ったら「新人のくせに口答えする小娘」とまた会社中に流していました。
回答を見る

専門家に質問してみよう