|
▼みどり さん:
> >の2行が抽出されますが、
> >この2行を (Sheet2) の [5][6]行目に、Copyしたいということですか?
>
> ・・はい、このような結果が出ればいいなあと思っておりました!
「このような結果」と言われましても、そこがこちらにはよく分からな
いのです。
ぼくがあげた別Book(sheet2)レイアウト例では
列の構成が (Sheet1)とまったく同じで、
kanabun(Sheet2)も、日付列が【D列】にありましたが、
みどりさんのコードでは (Sheet2)から日付?を検索するとき
> Set 検査範囲 = Sheets("sheet2").Range(N1:N500)
> 行番号 = Application.WorksheetFunction.Match(Cel,検査範囲,0)・・←※ココ
と、【N列】を参照されてます。
このように、言葉ではすれ違いが起きます。できるだけ作業イメージを
共有化するためにも、
●当初の(転記前の) Sheet2 のレイアウトサンプルと、
●どのような結果になればよいのかの(転記後の)サンプルレイアウトを
みせていただけませんか?
> ・・・更新されてくるデータは極端に膨大な量になったり、少なかっ
> たり‥はないかと思われるので、
> もう、手作業で行の挿入・削除とかしようと思っております
> ・・・コードでかければ良いかとは思いますが
「手作業で行の挿入・削除とか」するのでいいです。
それを、もっと具体化してことばにしてみてください。
「行の挿入・削除」全作業工程について。
手作業での方法が適切であれば、それをコードに変換するのは
それほど難しいことではないです。
手作業で
(sheet1)のD列から ある条件での日付を抽出するとき、
オートフィルタ範囲は[D1]にカーソルをおいてAutoFilterを
開始されているようでしたら、その方法はまずいです。
[A1:N1]とか1行目見出し行を選択してAutoFilterを開始されて
いるようでしたら、その方法もまずいです。
D列を条件列にして抽出するなら、[D1:D列最終行]を
選択してから、フィルタをかけてください。
D列だけにAutoFilterをかけることに抵抗があるようでいたら、
データを含む「表全体」を選択してAutoFilterを開始してください。
これが、抽出されたデータをどこか他の場所へ転記しようとするとき
のポイントです。
ただ、今回は、
抽出された条件行を「まとめて」別シートにコピペするのではない
ようなので、オートフィルタで抽出するというより、
D 列を上から順に調べていって、
条件に合致する日付があったら その行を
別シートの条件にあう行に 転記する
(↑★実はこれがまた 大問題なのですが... )
を繰り返す For Each 〜Next
方式のほうがよいのではないか とも、考えられるのですが。
先ほどの★を付した問題ですが、
Match関数でN列を検索しておられますよね?
> Set 検査範囲 = Sheets("sheet2").Range("N1:N500")
▲ダブルクォートを追加
> 行番号 = Application.WorksheetFunction.Match(Cel,検査範囲,0)
これは、具体的には、
行番号 = WorksheetFunction.Match(20080809, 検査範囲, 0)
ということですが、検査範囲に 20080809 が2つあった場合、
2番目の 20080809 はどう検索するのですか?
Matchでヒットするのは(検索の型0のとき)いつも最初のセルですよ?
なお、
> ※ココで
> 「エラー5・プロシージャの呼び出し、または引数が不正です」
> とメッセージがでてきました。
というのは、Cel に何も入っていない、Cel が Nothing だったから
でしょう。
とりとめがなくなってきたので、とりあえず
1.転記前、転記後の(sheet2)のレイアウトのサンプルを見せてください
2.抽出元シート(sheet1) AutoFilterではなく、D列を順に条件にあう
行を(Sheet2)へコピーするとしたら、
手作業で、どうするか、
どの列をどの列にCopyするとかの 手順を具体化してください。
手作業のマクロ記録があればもっといいです。
3.(sheet2)のどこにコピーするか、
(sheet2)の対応する日付が複数あったばあい、手作業で何らか
の判断をして行を特定されていると思いますが、どのように
判断していますか? それを言葉にしてみてください。
たとえばですが、
はじめて(sheet1)から 20080809 の行を転記するときは、
Matchで(sheet2)の 最初にヒットした 20080809 の行に
転記する。
(sheet1)でふたたび 20080809 が見つかった場合は、
(sheet2)の前回ヒットしたセルより下の範囲に範囲を限定して
Match検索を行い、
20080809 が見つかればその行に転記する、
見つからなければ 最終行の下に1行 20080809という日付
ごと、転記する
というような、考え方(あなたが頭の中で判断して暗黙のうちに
やっていること)を明文化するということです。これが、
プログラムを作るときの仕様になります。
4.確認ですが、 20080809 とかは 数値ですか?
|
|