Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6702 / 13644 ツリー ←次へ | 前へ→

【43442】検索と削除 わんこ好き 06/10/15(日) 23:25 質問[未読]
【43443】Re:検索と削除 ハチ 06/10/16(月) 10:34 発言[未読]
【43472】Re:検索と削除 わんこ好き 06/10/16(月) 21:32 発言[未読]
【43476】Re:検索と削除 ハチ 06/10/16(月) 23:53 発言[未読]
【43478】Re:検索と削除 わんこ好き 06/10/17(火) 1:22 発言[未読]
【43645】Re:検索と削除 わんこ好き 06/10/21(土) 2:44 お礼[未読]

【43442】検索と削除
質問  わんこ好き  - 06/10/15(日) 23:25 -

引用なし
パスワード
   シート1、シート2、シート3の3枚構成で
5行目はタイトル検索範囲(データ)は6行目から
範囲は(A6:AO1800)です。

1.シート1のB3セルに入力したコード(例:20320)でシート2のデー  タを検索する。
2.シート2の該当のコードデータをシート3にコピーする。
3.シート2の該当(例:20320)のコードデータを削除する。

以上、1から3までをコマンドボタン操作で処理したいのですが

1と2は下記、DGET関数とVBAで何とか処理しました、しかし

”3.シート2の該当(例:20320)のコードデータを削除する。”が
初心者のため作れません。
 
よろしくお願いいたします。


シート1
    A    B     C     D     E     F  ・・・・   


3      20320




シート2
    A    B     C     D     E     F ・・・・     




5  コード  氏名   住所   受付日   回答
6 10011 山田   東京   3月1日  OK
7 20320 佐藤   仙台   9月8日  NG
8 10030 加藤   札幌   7月7日  OK
9 30222 山本   大阪   9月8日  OK
1020001 石田   京都   8月5日  OK
1130567 大野   横浜   6月2日  OK


シート3
    A    B     C     D     E     F ・・・・
1  コード  氏名   住所   受付日   回答
2 20320 佐藤   仙台   9月8日   NG   


5  コード  氏名   住所   受付日   回答
6 20320 佐藤   仙台   9月8日   NG
7  
8  
9  
10 
11 

セル”A2”=シート1!B3
セル”B2”=DGET(シート2!$A$5:$AO1800$11,シート2!B$5,$A$1:$A$2)


 Sheets("シート3").Select 
  Range("A2:AO2").Copy
  
  Application.Goto Reference:="R6C1"
  Range("A1800").End(xlUp).Offset(1).Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Application.CutCopyMode = False

【43443】Re:検索と削除
発言  ハチ  - 06/10/16(月) 10:34 -

引用なし
パスワード
   ▼わんこ好き さん:

>1.シート1のB3セルに入力したコード(例:20320)でシート2のデー  タを検索する。
>2.シート2の該当のコードデータをシート3にコピーする。
>3.シート2の該当(例:20320)のコードデータを削除する。
>
>以上、1から3までをコマンドボタン操作で処理したいのですが
>
>1と2は下記、DGET関数とVBAで何とか処理しました、しかし
>
>”3.シート2の該当(例:20320)のコードデータを削除する。”が
>初心者のため作れません。
> 
>よろしくお願いいたします。
>セル”A2”=シート1!B3
>セル”B2”=DGET(シート2!$A$5:$AO1800$11,シート2!B$5,$A$1:$A$2)

必要なデータはフィールド11(K列?)だけでですか?

>
> Sheets("シート3").Select 
>  Range("A2:AO2").Copy
>  
>  Application.Goto Reference:="R6C1"
>  Range("A1800").End(xlUp).Offset(1).Select
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>    :=False, Transpose:=False
>  Application.CutCopyMode = False

自分はDGETをあまり使ったことがないのですが、
このコードでいくと削除するのに、
もう一度シート2のどこにデータがあるのか
検査しなければならないと思います
(もっと良い方法があるのかもしれません・・)

二重にデータチェックがかかってあまり良くないですね。
削除も行いたいならデータを引っ張るコードから見直したほうが良いかも。

【43472】Re:検索と削除
発言  わんこ好き  - 06/10/16(月) 21:32 -

引用なし
パスワード
   ▼ハチ さん:

回答ありがとうございます
必要なデータはK列だけではありません、1行全部です。
実際はB2・・・・・・BO2までです。
サンプルとして転記で誤りがありました。
誤:セル”B2”=DGET(シート2!$A$5:$AO1800$11,シート2!B$5,$A$1:$A$2)
正:セル”B2”=DGET(シート2!$A$5:$AO1800,シート2!B$5,$A$1:$A$2)

ハチさんの指摘はもっともだと思います。
シート間の転送とか移動なんてのが使えれば・・・一度考えてみます。
ただ、まだVBAは素人なので使えるコードも限られていて苦肉の策なんです
シート2→シート3へ指定のデータ移動後シート2の指定データが無くなればいいのですが、そんなサンプルを御伝授いただければ嬉しいのですが


>▼わんこ好き さん:
>
>>1.シート1のB3セルに入力したコード(例:20320)でシート2のデー  タを検索する。
>>2.シート2の該当のコードデータをシート3にコピーする。
>>3.シート2の該当(例:20320)のコードデータを削除する。
>>
>>以上、1から3までをコマンドボタン操作で処理したいのですが
>>
>>1と2は下記、DGET関数とVBAで何とか処理しました、しかし
>>
>>”3.シート2の該当(例:20320)のコードデータを削除する。”が
>>初心者のため作れません。
>> 
>>よろしくお願いいたします。
>>セル”A2”=シート1!B3
>>セル”B2”=DGET(シート2!$A$5:$AO1800,シート2!B$5,$A$1:$A$2)
>
>必要なデータはフィールド11(K列?)だけでですか?
>
>>
>> Sheets("シート3").Select 
>>  Range("A2:AO2").Copy
>>  
>>  Application.Goto Reference:="R6C1"
>>  Range("A1800").End(xlUp).Offset(1).Select
>>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>>    :=False, Transpose:=False
>>  Application.CutCopyMode = False
>
>自分はDGETをあまり使ったことがないのですが、
>このコードでいくと削除するのに、
>もう一度シート2のどこにデータがあるのか
>検査しなければならないと思います
>(もっと良い方法があるのかもしれません・・)
>
>二重にデータチェックがかかってあまり良くないですね。
>削除も行いたいならデータを引っ張るコードから見直したほうが良いかも。

【43476】Re:検索と削除
発言  ハチ  - 06/10/16(月) 23:53 -

引用なし
パスワード
   ▼わんこ好き さん:

自分はFindが好きなのでこんな感じでしょうか?
WorkSheets1枚目A2セルにコードを入れると
2枚目から3枚目へコピー、2枚目から削除。
2枚目A1〜A100に検索されるコードが並んでいてA〜D列までをコピー&削除します。

テストデータで試してみてください。

*いちお、動きましたが半眠りで書いているので間違っていたらどなたかフォローお願いします・・


'WorkSheets1枚目モジュールへ
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(0, 0) <> "A2" Then Exit Sub
  If Target.Count > 1 Then Exit Sub
  
  Call Test(Target.Value)

End Sub

'標準モジュールへ
Option Explicit

Sub Test(Tgt As Variant)
  Dim Fi As Range
  Dim Ran As Range
  
  Set Ran = Worksheets(2).Range("A1:A100")
  
  Set Fi = Ran.Find(Tgt, , xlValues, xlWhole, , , False, False)
  If Not Fi Is Nothing Then
    Worksheets(3).Range("A65536").End(xlUp).Offset(1) _
    .Resize(, 5).Value = Fi.Resize(, 5).Value
    Fi.EntireRow.Delete xlUp
  Else
    MsgBox "ありません"
  End If
  
  Set Fi = Nothing
  Set Ran = Nothing
  
End Sub

【43478】Re:検索と削除
発言  わんこ好き  - 06/10/17(火) 1:22 -

引用なし
パスワード
   ▼ハチ さん:
回答ありがとうございます。
ハチさんに別コードと言われサンプル本頼りに”B3”にコード番号入れて行指定の所までやっとたどり着いた所です。それも、ハチさんのおかげと本当に感謝しています。
眠いところ作っていただいたサンプル早速試してみたいと思います。


Sub ()
  aa = ActiveSheet.Cells.Find(What:=Range("B3"), LookAt:=xlWhole, _
    SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Select
  cend = ActiveCell.Row
  Range("A1").Select
  MsgBox "このシートの指定行:" & cend
 
End Sub


>▼わんこ好き さん:
>
>自分はFindが好きなのでこんな感じでしょうか?
>WorkSheets1枚目A2セルにコードを入れると
>2枚目から3枚目へコピー、2枚目から削除。
>2枚目A1〜A100に検索されるコードが並んでいてA〜D列までをコピー&削除します。
>
>テストデータで試してみてください。
>
>*いちお、動きましたが半眠りで書いているので間違っていたらどなたかフォローお願いします・・
>
>
>'WorkSheets1枚目モジュールへ
>Option Explicit
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  If Target.Address(0, 0) <> "A2" Then Exit Sub
>  If Target.Count > 1 Then Exit Sub
>  
>  Call Test(Target.Value)
>
>End Sub
>
>'標準モジュールへ
>Option Explicit
>
>Sub Test(Tgt As Variant)
>  Dim Fi As Range
>  Dim Ran As Range
>  
>  Set Ran = Worksheets(2).Range("A1:A100")
>  
>  Set Fi = Ran.Find(Tgt, , xlValues, xlWhole, , , False, False)
>  If Not Fi Is Nothing Then
>    Worksheets(3).Range("A65536").End(xlUp).Offset(1) _
>    .Resize(, 5).Value = Fi.Resize(, 5).Value
>    Fi.EntireRow.Delete xlUp
>  Else
>    MsgBox "ありません"
>  End If
>  
>  Set Fi = Nothing
>  Set Ran = Nothing
>  
>End Sub

【43645】Re:検索と削除
お礼  わんこ好き  - 06/10/21(土) 2:44 -

引用なし
パスワード
   ▼ハチ さん:

ハチ さんのコードを参考にして、わたしなりにやっと解決できました。
ありがとうございました。
今後とも、また力添えくださいネ

6702 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free