[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/12/13(Tue) 18:19
投稿者名:ふじた
Eメール:
URL :
タイトル:
条件にあったセルのコピー&ペースト
はじめまして。初心者のふじたと申します。どうしても上手くいかないので参りました。
条件にあったセルをコピーして別シートにペーストという動作をFor..Nextを用いて作ってみたつもり
なんですが、上手くいきません。以下に書いたものを載せますのでご鞭撻のほどよろしくお願いいた
します。
 
Sub 抽出()
  If MsgBox("要求事項の抽出を行いますか?", vbYesNo) = vbYes Then
  
     x = Application.WorksheetFunction.CountA(Range(Cells(8, 2), Cells(127, 2)))
     y = x * 6
     z = Worksheets("マトリックス").Cells(128, 14)
  
   For i = 8 To y + 7
   For j = 9 To 9 + (z - 1)
      Worksheets("点数").Cells(i, 14) = (Worksheets("点数").Cells(i, 13
)) / (Worksheets("点
数").Cells(8, 15))
      p = Worksheets("点数").Cells(i, 14)
  
     If p >= 2 And p <= 10 Then
        
      Sheets("マトリックス").Select
      Range(Cells(i, 3), Cells(i, 13)).Select
      Selection.Copy
      Sheets("要求事項").Select
      Range(Cells(j, 4), Cells(j, 14)).Select
      ActiveSheet.Paste
    
     End If
   Next
   Next
      
     Worksheets("要求事項").Select
  
   End If
    
End Sub

投稿時間:2005/12/14(Wed) 10:26
投稿者名:ダンボ
Eメール:
URL :
タイトル:
上手な質問方法
ふじたさん、こんにちは

1.投稿するときは「コード投稿モード」にしたほうが良いです。段組が見えないのでコードを読む気にな
りません。
2.「上手くいきません」だけでは問題の核心が掴めません。
 ・上手くいかない場合のワークシート…具体例
 ・どうなって欲しいか…要求仕様
 ・だげどこうなってしまう…問題点
 ・コードのここら辺が臭そう(理解できない)…ヒント/質問者のスキル/質問者の熱意
という流れで質問すると回答がつき易いです。

投稿時間:2005/12/14(Wed) 12:00
投稿者名:ふじた
Eメール:
URL :
タイトル:
Re: 上手な質問方法
ダンボさん、ありがとうございます。
うまく説明できませんが書かせていただきました。
上手くいかない内容としては、コピーしたセルを別シートにペーストすることが出来るのですが、条件
にあったセルが2つ以上になると別シートにペーストした際に上書きしてペーストしてしまうようで
す。本当は、別シートの(例えば)C8〜M8にペーストした次はC9〜M9に…という風にしていき
たいんです。For...Next文でiとfをループさせているのですが、そこが上手くかけていないのだと思う
んです。どうでしょうか?


Sub 抽出()
  If MsgBox("要求事項の抽出を行いますか?", vbYesNo) = vbYes Then
  
     x = Application.WorksheetFunction.CountA(Range(Cells(8, 2), Cells(127, 2)))
     y = x * 6
     z = Worksheets("マトリックス").Cells(128, 14)
  
   For i = 8 To y + 7
   For j = 9 To 9 + (z - 1)
      Worksheets("点数").Cells(i, 14) = (Worksheets("点数").Cells(i, 13)) / (Worksheets("点
数").Cells(8, 15))
      p = Worksheets("点数").Cells(i, 14)
  
     If p >= 2 And p <= 10 Then
        
      Sheets("マトリックス").Select
      Range(Cells(i, 3), Cells(i, 13)).Select
      Selection.Copy
      Sheets("要求事項").Select
      Range(Cells(j, 4), Cells(j, 14)).Select
      ActiveSheet.Paste
    
     End If
   Next
   Next
      
     Worksheets("要求事項").Select
  
   End If
    
End Sub

投稿時間:2005/12/14(Wed) 13:10
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re:条件にあったセルのコピー&ペースト
ずっと良い質問になりましたね。

>      z = Worksheets("マトリックス").Cells(128, 14)

がポイントじゃないかな?これだとzは"マトリックス"シートの(128, 14)のセルの中にある値です。
で、このプログラム中でzは書き直していないからfor jループでは常に同じ場所にペーストして
いますよね。

投稿時間:2005/12/14(Wed) 13:29
投稿者名:ふじた
Eメール:
URL :
タイトル:
Re^2:条件にあったセルのコピー&ペースト
> ずっと良い質問になりましたね。
ありがとうございます

> で、このプログラム中でzは書き直していないからfor jループでは常に同じ場所にペーストして
> いますよね。
zがみそですか。ご指摘の通りzは条件にあったセルの数なんです。別シートにペーストする際にFor f
ループの終わりの値を設定したいなと思ってああ書きました。ですが、同じところでペースト…。
どういう風に訂正したら希望の動作をしてくれるのでしょうか?

投稿時間:2005/12/14(Wed) 17:08
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3:条件にあったセルのコピー&ペースト
> zがみそですか。ご指摘の通りzは条件にあったセルの数なんです。別シートにペーストする際に
For f
> ループの終わりの値を設定したいなと思ってああ書きました。ですが、同じところでペースト…。
> どういう風に訂正したら希望の動作をしてくれるのでしょうか?
For fループではなく、For jループですよね?

i = 8 のとき For j = 9 To 9 + z - 1
i = 9 のとき For j = 9 + z To 9 + z + z - 1
i = 10 のとき For j = 9 + z + z To 9 + z + z + z - 1
となればいいので
For j = 9 + z * (i - 8) To 9 + z * (i - 7) - 1
です。

投稿時間:2005/12/14(Wed) 17:36
投稿者名:ふじた
Eメール:
URL :
タイトル:
Re^4:条件にあったセルのコピー&ペースト
LESIAさんありがとうございます。

> For fループではなく、For jループですよね?
すみません、間違えました。

> i = 8 のとき For j = 9 To 9 + z - 1
> i = 9 のとき For j = 9 + z To 9 + z + z - 1
> i = 10 のとき For j = 9 + z + z To 9 + z + z + z - 1
> となればいいので
> For j = 9 + z * (i - 8) To 9 + z * (i - 7) - 1
> です。

これでやってみたところ、重なってペーストされてしまうという問題は解消されました。ありがとうご
ざいます。
しかし、For jの中にiも含まれているためか、条件にあうセルまでに代入されるiの数分、別シートのセ
ルに空白ができてしまいました。
また、ペーストされたセル群はどれも3列ずつペーストされてしまっています。

For jの中にiを用いない方法はないでしょうか?
また3列ずつペーストされてしまう原因がわかりません。
なぜでしょうか。よろしくお願いします。

投稿時間:2005/12/16(Fri) 04:41
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^5:条件にあったセルのコピー
> For jの中にiを用いない方法はないでしょうか?
> また3列ずつペーストされてしまう原因がわかりません。
> なぜでしょうか。よろしくお願いします。
実際のデータがどうなっているのかわからないので、何とも言えませんが
> y = x * 6
変数yが変数xを6倍してる事や、ペーストする条件が
> If p >= 2 And p <= 10 Then
というのが関係しているのではないでしょうか?

とりあえず、ステップ実行してどういう動きをしているのかを
確認してみてください。

投稿時間:2005/12/16(Fri) 09:54
投稿者名:ふじた
Eメール:
URL :
タイトル:
Re^6:条件にあったセルのコピー
> とりあえず、ステップ実行してどういう動きをしているのかを
> 確認してみてください。

分かりました。ありがとうございます。
しかひステップ実行というものをしたことがないのでやり方がわかりません。
ヘルプ等調べてみたのですが見つかりませんでした。
どのように実行すればいいのでしょうか?

投稿時間:2005/12/16(Fri) 10:43
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^7:条件にあったセルのコピー
> しかひステップ実行というものをしたことがないのでやり方がわかりません。
> ヘルプ等調べてみたのですが見つかりませんでした。
> どのように実行すればいいのでしょうか?

まず最初に、Sub 抽出() にカーソルを合わせて、F9を押してブレークポイントを設定します。
その次に、プログラムを実行し、Sub 抽出() が呼び出されると、ブレークポイントのところで
プログラムが止まるので、F8で1行ずつ実行していってください。
その時、変数等の上にカーソルを持っていくと、その値が表示されますので、確認しながら
やってみてください。

投稿時間:2005/12/16(Fri) 12:48
投稿者名:ふじた
Eメール:
URL :
タイトル:
出来ました!
> その時、変数等の上にカーソルを持っていくと、その値が表示されますので、確認しながら
> やってみてください。

ありがとうございます!やったらわかりました。For iの中にFor jがあったのでいけなかったようで
す。そこで、For j文をなくし、下記のように変更しました。
無事、動作しました!ありがとうございました!

Sub 抽出()
  If MsgBox("要求事項の抽出を行いますか?", vbYesNo) = vbYes Then
  
     x = Application.WorksheetFunction.CountA(Range(Cells(8, 2), Cells(127, 2)))
     y = x * 6
     j = 9
    
   For i = 8 To y + 7
      
      Worksheets("点数").Cells(i, 14) = (Worksheets("点数").Cells(i, 13)) / (Worksheets("点
数").Cells(8, 15))
      p = Worksheets("点数").Cells(i, 14)
  
     If p >= 2 And p <= 10 Then
        
      Sheets("マトリックス").Select
      Range(Cells(i, 3), Cells(i, 13)).Select
      Selection.Copy
      Sheets("要求事項").Select
      Range(Cells(j, 4), Cells(j, 14)).Select
      ActiveSheet.Paste
      j = j + 1
     End If
  
   Next
      
     Worksheets("要求事項").Select
  
   End If
    
End Sub

投稿時間:2005/12/16(Fri) 15:10
投稿者名:マルチ
Eメール:
URL :
タイトル:
Re: 条件にあったセルのコピー&ペースト
解決されたようですが、花ちゃんさんのサイトではマルチポストは禁止されています。
hhttp://www.bcap.co.jp/hanafusa/hazimeni.htm
を読んでください。