ここから本文です

エクセルVBAマクロで複数検索で別シートに行コピーしたい

boyman193さん

2008/2/2211:19:42

エクセルVBAマクロで複数検索で別シートに行コピーしたい

内容は以下の通りです。

<顧客名簿-データシート>
---A ---B-----Z
1
2
3--営--年-----月
4--西--12-----01
5--西--12-----01
6--東--12-----01
7--東--12-----01
8--西--13-----01
9--西--13-----01
10-東--13-----01

3行目は項目名です。
営は営業所名の意味。
年12は平成12年の意味。
月01は1月度の意味。
予め月と年を基準に処理してます。

<DM作成-実行シート>
---A---B---Z
1
2
3--西--01---
4--営--年--月
5
6

3行目の各セルに検索条件入力。
最初の処理で顧客名簿のデータシートのA列から西を抽出Z列から01を抽出しDM作成ファイルの実行シートのA5に行コピー。
次に実行シートのA3を東に変更抽出し西のデータの最後尾に東のデータを行コピー。
2回検索処理になります。

Sub syori()
Dim cell(0) As String
Dim cell(1) As String
Dim rngtarget(1) As Range
Dim ws(1) As Worksheet
Dim mystr(0) As String
Dim mystr(1) As String
Dim myRange As Range

'処理セット
Set ws(0) = Workbooks("顧客名簿").Worksheets("データ")
Set ws(1) = Workbooks("DM作成").Worksheets("実行")

'検索文字列を変数に格納。
Set mystr(0) = ws(1).Range("A3").Value
Set mystr(1) = ws(1).Range("B3").Value

'A3が空欄の場合は、処理中断。
If cell(0) = Empty Then
MsgBox "検索値を入力してから再度実行してください"
Exit Sub
End If

'(A列から)セルを検索し、見つからない場合は中断。
Set rngtarget(0) = ws(0).Range("A:A").Find(what:=mystr, lookat:=xlWhole)
If rngtarget(0) Is Nothing Then
MsgBox "該当データが見つかりません"
Exit Sub
End If

'(Z列から)セルを検索し、見つからない場合は中断。
Set rngtarget(0) = ws(0).Range("Z:Z").Find(what:=mystr, lookat:=xlWhole)
If rngtarget(0) Is Nothing Then
MsgBox "該当データが見つかりません"
Exit Sub
End If

'データが必ずある箇所で書込み位置を決定。
Set rngtarget(1) = ws(1).Range("Z65536").End(xlUp).Offset(1, 0)

'検索した行を実行シートに行コピー。
With rngtarget(0).EntireRow
.Copy Destination:=rngtarget(1).EntireRow
End With

'オブジェクト変数初期化。
Erase ws
Erase rngtarget
End Sub

自分なりに作成しましたが文字数の関係で全くできてません。
1回目の処理後2回目の検索処理も併せて構文を教えて頂きたいと思います宜しくお願いします。

閲覧数:
12,432
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

la_fisher2さん

2008/2/2214:30:38

配列あたりのことって勉強しました?
宣言ところでもうアウトですよ。

配列にする必要性もないので普通に変数で書いたらどーです?

findも一度だけでは全て抽出できません。
まだまだ、いろいろ突っ込みどころ満載ですが。

フローを書きます。
1.データシートから西と01のレコードを全て実行シートへ転記する
2.実行シートの西を全て東へ置換
3.データシートの東を実行シートへ転記する。

大まかに書くとこれだけです。

ソースを見る限り初心者のようなので、
関数は使用せず、ループでいきましょう。

処理フロー
1.検索条件を変数に格納(営と月)
2.データシートを4行目から値がなくなるまでwhileで行ループ
3.データシートのA列が検索条件の同じか判定
3-1同じならその行のZ列が検索条件と同じか判定
あ)同じなら実行シートへ行ごと転記
転記する際に西を東と書き換えておく
異なれば、次の行へ
このループが終われば検索条件のデータ転記と東へ置換が終了

4、また、データシートを4行目から値がなくなるまでwhileで行ループ
5、西だったら、実行シートへ転記
Range("A65536").End(xlUp)
データの入ってる行は↑でわかります

これで問題なしだとおもいます。

この質問は投票によってベストアンサーに選ばれました!

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

Q&Aをキーワードで検索:

どうにかなりませんか、そのこだわり

みんなのアンテナ

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

ID/ニックネームを選択し、「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する