質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

2回答

2105閲覧

特定ワークシートの特定セルの値が自動で変化したときの値取得

kohan

総合スコア9

Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/09/24 15:47

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("T2")) Is Nothing Then
Exit Sub
Else
v1 = Sheets("計算表").Range("T2").Value
Sheets("計算表").Range("T10").Value = WorksheetFunction.VLookup(v1, Sheets("10点").Range("A2:C33"), 3, False)
End If
End Sub
こちらのサイトの投稿を参考にして、以上のような構文で回すと、一回、一回、マクロを実行しないと値を取得してくれません。
T2の値の変化があれば、T10に 特定のワークシートのセルの値を返すと組んだつもりなのですが、
どうすれば、自動で値を取得するようになりますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/09/25 00:14

コードは「コードの挿入」で記入してください。
hatena19

2020/09/25 01:50

T10セルに =VLOOKUP(T2,'10点'!A2:C33,3,FALSE) と式を設定すれば同じことになりますが、それではダメな理由はなんでしょうか。
kohan

2020/09/25 15:23

今動かしたら、問題なく動きます、、エラーメッセージも出ないです。。 なんでだろ、さっきまでまじでエラーがでてデータがないって言われていたのに、、データ何もいじってませんが、、どうしてでしょうか、、 謎のエクセル怪奇現象、、
kohan

2020/09/25 15:25

VLOOKUP関数なら問題なく動いたのです。 なのにVBAではエラーでまくりで、今は、VBAでも普通に動いています。 なんでだろ、、
guest

回答2

0

?
Worksheet イベント (Excel)

Worksheet_ChangeイベントはWorksheet上で変化があった場合
場所関係なく発生します。(一回、一回、マクロ(VBA)が実行されます)

その為

VBA

1If Intersect(Target, Range("T2")) Is Nothing Then

Intersect メソッド (Excel)

この処理で「変更されたセル範囲にセル"T2"は含まれているか?」と問い合わせるのです。

ちなみにこちらの書き方ほうが今後拡張しやすです。

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 If not Intersect(Target, Range("T2")) Is Nothing Then 3 ' 変更範囲にセル("T2")が含まれている場合 4 v1 = Sheets("計算表").Range("T2").Value 5 Sheets("計算表").Range("T10").Value = WorksheetFunction.VLookup(v1, Sheets("10点").Range("A2:C33"), 3, False) 6 End If 7End Sub

投稿2020/09/24 23:22

編集2020/09/25 00:07
kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohan

2020/09/25 00:07

拡張できるところまでのプログルラムを教授くださり、本当にありがとうございます。 ①手動でT2に入力するとT20が変化する②マクロ実行ボタンで10が変化する のですが、 ここで、T2の値が別のマクロプログラムで自動で変化しても、T10が変化するようにしたいのですが、 そのようなことは可能なのでしょうか、、  ご教授頂きますようお願い申し上げます。
kuma_kuma_

2020/09/25 00:14

> ①手動でT2に入力するとT20が変化する > ②マクロ実行ボタンで10が変化する ?対象のワークシート自体のイベントですので特に「マクロ実行ボタン」を押さなくても実行されますよ? [開発]タブの[Visual Basic]を押下VBA編集画面で左側で対象シート(Sheet1)をダブルクリック 左「(General)」と書かれているのを[WorkSheet]に変更し 右を「Worksheet_SelectionChange」に変更 そこに今回の内容を記載するだけです。
kohan

2020/09/25 01:43

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("T2")) Is Nothing Then ' 変更範囲にセル("T2")が含まれている場合 v1 = Sheets("計算表").Range("T2").Value Sheets("計算表").Range("T10") = WorksheetFunction.VLookup(v1, Sheets("10点").Range("A2:C33"), 3, False) End If End Sub このままなのですが、実行すると、実行時エラー 1004 WorksheetFunction クラスのVLOOKUP プロパティを取得できません。というエラーメッセージが出てきます、、 なにがなにやら、わからない、、です。
kuma_kuma_

2020/09/25 02:30

ええとそこからですか... WorksheetFunction メソッド (Excel) https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheetfunction.vlookup 内容を見ると Sheets("計算表").Range("T2").Valueに入っている値(変数v1の中身) でVLookupは 「"10点"というシートの"A2"から"C33"の範囲のなかでA列が変数v1の中身と同じなら3列目(C列)の値を返しなさい。」という意味です。 今回"10点"というシートは作成されていますか? というかVBA(Excel)の基本のお話なんですが、そこは理解されているのですか?
kohan

2020/09/25 07:10

お返事ありがとうございます。 はい、10点シートは作成していて、同じブックに保存しています、、 「計算表」シートと、「10点シート」は存在していますです、、 一応、基本のきは理解できているような気がします、、
Usirow

2020/09/25 08:22

T2の値は正常ですか?VLookUpは検索が失敗するとエラーになります。 そのエラーですと、v1か検索範囲が不正である可能性が高いと思われます。
kohan

2020/09/25 13:37

皆様お返事くださり、大変感謝しております。  さて、状況ですが、VLOOKUP関数を使うと正常に動くけど、VBAだとエラーになるという状況です、なんでだろ、、10点シートもあるし、これからすると、おそらく値は正常で、ほかに何かの原因があるように思われるのですが、、もしかしたら、僕のエクセルがおかしくなってるのかな、、
kohan

2020/09/25 15:23

今動かしたら、問題なく動きます、、エラーメッセージも出ないです。。 なんでだろ、さっきまでまじでエラーがでてデータがないって言われていたのに、、データ何もいじってませんが、、どうしてでしょうか、、 謎のエクセル怪奇現象、、
guest

0

こちらで試したところ問題なく動作しています。
T2に入力したときのみElse側の処理が動いています。
まずはブレイクポイントを貼ったり、デバッグ文(MsgBoxやDebug.Print)を関数内冒頭に入れ、関数が呼び出されているのかをご確認ください。
呼び出されていない場合、対象としたいシートに置かれているのかをご確認ください。
標準モジュールに置いても動作はしません。

投稿2020/09/25 00:04

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問