[[20210305180830]] 『他シートのデータ更新について』(D) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『他シートのデータ更新について』(D)

他シートのデータ更新みついて
シート1のE4セルにIDが入力されており、シート1のK16セルの値を変更した際、シート2のA7セルより下にIDが入力されているのですが、A7以下の中からE4セルと同じIDを探し、その行のF列の値を同じように変更するマクロを教えていただけないでしょうか。

よろしくお願いいたします。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


■1
話がちょっとわかりません。
無理にとは言いませんが、何点か教えてください。

>シート1のE4セルにIDが入力されており
そのセルがIDの入力欄ということですよね?

>シート1のK16セルの値を変更した際、シート2のA7セルより下にIDが入力されているのですが
別途Changeイベントで、累積処理してるということですかね

>A7以下の中からE4セルと同じIDを探し
たぶん"シート2の"A7以下ですよね。(検索値であるE4セルは"シート1"でしょうけど)
この場合「E4セルと同じID」が複数あったりするケースはありませんか?
複数あった場合はどうするのですか?

>その行のF列の値を同じように変更
"同じように"とは何と"同じように"なのですか?

■2
おそらく流れとしては

 (1)シート1のE4の値を検索値としてFindメソッドを使い、シート2のA7〜A列最終行までを検索する
 (2)↑で見つかったら他にないか、FindNextメソッドを使い、シート2のA7〜A列最終行までを検索する
 (3)↑で見つかったら他にないか、FindNextメソッドを使い、シート2のA7〜A列最終行までを検索する
 (4)2〜3をくりかえして、該当する【セル】を全部見つけたら
 (5)見つけたセルが含まれる行全体と F列が交差するセルに対して【何かと同じ処理】を行う

みたいな感じにすればよいとおもいますが、現在詰まっているのはどの部分ですか?

(もこな2) 2021/03/05(金) 19:13


ありがとうございます。
■1
話がちょっとわかりません。
無理にとは言いませんが、何点か教えてください。
>シート1のE4セルにIDが入力されており
そのセルがIDの入力欄ということですよね?
→はい

>シート1のK16セルの値を変更した際、シート2のA7セルより下にIDが入力されているのですが
別途Changeイベントで、累積処理してるということですかね
→Changeイベントを理解してません。すみません。要はシート1とシート2に共通のIDがあり、シート1での変更内容をシート2に変更したい意図です。

>A7以下の中からE4セルと同じIDを探し
たぶん"シート2の"A7以下ですよね。(検索値であるE4セルは"シート1"でしょうけど)
この場合「E4セルと同じID」が複数あったりするケースはありませんか?
→シート2です。一意の値で重複はないですが、チェックとかもできるのでしょうか?それができたらすごいですね。

複数あった場合はどうするのですか?
>その行のF列の値を同じように変更
"同じように"とは何と"同じように"なのですか?
シート1の値の変更内容とおなじ内容に変更する意図です。

よろしくお願いいたします。

(D) 2021/03/05(金) 20:37


シート1のK16セルの値を変更
シート2のA列7行から最終行まででシート1のE4セルと同じ値を探す
該当行のF列の値をシート1のK16の値に変える

こんな感じかな?
(Sinking Time) 2021/03/05(金) 20:55


Sinking Time様 その通りです。
(D) 2021/03/05(金) 21:15

なるほど。
それなら、こういうことですかね。
    Sub てすと()
        Dim MyRNG As Range
        Dim 最終行 As Long

        Stop 'ブレークポイントの代わり

        '▼シート1のK16セルの値を変更
        Worksheets("シート1").Range("K16").Value = "テスト値"

        With Worksheets("シート2")
            最終行 = .Cells(.Rows.Count, 1).End(xlUp).Row
            If 最終行 < 7 Then
                MsgBox "データ無し"
                Exit Sub
            Else
                '▼シート2のA7〜A列最終行までで、シート1のE4セルと同じ値のセルを探す
                Set MyRNG = .Range("A7:A" & 最終行).Find(What:=Worksheets("シート1").Range("F4").Value, LookIn:=xlValues, LookAt:=xlWhole)
            End If

            If Not MyRNG Is Nothing Then
                '▼見つかった場合、当該行のF列セルの値をシート1のK16セルと同じにする
                .Cells(MyRNG.Rows, "F").Value = Worksheets("シート1").Range("K16").Value
            End If
        End With

    End Sub

(もこな2) 2021/03/05(金) 22:09


ありがとうございます。すごいですね。。。。

教えていただきたいのですが、 Stop 'ブレークポイントの代わりはないとエラーになるのでしょうか?

 Worksheets("シート1").Range("K16").Value = "テスト値"←テスト値の意味を教えてほしいです。

以上、よろしくお願いいたします。

(F) 2021/03/06(土) 13:02


>Stop 'ブレークポイントの代わりはないとエラーになるのでしょうか?
是非、ご自身で試してみてください。(そのほうが、より理解できると思うので)

>←テスト値の意味を教えてほしいです。
テスト用の値として「テスト値」という文字列を使用しました。

(もこな2 ) 2021/03/07(日) 12:34


 以下の箇所でアプリケーションの定義エラーがでました。
.Cells(MyRNG.Rows, "F").Value = Worksheets("シート1").Range("K16").Value

値を確認したところ、MyRNG.Rowsの値が行番号ではなく、MyRNG のままだからですかね?どう対応すれば良いのでしょうか。
(D) 2021/03/09(火) 18:12


 勘違いでしたらご容赦を。

 >MyRNG.Rows

 ↓?

 MyRNG.Row
(OK) 2021/03/09(火) 18:28

OK様 
ご指摘の通りでした。
ご回答ありがとうございました。

(D) 2021/03/09(火) 18:46


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.