過去ログ

                                Page     807
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼検索したセルを判定してコピーをするには?  まき 03/2/25(火) 1:45
   ┗Re:検索したセルを判定してコピーをするには?  Jaka 03/2/25(火) 15:51
      ┗Re:検索したセルを判定してコピーをするには?  まき 03/2/25(火) 22:20
         ┗Re:検索したセルを判定してコピーをするには?  Jaka 03/2/26(水) 10:17
            ┗Re:検索したセルを判定してコピーをするに...  まき 03/2/27(木) 21:25

 ───────────────────────────────────────
 ■題名 : 検索したセルを判定してコピーをするには?
 ■名前 : まき
 ■日付 : 03/2/25(火) 1:45
 -------------------------------------------------------------------------
   こんばんは。
VBAを使いたいのですが、うまくいきませんでしたので
お力を貸していただきたいと思います。

まず、シート1には

 A B 
1 1
2 2
3 3
4 4
5 5

 といったように31までの数字が入力されています。

シート2には
 A B C D E F 
1 1 ○ ●   × △
2 4 ・・ ・・     ・・ 
3 5   ・・ ・・ ・・
4 8 ・・   ・・ ・・ ・・  

のようなリストがあります。(○●×△および・・は数字です)

このシート2のリストのA列をシート1のA列にある数字から検索して
シート2にある場合には、同じ行のB列からF列を
シート3にコピーするようにしたいと思います。

シート3にコピーする場合には規則があり、
この場合のシート2のA列の場合には、
 A B C D E F
1  ○ ●   × △
2
3
4
5
6
7  ・・ ・・     ・・ 
8
9    ・・ ・・ ・・
10

といったように、1*N+2行目(N=0を初期値としています)にコピーするようにし
該当する数字がない行は空白にしたいと考えています。

FOR〜NEXTでNの値を31まで繰り返し、
FINDで検索したセルを戻り値として、
OffsetでB列〜F列までを選択しコピーするようにコードを書きましたが、
本来空白行にしたいところに、
検索でTRUE判定のセルの行のB列からF列までの内容をコピーしてしまします。
これを希望どおりの結果を得られるようにする方法をご教授いただきたいと思います。

コードを書いたほうが分かりやすいと思いましたが、
今、手元にファイルがなく、
あいまいな記述で質問するのもどうかと思いましたので
上記のような質問の仕方となってしましましたが、
手順としては質問の内容をコードに置き換えた物です。
私のコードの書き方が悪いので、うまくいかないのですが・・・。

申し訳ございませんが、よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:検索したセルを判定してコピーをするには?  ■名前 : Jaka  ■日付 : 03/2/25(火) 15:51  -------------------------------------------------------------------------
   こんにちは。
はっきり言いまして、1*N+2行目の理論が全然解りませんでした。
解らないんで、適当に考えて下のように取りました。
1 * Range("A" & i).Value + 3
結果、お望みのSheet3配置にはなっていません。
この辺りを、頭の悪い第3者が読んでも理解できる程度に説明してください。

Sub kiki()
  Sh2End = Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row
  For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
    Sar = Application.Match(Range("A" & i).Value, _
       Sheets("Sheet2").Range("A1:A" & Sh2End).Value, 0)
    If IsError(Sar) = False Then
      WRo = 1 * Range("A" & i).Value + 3
      Sheets("Sheet3").Range("B" & WRo).Resize(, 5).Value = _
      Sheets("Sheet2").Range("B" & Sar).Resize(, 5).Value
    End If
  Next
End Sub
 ───────────────────────────────────────  ■題名 : Re:検索したセルを判定してコピーをするには?  ■名前 : まき  ■日付 : 03/2/25(火) 22:20  -------------------------------------------------------------------------
   ▼Jaka さん:
レスありがとうございます。
確かに私の質問を読み返してみると
理解しづらい説明でした。

シート3のコピーする位置ですが、
  A B C D E F
1(1) ○ ●   × △ ←シート2のA列1に該当する行
2
3{2}
4
5{3}
6
7(4) ・・ ・・     ・・ ←シート2のA列4に該当する行
8
9(5) ・・ ・・ ・・    ←シート2のA列5に該当する行
10

上の図のように変えてみました。
A列の( )でくくられた数字はシート2のA列にある数字です。
{ }でくくられた2と3はシート2にはありませんが、
もしあった場合には、図の行にB列以降がコピーされるという意味です。

つまり、シート2のA列で検索された数字が1であったときには,
(1−1)*2+1 = 1
となり、シート3の1行目にコピーをし、
4であれば
(4−1)*2+1 = 7
で、7行目、
10であれば19行目、20であれば39行目といった具合に
シート3へコピーをしたいということです。

1*N+2という式にしたのは、
FOR〜NEXTで繰り返しの処理をした時に
Nの初期値を 0 にしておけば、
戻り値が上の計算と同じ結果が求められるからです。

今日もいろいろ試していますが、
なかなか希望どおりの結果になりません。
再度お力を貸していただければ幸いに思います。
どうぞ、よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:検索したセルを判定してコピーをするには?  ■名前 : Jaka  ■日付 : 03/2/26(水) 10:17  -------------------------------------------------------------------------
   こんにちは。

最初の質問ではシート2の3行目のデータは、C〜D列までだったはずですが、Sheet3に貼り付けるときは、左の空白列は取り除いて張り付けるということですか?

それと、1行目も検索して貼りつけるんだったんですね?
項目名だと思って、無視してました。

それと実行シートをSheet1としていましたが、この辺りも?だったんで、どのシートからでも実行出来るように明確に記述しました。

前回のシートレイアウトと違っているので、やっぱりあいまいな質問になっているようですが..。
シート1
 A B 
1 1
2 2
3 3
4 4
5 5

シート2
 A B C D E F 
1 1 ○ ●   × △
2 4 ・・ ・・     ・・ 
3 5   ・・ ・・ ・・
4 8 ・・   ・・ ・・ ・・ 

今回、
シート3のコピーする位置ですが、
  A B C D E F
1(1) ○ ●   × △ ←シート2のA列1に該当する行
2
3{2}
4
5{3}
6
7(4) ・・ ・・     ・・ ←シート2のA列4に該当する行
8
9(5) ・・ ・・ ・・    ←シート2のA列5に該当する行 ← ここ左詰?????
10

左詰にしなくて良いのなら。

Sub kiki()
  Sh2End = Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row
  For i = 1 To Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row
    Sar = Application.Match(Worksheets("Sheet1").Range("A" & i).Value, _
       Worksheets("Sheet2").Range("A1:A" & Sh2End).Value, 0)
    If IsError(Sar) = False Then
      WRo = (Worksheets("Sheet1").Range("A" & i).Value - 1) * 2 + 1
      Worksheets("Sheet3").Range("B" & WRo).Resize(, 5).Value = _
      Worksheets("Sheet2").Range("B" & Sar).Resize(, 5).Value
    End If
  Next
End Sub
 ───────────────────────────────────────  ■題名 : Re:検索したセルを判定してコピーをするに...  ■名前 : まき  ■日付 : 03/2/27(木) 21:25  -------------------------------------------------------------------------
   こんばんは。
お返事遅れてすみません。
お答えいただいた方法でうまくきました。
ありがとうございました。

わかりづらい質問の仕方で
お答えするのが大変だったかと思いますが、
見捨てずにご返答いただいたおかげで、
解決することができました。

本当にありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 807