- ベストアンサー
VBAデータを戻すコード
- VBAを使用して、変更された行のデータを検索し、特定の条件を満たす場合に他のシートにコピーするコードを作成したいです。
- シート1と他のシートの特定の範囲のデータを見比べて、条件に合致するデータをコピーして貼り付けたい場合、VBAを使用することが可能です。
- VBAを使えば、特定の条件を満たすデータの検索とコピーを自動化することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
シート1のシートモジュールに以下のコードで試してみてください。 シート名は実際のシート名からコピペしてください。 一致するものが一か所しかない場合 Private Sub Worksheet_Change(ByVal Target As Range) If Application.Intersect(Target, Range("B1:C200")) Is Nothing Then Exit Sub End If Application.EnableEvents = False Dim Ws(1) As Worksheet Dim mRng As Range, i As Long Set Ws(0) = Worksheets("シート2") Set Ws(1) = Worksheets("シート3") For i = LBound(Ws) To UBound(Ws) With Ws(i) Set mRng = .Range("A1:A100").Find(What:=Cells(Target.Row, "A").Value, LookIn:=xlValues, LookAt:=xlWhole) If Not mRng Is Nothing Then Rows(Target.Row).Copy .Rows(mRng.Row) End If End With Next Set Ws(0) = Nothing Set Ws(1) = Nothing Application.EnableEvents = True Cells(Target.Row, Target.Column).Select End Sub 複数一致する可能性がある場合 Private Sub Worksheet_Change(ByVal Target As Range) If Application.Intersect(Target, Range("B1:C200")) Is Nothing Then Exit Sub End If Application.EnableEvents = False Dim Ws(1) As Worksheet Dim mRng As Range, i As Long Set Ws(0) = Worksheets("シート2") Set Ws(1) = Worksheets("シート3") For i = LBound(Ws) To UBound(Ws) With Ws(i) For Each mRng In .Range("A1:A100") If mRng.Value = Cells(Target.Row, "A").Value Then Rows(Target.Row).Copy .Rows(mRng.Row) End If Next End With Next Set Ws(0) = Nothing Set Ws(1) = Nothing Application.EnableEvents = True Cells(Target.Row, Target.Column).Select End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
回答者を道具に使うやりかただ。 死でに回答は出ているし、VBA全体ではありふれた時候と思う。 シート、セルを質問者の売位に当てはめて、特定して当てはめたコードぐらい自分で書くこと。 エクセルVBA学習でも上級の、イベントという仕組みを 使うことになろうが、使うにはそれなりに心得て使わないと危険。 特に他人が操作するシートなどの場合。 今後もVBAを使う予定なら、自分でも勉強すべきだ。 >データを戻すコードが分からない為質問させていただきます。 コードのことではなくて、エクセル(VBA)でできる・提供されている機能や、仕組みも勉強してないと思う。分っておれば、もっとピンポイントの限定した書き方の質問になるはず。 「何々したら」XXしたい、は、思いつく「何々」のケースは沢山あって、初心者でも頻繁に思い浮かぶが、直ぐ上はクラスというものを勉強しないと、またさらに先もあり、通常人はVBAでは出来ないことも多いと思う。
補足
回答とはまったく違うことは求めていません。 ヒントや回答の糸口になりそうなことを 回答するわけでもなく ただ単に勉強しろ等説教をして 自分が気持ちよくなるために回答をするのは これから控えてください。
補足
ご回答ありがとうございます。 一度このコードで確かめてみて 勉強させていただきます。