dポイントプレゼントキャンペーン実施中!

以前、特定の範囲の該当データを抽出するマクロを教えていただいたのですが
条件が少し変わった場合、また、追加で条件を追加した場合どこをどう修正すれば良いでしょうか?

↓以前、投稿した質問です。
https://oshiete.goo.ne.jp/qa/9498737.html

○今回新しく抽出したい条件(列等、データのフォーマットは変わりません)
①2と9から始まる12桁の商品コードだけを抽出。それ以外は削除。
②以前の条件、4.5.6から始まる12桁の商品コード+9から始まる12桁の商品コードの中で「9010104564」だけを抽出、それ以外は削除。

度々申し訳ありませんが、ご教授願います。

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

  • ご返信ありがとうございます。
    また、説明不足で申し訳ありません。

    ①は4.5.6は関係なく、新たに2.9から始まる12桁の商品コードだけを抽出したい。それ以外は削除。

    ②は以前質問してご回答いただいているマクロ(4.5.6から始まる12桁の商品コードの抽出)の条件に9から始まる12桁の商品コードを抽出という条件を追加したい。
    さらに9から始まる12桁の商品コードに関しては、その中で「9010104564」だけを抽出したい。
    結果、4.5.6+9(9010104564だけ)を抽出したい。それ以外は削除。

    説明が下手で申し訳ありません。
    こちらで回答になっておりますでしょうか?

    何卒、よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/02/09 11:37
  • うーん・・・

    ご丁寧にご教授いただきましてありがとうございます。
    また、ご返信が遅くなり申し訳ありません。

    ご教授頂いたマクロを実行してみたのですがそれぞれsample①②の下記部分にエラーが出てしまいます。
    ちなみに、エラーが「実行時エラー"424" オブジェクトが必要」と表示されます。
    原因は何が考えられますでしょうか?

    ↓下記エラーで出る部分です。
    ①If .Value >= 300000000000# And .Value < 900000000000# Then
    ②If .Value >= 700000000000# And .Value < 900109500300# Then

    急ぎではございませんので、お時間ある際再度ご教授頂ければ幸いです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/02/13 09:56

A 回答 (6件)

大変申し訳ございませんでした。

「Select Case」文に変えてみました。
---------------------------------------------------------------------------
Sub Sample①()
Dim 行 As Long
Application.ScreenUpdating = False
For 行 = Cells(Rows.Count, 9).End(xlUp).Row To 2 Step -1
Select Case Cells(行, 9).Value
Case Is < 200000000000#
Rows(行).Delete Shift:=xlUp
Case 300000000000# To 899999999999#
Rows(行).Delete Shift:=xlUp
Case Is >= 1000000000000#
Rows(行).Delete Shift:=xlUp
End Select
Next
Application.ScreenUpdating = True
End Sub
---------------------------------------------------------------------------
Sub Sample②()
Dim 行 As Long
Application.ScreenUpdating = False
For 行 = Cells(Rows.Count, 9).End(xlUp).Row To 2 Step -1
Select Case Cells(行, 9).Value
Case Is < 400000000000#
Rows(行).Delete Shift:=xlUp
Case 700000000000# To 901010456422#
Rows(行).Delete Shift:=xlUp
Case Is >= 901010456424#
Rows(行).Delete Shift:=xlUp
End Select
Next
Application.ScreenUpdating = True
End Sub
---------------------------------------------------------------------------
    • good
    • 1
この回答へのお礼

お忙しい中、何度もお手数をおかけしております。

①に関しては、再度ご教授頂いたマクロで無事解決いたしました。
ありがとうございます。

ただ、②に関しては4.5.6から始まる12桁の商品コードは抽出されるのですが
「901010456422」だけ抽出されないようです。
何が原因でしょうか?

何度も申し訳ありませんが、再度ご教授頂ければ幸いです。

何卒、よろしくお願いいたします。

お礼日時:2017/02/15 14:38

No.5 のお礼について



「901010456422」ではなく「901010456423」という事でしたが…
    • good
    • 1
この回答へのお礼

助かりました

大変失礼いたしました。
記載間違いでした。申し訳ありません。

また、質問の際に挙げた商品コードが例として挙げたものでした。
元の商品コードを当てはめる際、「901010456422」と「901010456424」のコードを
同一コードにしてしまっていたことが抽出されない原因だということに気づきました。

Case Is < 400000000000#
Rows(行).Delete Shift:=xlUp
Case 700000000000# To 901010456422#
Rows(行).Delete Shift:=xlUp
Case Is >= 901010456424#
→4以上7未満の12桁の商品コード+901010456422以上901010456424未満のコード(すなわち901010456423)
 という意味ですね?理解不足で大変申し訳ありませんでした。

ですので、無事解決いたしました。
本当にいつもいつも親身に丁寧にご教授頂き感謝しております。
ありがとうございました。

お礼日時:2017/02/15 16:02

毎回マクロを作成するのは面倒くさいですね。

アドインを使ったほうが楽だと思います。
    • good
    • 1
この回答へのお礼

アドバイス頂きましてありがとうございます。
アドインは存じ上げませんでしたので、調べてみたいと思います。
ありがとうございます。

お礼日時:2017/02/13 09:32

後々の事を考えると、削除する方で指定したほうが追加しやすいので IF文をダラダラ並べてみました。


--------------------------------------------------------------------------
Sub Sample①()
Dim 行 As Long
Application.ScreenUpdating = False
For 行 = Cells(Rows.Count, 9).End(xlUp).Row To 2 Step -1
With Cells(行, 9)
If .Value < 200000000000# Then
Rows(行).Delete Shift:=xlUp
End If
If .Value >= 300000000000# And .Value < 900000000000# Then
Rows(行).Delete Shift:=xlUp
End If
If .Value >= 1000000000000# Then
Rows(行).Delete Shift:=xlUp
End If
End With
Next
Application.ScreenUpdating = True
End Sub
--------------------------------------------------------------------------
Sub Sample②()
Dim 行 As Long
Application.ScreenUpdating = False
For 行 = Cells(Rows.Count, 9).End(xlUp).Row To 2 Step -1
With Cells(行, 9)
If .Value < 400000000000# Then
Rows(行).Delete Shift:=xlUp
End If
If .Value >= 700000000000# And .Value < 901010456423# Then
Rows(行).Delete Shift:=xlUp
End If
If .Value > 901010456423# Then
Rows(行).Delete Shift:=xlUp
End If
End With
Next
Application.ScreenUpdating = True
End Sub
--------------------------------------------------------------------------
※ 判ると思いますが、商品コードが13桁以上が無いのならば次の3行は不要です
If .Value >= 1000000000000# Then
Rows(行).Delete Shift:=xlUp
End If
この回答への補足あり
    • good
    • 1

①と②は別という事ですね。

気づかず申し訳ございませんでした。

もう一つ確認です。
②の方ですが「9010104564」だけをと有りますが12桁無いのですが、次のうちどれになるのでしょうか?

① 9010104567、400000000000 ~ 699999999999 だけ残す。
② 400000000000 ~ 699999999999、901010456700 ~ 901010456799 だけ残す。
③ その他(詳しく説明してください)
    • good
    • 1
この回答へのお礼

こちらこそ分かりずらく申し訳ありませんでした。

>もう一つ確認です。
>②の方ですが「9010104564」だけをと有りますが12桁無いのですが、次のうちどれになるのでしょうか?

>① 9010104567、400000000000 ~ 699999999999 だけ残す。
>② 400000000000 ~ 699999999999、901010456700 ~ 901010456799 だけ残す。
>③ その他(詳しく説明してください)
→③になります。

①2と9から始まる12桁の商品コードだけを抽出。それ以外は削除。
→200000000000~299999999999+900000000000~999999999999だけを抽出。それ以外は削除。
②以前の条件、4.5.6から始まる12桁の商品コード+9から始まる12桁の商品コードの中で「9010104564」だけを抽出、それ以外は削除。
→そもそも私が記載した商品コードが12桁ではなかったですね。大変失礼いたしました。「901010456423」
 400000000000~699999999999+901010456423だけを抽出。それ以外は削除。

度々恐縮ではございますが、何卒よろしくお願いいたします。

お礼日時:2017/02/09 13:14

確認ですが①の条件で「4.5.6から始まる12桁の商品コード」は削除されてしまいますが良いのでしょうか?


もしかしたら次のようなことでしょうか?
①2、4、5、6、9から始まる12桁の商品コードだけを抽出。それ以外は削除。
②9から始まる12桁の商品コードについては「9010104564」だけを抽出、それ以外は削除。
この回答への補足あり
    • good
    • 1

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