1

私は Excel の VBA コードを使い始めたばかりなので、これが基本的なように見える場合は申し訳ありません。次のことをしたい...

「Index」というシートのJ列(J5~J500)に値「Y」があるかどうかを確認します。これが私の状態です。次に、条件に一致する行の列 C のみを既存のシートと別の位置のセルにコピーします。つまり、インデックス値 C3 から I3 がコピーされた場合、それらを A5 から G5 に貼り付けたいと思います。私がいるアクティブなシート、Sheet2と言います。

インデックスシートに変更があれば自動でデータをコピーしたいのですが、 できれば。新しいデータがインデックスに追加された場合、どのように機能しますか?

ここでたくさん検索した後、これを見つけまし。この質問から、要件に合わせてコードを少し変更しました。これにより、条件を満たす行全体がマクロを実行するシートにコピーされますが、特定の列のみを選択する方法に困惑しています。

Sub CopyRowsAcross() 

Dim i As Integer 
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Index") 
Dim ws2 As Worksheet: Set ws2 = ActiveSheet 

For i = 2 To ws1.Range("B65536").End(xlUp).Row 
If ws1.Cells(i, 2) = "Y" Then ws1.Rows(i).Copy ws2.Rows(ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row + 1) 
Next i 

End Sub 

どんな助けでも大歓迎です

ジョン

編集: モックアップを作成し、https://docs.google.com/file/d/0B0RttRif9NI0TGl0N1BZQWZfaFk/edit? usp=sharing にあります。

A列とB列はコピー時に必要ありません.どちらもJ列です.これは私が条件を確認するために使用しているものです.

これまでご協力いただきありがとうございました。

4

2 に答える 2

0

これは、私の元の投稿に似た、よりエレガントなソリューションです。唯一の違いは、Cells 参照が正しいシートに限定されていることです。

Sub try3()
Dim i, x As Long
Dim Y as String
Dim ws1 As Worksheet: Set ws1 = ActiveWorkbook.Sheets("Index")
Dim ws2 As Worksheet: Set ws2 = ActiveWorkbook.Sheets("Sheet2") 'active sheet can get  you into trouble

 x = 5
 Y = "Y"
 For i = 2 To 500:
    If ws1.Cells(i, 10) = Y Then
       Range(ws2.Cells(x, 1), ws2.Cells(x, 7)).Value = Range(ws1.Cells(i, 3), ws1.Cells(i, 9)).Value
      x = x + 1
    End If
 Next i
End Sub

于 2013-03-14T02:06:43.223 に答える
0

それはいくつかの古いコードを借りています。これで、使用された最後の行をチェックしています。500 だけに行きたいことがわかっている場合は、整数を使用できます。

Sub try2()

  Dim i, Y, x As Long 'you didn't mention what Y was, so it could also be a string.
  Dim ws1 As Worksheet: Set ws1 = ActiveWorkbook.Sheets("Index")
  Dim ws2 As Worksheet: Set ws2 = ActiveWorkbook.Sheets("Sheet2") 'active sheet can get  you into trouble
  Dim Ary1 As Range
  Dim ary2 As Range


   x = 5
   Y = "Y" 'for the sake of argument
         'For i = 2 To ws1.Range("B65536").End(xlUp).Row   This is if you are looking for the last row in MsOf2003 or earlier.  If you know that you are only looking to row 500, then hard code the intiger.
   For i = 2 To 500:
        'If ws1.Cells(i, 2) = "Y" You mentioned you were interested in column J, so we need to change the 2 to 10 (Column B to Column J)
         If ws1.Cells(i, 10) = Y Then
            ws1.Activate
            Set Ary1 = Range(Cells(i, 3), Cells(i, 9))
            ws2.Activate
            Set ary2 = Range(Cells(x, 1), Cells(x, 7)) 'avoid copying all together you don't need it
            ary2.Value = Ary1.Value
            x = x + 1
         End If
   Next i
  End Sub

私はこれをコンパイラではなく電話で書いているので、そこに構文エラーがある可能性があり、これは疑似 VBA コードと見なされるはずです。後で確認して、問題が解決したかどうかを確認できます。上書きしたくない場合は、どこに置くかに注意する必要があります。

于 2013-03-13T21:30:40.237 に答える