dポイントプレゼントキャンペーン実施中!

Sheet1~Sheet3を使用しています。
データの量は沢山あるので、質問を分かりやすくする為データの量を少なくしています。
転記したデータを上書きしたいと考えています。


---------現在できていること-------------

①Sheet1セル(G2)にデータaを入力する
②データaを検索値にしてSheet3からデータbを抽出
③Sheet1セル(I23)にデータbが表示される

I23=IFNA(VLOOKUP(G2,Sheet3!A2:B1000,2,FALSE),"")


④登録ボタンでデータbをSheet2最終行へ転記

Sub TEST1()

Dim S1 As Worksheet, S2 As Worksheet
Dim GYO As Long

Set S1 = Worksheets("Sheet1")
Set S2 = Worksheets("Sheet2")

' Sheet2の最終行を取得
GYO = S2.Range("$A$65536").End(xlUp).Row

' 最終行の次行を取得
If S2.Cells(GYO, 1).Value <> "" Then GYO = GYO + 1

' 現在の収容位置の下に転記
S2.Cells(GYO, 1).Resize(1, 1).Value = S1.Range("$I$23").Value

End Sub

---------------------------------------------------------

・やりたいこと

Sheet3データbをデータcに修正した場合、
Sheet2に登録転記したデータbが、データcに上書きされるようにしたいと考えています。
登録ボタンなどは使わずに、自動で上書きする方法はあるでしょうか。

順序イメージ
Sheet3データbをデータcに修正後

Sheet1セル(G2)にデータaを入力する

セル(I23)にデータcが表示される
I23=IFNA(VLOOKUP(G2,Sheet3!A2:B1000,2,FALSE),"")

Sheet2に登録されているデータbがデータcに自動で上書きされる。



入力フォームで修正する方法も考えましたが、
修正方法が分かりませんでした。


-----------入力フォーム版-------------

UserForm1

' 登録ボタンでSheet2へ転記
Private Sub CommandButton1_Click()

Dim S1 As Worksheet, S2 As Worksheet
Dim GYO As Long

Set S1 = Worksheets("Sheet1")
Set S2 = Worksheets("Sheet2")

' Sheet2の最終行を取得
GYO = S2.Range("$A$65536").End(xlUp).Row

' 最終行の次行を取得
If S2.Cells(GYO, 1).Value <> "" Then GYO = GYO + 1

' 現在の収容位置の下に転記
S2.Cells(GYO, 1).Resize(1, 1).Value = S1.Range("$I$23").Value

End Sub

' Sheet1セル(G2)にデータaを入力(セルI23にデータが表示される)
Private Sub TextBox1_Change() 

Range("G2")=TextBox1.Value

' (G2)に表示されたデータaを検索値にし、Sheet2へ転記されたデータの中からデータaを検索
Dim myRange As Range

Set My Range=("Sheet2").Range("A1:A1000").Find(What:=Range("G2").Value,LookAt:=xLWhole)

If Not myRange Is Nothing Then

myRange.Select

' 入力フォームにデータbを表示

TextBox2.Value=myRange.Offset(,i+1).Value

End If
End Sub
-----------------------------------------------------

ここまでやってみたのですが上書き方法が分かりません。
この方法ではSheet2でデータaが検索されず、Sheet1でデータaが検索されてしまいました。

入力フォームを使う場合の順序イメージ

データaを入力フォームに入力(セル(G2)にデータaが表示される)
Private Sub TextBox1_Change() 
Range("G2")=TextBox1.Value

Sheet3で修正されたデータがSheet1セル(I23)に表示される
I23=IFNA(VLOOKUP(G2,Sheet3!A2:B1000,2,FALSE),"")

Sheet2に登録転記されているデータbが自動でデータcに上書きされる

最後の部分がわかりません。
解決方法があれば教えていただきたいです。よろしくお願いします。

質問者からの補足コメント

  • 登録ボタンを押さないと、上書きは絶対にできないということでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/02/08 14:02

A 回答 (2件)

こんにちは



>Sheet2に登録転記したデータbが、データcに上書きされるようにしたいと考えています。
>登録ボタンなどは使わずに、自動で上書きする方法はあるでしょうか。
エクセルに自動で反映させたいなら、Sheet2には「Sheet3のデータ位置を参照」するような形式で転記しておくのが宜しいかと思います。
直接の参照でも良いですし、間接的な参照でも良いです。
(間接的な参照とは、例えば、キーとなる「データa」を追加して記録し、Sheet2はこの「データa」を基に参照するような設定にしておくなどを意味します)

人間が使う上では、ご提示の手順にうちの②③は意味があるのかも知れませんが、Sheet2を作成(追記)する上では直接は必要ないと思われます。
①→④だけでSheet2への追記は可能と思います。
(④のマクロで検索するか、あるいは「データa」も含めて追記するかなどが必要になりますが)

実際の内容が不明なので、具体的にどのような方法が適切なのかはわかりませんが、一番簡単そうに思えるのは以下のような解決法でしょうか。
④のSheet2への転記は文字通り「転記」だけの処理なのでしょうから、値を転記する代わりにSheet3への直接のセル参照を設定しておくようにすれば、ご質問のような内容がそのまま実現できることと思います。
(勿論、直接の参照でなくとも、間接的な参照でも同じことができるはずです。)
この回答への補足あり
    • good
    • 0

No1です。



本当になさりたいことが何なのか正確に把握できているわけではありませんが、どうも質問者様は仕組みや手順を固定的に考えすぎのように思います。
関数を利用なさっているので、エクセルには基本的な機能として「参照」の機能があることはご存知と思います。

No1の回答はこの機能を利用すれば「上書き」などしなくてもすむのではないかという意味のものです。
データを複製して、元のデータを変更したら複製も(上書きして)変更したいというご質問と思いますが、そんなことをするよりも、データを一元化しておけば「上書き」などする必要もなくなるのではということです。

>登録ボタンを押さないと、上書きは絶対にできないということでしょうか?
トリガー(きっかけ)がはっきりしていれば、自動化は可能と思います。
例えば、シート3のデータを変更し際にはChangeイベントが発生しますので、これをトリガーにできるなら処理の自動化は可能でしょう。

でも、わざわざ処理を行うよりもエクセルが自動的に整合をとってくれる仕組みにしておいた方が(処理も不要となって)シンプルで簡単と言えるのではないでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!