Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7全般 : Excel 2010)
条件に合致した文字列検索とコピー
投稿日時: 18/06/26 22:54:59
投稿者: seint-takemaru

VBA初心者です。
やりたい事は、特定の文字列を検索し、条件に合致した文字列の行を別シートに
 コピーしたいのです。
  
具体的には、下記の表で、商品番号の列にある文字列の中から、「456」と「789」が
 あるかを検索して、もし、「456」と「789」が存在したら、その行(※1)を別のシート(※2)にコピー
 したい。
  
※1 行をコピーする際に、列の範囲を指定したい。
      商品番号〜数量までのデータをコピーしたい。
※2 貼り付け先のシートは既に作成済で、シート名は「処理対象」とする
 
 

商品記号	商品名称	商品番号	数量	生産地域
 A	    キャベツ	123	     2	富山県
 B	    にんじん	456	     1	島根県
 C	     なす   	789	     4	千葉県
 F	    にんじん	456	     3	福島県
 D	    はくさい	675	     8	徳島県
 G	     なす	    789	     7	秋田県

 
  
   
   
すみませんが、ご教示お願いいたします。

回答
投稿日時: 18/06/26 23:47:02
投稿者: WinArrow
投稿者のウェブサイトに移動

VBAでなければいけないのですか?
 
一般機能の中に
「オートフィルタ」とか「フィルタオプション」という機能があります。
 
例えば、
「オートフィルタ」では、一度に複数の検索が可能です。
ヒットした行以外が非表示になります。
その範囲を選択して、別シートに複写することができます。

投稿日時: 18/06/27 08:11:55
投稿者: seint-takemaru

ご返信ありがとうございます。
 
イメージとしては、シート上にコマントボタンを配置し、実行したら、
一瞬で上記のことを実現させたいと思っています。
 
配列変数、もしくは、Instr関数等を使用して実現できればと思うのですが、
どのようにコードを記述したらよいのかがわかりません。
 
よろしくお願いします

回答
投稿日時: 18/06/27 09:51:31
投稿者: WinArrow
投稿者のウェブサイトに移動

>どのようにコードを記述したらよいのかがわかりません。
 
コードの作成依頼は、禁止されています。
 
マクロの記録で
紹介した「オートフィルタ」の操作を実行すれば
取り敢えずのコードが自動作成されます。
 
「取り敢えず」と書きましたのは、
操作そのものをコードにしてあるので、
例えば、
「検索キー」の値を可変化する
複写先のセルの位置を可変化する
等、に対応するには、カスタマイズが必要ということです。

回答
投稿日時: 18/06/27 09:53:39
投稿者: Suzu

こんにちは。
 
質問者さんの意図を図りかねています。
 
得たい結果は判っています。
 
そこに至る手法を オートフィルター/オートフィルターの提案に対し
 

引用:
配列変数、もしくは、Instr関数等

 
等??
オートフィルター/フィルターオプションを否定して 等 と言われますと、、、
配列変数(?)または、InStr関数 を使用した手法を学びたいという事でしょうか?

回答
投稿日時: 18/07/18 17:48:54
投稿者: TAKA君

はじめまして。
該当データが必ず一件しかないのならFindメソッドで出来ます。
 

Sub 回答例1()
    '探す対象はWHAT := ○○ の中身を変えればOK
    Dim 表 As Worksheet, 処理 As Worksheet, Fc As Range
    Set 表 = ThisWorkbook.Sheets("表")
    Set 処理 = ThisWorkbook.Sheets("処理対象")
    
    Set Fc = 表.RAGNE("C:C").Find(WHAT:=456)
    If Fc Is Nothing Then
        MsgBox "みつかりません"
    Else
        処理対象.Range("A2:B2") = 表.Range(表.Cells(Fc.Row, "C"), 表.Cells(Fc.Row, "D")).Value
    End If
End Sub

複数あるならオートフィルタメソッドを使います。
Sub 回答例2()
    '探す対象はCriteria1 := ○○ の中身を変えればOK
    Dim 表 As Worksheet, 処理 As Worksheet, Fc As Range
    Set 表 = ThisWorkbook.Sheets("表")
    Set 処理 = ThisWorkbook.Sheets("処理対象")
    
    With 表.Range("A1")
        If 表.AutoFilterMode Then .AutoFilter
        .AutoFilter Field:=3, Criteria1:=Array(456, 789), Operator:=xlFilterValues
        .CurrentRegion.Copy 処理.Range("A2")
        .AutoFilter
    End With
    
End Sub

参考になれば幸いです。
わからないことあれば聞いてください。

回答
投稿日時: 18/07/18 17:50:52
投稿者: TAKA君

あ、コピーする範囲を指定するなら回答例2はもう一手間いりますね。
返事を待ちます

トピックに返信