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ベストアンサー
- 回答日時:
こんにちは
>Sheet2に登録転記したデータbが、データcに上書きされるようにしたいと考えています。
>登録ボタンなどは使わずに、自動で上書きする方法はあるでしょうか。
エクセルに自動で反映させたいなら、Sheet2には「Sheet3のデータ位置を参照」するような形式で転記しておくのが宜しいかと思います。
直接の参照でも良いですし、間接的な参照でも良いです。
(間接的な参照とは、例えば、キーとなる「データa」を追加して記録し、Sheet2はこの「データa」を基に参照するような設定にしておくなどを意味します)
人間が使う上では、ご提示の手順にうちの②③は意味があるのかも知れませんが、Sheet2を作成(追記)する上では直接は必要ないと思われます。
①→④だけでSheet2への追記は可能と思います。
(④のマクロで検索するか、あるいは「データa」も含めて追記するかなどが必要になりますが)
実際の内容が不明なので、具体的にどのような方法が適切なのかはわかりませんが、一番簡単そうに思えるのは以下のような解決法でしょうか。
④のSheet2への転記は文字通り「転記」だけの処理なのでしょうから、値を転記する代わりにSheet3への直接のセル参照を設定しておくようにすれば、ご質問のような内容がそのまま実現できることと思います。
(勿論、直接の参照でなくとも、間接的な参照でも同じことができるはずです。)
No.2
- 回答日時:
No1です。
本当になさりたいことが何なのか正確に把握できているわけではありませんが、どうも質問者様は仕組みや手順を固定的に考えすぎのように思います。
関数を利用なさっているので、エクセルには基本的な機能として「参照」の機能があることはご存知と思います。
No1の回答はこの機能を利用すれば「上書き」などしなくてもすむのではないかという意味のものです。
データを複製して、元のデータを変更したら複製も(上書きして)変更したいというご質問と思いますが、そんなことをするよりも、データを一元化しておけば「上書き」などする必要もなくなるのではということです。
>登録ボタンを押さないと、上書きは絶対にできないということでしょうか?
トリガー(きっかけ)がはっきりしていれば、自動化は可能と思います。
例えば、シート3のデータを変更し際にはChangeイベントが発生しますので、これをトリガーにできるなら処理の自動化は可能でしょう。
でも、わざわざ処理を行うよりもエクセルが自動的に整合をとってくれる仕組みにしておいた方が(処理も不要となって)シンプルで簡単と言えるのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 特定ウインドウ...
-
PDFを(htmlのように)無限に縦...
-
jQueryを使いformでsubmitした...
-
正規表現で、特定の文字列を含...
-
スライドを最後の画像で止めたい
-
Base64に変換したHTMLの<script...
-
bxSliderで動画をスライドごと...
-
GASでスプレッドシートの一番上...
-
jQuery を外部ファイルから呼び...
-
bxsliderで最初に縦に複数表示...
-
チャットを作る
-
ワードでA3横の画面にして、文...
-
入力フォームの値をQRコードで...
-
MMS機能とは
-
Rを使う際、データを読み込む時...
-
以下のURL入れますか?皆さんは↓
-
画像のドットの部分が抜けてい...
-
Chinapost こよパズルどう動か...
-
非同期通信で掲示板を作る際の...
-
非同期通信を使うタイミングが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 特定ウインドウ...
-
PDFを(htmlのように)無限に縦...
-
入力フォームの値をQRコードで...
-
GASでスプレッドシートの一番上...
-
ワードでA3横の画面にして、文...
-
正規表現で、特定の文字列を含...
-
RPA(PowerAutomate)の実装について
-
以下のURL入れますか?皆さんは↓
-
jQueryを使いformでsubmitした...
-
自作の地図をグーグルマップの...
-
同一ページ移動時ハンバーガー...
-
非同期通信で掲示板を作る際の...
-
非同期通信を使うタイミングが...
-
1w=1j.s
-
c言語でペイントミノ
-
ダブルクリックと2回クリックの...
-
Ajaxでpostした内容のresponse...
-
Pythonを勉強する道のり
-
C言語のflagの使い方が分かりま...
-
Pythonのtkinterについて
おすすめ情報
登録ボタンを押さないと、上書きは絶対にできないということでしょうか?