あなたの習慣について教えてください!!

sheet2のa1:a10には支店番号、b1:b10には支店名のデータが入力されています。sheet1のa1セルに支店番号を入力するとxlookup関数を用いて支店名がsheet1のb1セルに表示されるようになっています。そのsheet1の支店名が表示されているセルをクリックするとsheet2の検索元のセルに移動するvbaコードを教えてください。
chatgptに聞いても作動できるコードにたどり着きませんでした。

A 回答 (6件)

No5です。


No5のマクロはスピルされたセルには対応していませんでしたが、
スピルされたセルに対応したものが、こちらになります。
下記URLにアップしました。
https://ideone.com/FT9VYb
こちらの環境ではxlookupが動作しませんので、動作確認は行っていません。
期待した動作をしないかもしれませんので、ご了承ください。
    • good
    • 0
この回答へのお礼

再度のご回答ありがとうございます。
コードを見て驚きました。
ちょっと勉強しただけでは思いつかないレベルで大変恐縮です。
本当にありがとうございました。

お礼日時:2023/10/04 00:13

丁寧な補足ありがとうございました。


こちらでは、xlookupの機能を実現できませんので、回答を控えようかと思いましたが、事情が分かりましたので、参考資料として、回答致します。

こちらに投稿するとエラーになるので、下記URLにアップしました。
https://ideone.com/D0gBQY

当方、xlookupが実行できる環境を持っていませんので、正確な動作確認は行っておりません。

14行目に
str = Target.Formula2
がありますが、このあと、
str = "=XLOOKUP(A1,Sheet2!A1:A10,Sheet2!B1:B10)"
を一時的に挿入し、動作確認しました。
もし、エラーになる場合は、
str = Target.Formula2を
str = Target.Formula
に変えてみてください。
尚、スピル機能には対応できていません。
Sheet1のB1をダブルクリックしたケースが本件ですが、
例として、
Sheet1のC1にスピルされたデータがあり、C1をダブルクリックしても、
Sheet2のC1に移動はしません。

プログラムの大まかな流れは以下のようになっています。
1.ダブルクリックされたセルに以下の計算式があれば、処理する。
無ければ、終了。
=XLOOKUP(任意の文字列)

2.XLOOKUPの各パラメータを取得
第1パラメータは、検索用の文字列
第2パラメータは、検索範囲
Sheet2!A1:A10
のようになっている前提です。
第3パラメータは、取得範囲
Sheet2!B1:B10
のようになっている前提です。
(このシート名は第2パラメータのシート名と同じ前提です)
第4パラメータ以降は、無視します。
(検索は完全一致の前提です)

3.第1パラメータの文字で、第2パラメータのシートの、検索範囲を
検索します。
(例では Sheet1のA1:A10を第1パラメータの文字で検索します。)

一致したセルがあった場合、
第2パラメータのシートの下記セルに移動します。
セルの行:一致したセルの行番号と同じ行
セルの列:第3パラメータの取得範囲の最初の列
(例 Sheet2!B1:D10のように定義されていた場合、B列)
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳ありません。
大変親切にご回答いただきありがとうございました。
諦めかけていたので助かります。

お礼日時:2023/10/04 00:12

No3です。


>目的は達成するのですが、どうしてもxlookup関数の引数を利用したコードを知りたいです。

申し訳ございません。
当方、xlookupが動作するexcelを持っていませんので(当方office2019です)、マクロからxlookupを呼び出すことはできません。
その為、マクロからxlookupを呼び出すことを期待されているのでしたら、私の方からは回答できません。

参考までにお伺いしたいのですが、
何故、「xlookup関数の引数を利用したコード」を知りたいのでしょうか。
その理由、背景などを提示していただけると、良い回答が得られやすくなるかと思います。
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。
例示として支店番号、支店名のデータを掲載しておりますが、実務でエクセルシート3枚のデータからxlookup関数を用いてデータ検索結果反映シートに転記させるファイルを扱っております。
 列数としてはデータシート毎に15列ぐらいあります。それぞれのシートから検索結果反映シートに20項目程度xlookup関数を用いて表示したい項目を転記しております。
 検索結果反映シートには甲支店の来店者数、預金残高、貸出率、回収率、ノルマ達成率等のデータがそれぞれのシートから転記されているイメージです。 

 その転記されている元データを修正するため、検索結果反映シートに転記されているセルをダブルクリックすることで元データに瞬時に移動し、修正作業を容易にしたいという意図です。

 意図が伝わりにくくて申し訳ありません。

 現在、元データを修正するため、元データシートをクリックして該当支店の行を目視で検索し、そこから該当項目が表示されている列を目視で探すということをしております。
 そこで、xlookup関数を用いて検索しているのであれば、その引数を利用して修正作業が容易になるvbaコードがあるのではないかと考えるに至ったところです。

お礼日時:2023/09/25 20:31

>ダブルクリックであればどのようなコードになるのか教えてもらえると助かります!



Sheet1のシートモジュールに以下のマクロを登録してください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim code As String
Dim wrow As Long
If Target.address <> "$B$1" Then
Exit Sub
End If
code = Range("A1").Value
With Worksheets("Sheet2")
For wrow = 1 To 10
If code = .Cells(wrow, 1).Value Then
.Activate
.Cells(wrow, 2).Select
Exit Sub
End If
Next
End With
End Sub
    • good
    • 0
この回答へのお礼

具体的なコードを提供いただきありがとうございます!
目的は達成するのですが、どうしてもxlookup関数の引数を利用したコードを知りたいです。
よろしくお願いいたします

お礼日時:2023/09/25 02:42

No1です。



>ダブルクリックであればどのようなコードになるのか~
VBAで行うのなら、シートに設定されている関数はあまり関係なく、独自に再度検索をして、該当セルをアクティブにすることになると思います。

1)ダブルクリックのイベントで処理を行うにはこんな感じ
https://vba-create.jp/vba-event-doubleclick/

2)対象セルを検索するには、
 ・A1セルの値をFINDメソッドで検索するか
 ・シート関数のMACH関数を利用して検索する
方法が考えられます。
(プリミティブにループでセル範囲を比較しても良いです)
https://learn.microsoft.com/ja-jp/office/vba/api …
https://learn.microsoft.com/ja-jp/office/vba/api …

3)検索したセルをアクティブにする
https://www.officepro.jp/excelvba/cell_select/in …

という流れで、実現できると思います。
    • good
    • 0
この回答へのお礼

再度の投稿ありがとうございます。
サイトを拝見しましたが、自分には難易度が高かったようです。

お礼日時:2023/09/25 02:44

こんにちは



セルのダブルクリックであれば、VBAのイベントに用意されているのでさほど難しくはありませけれど、シングルクリックを検知するのにはwin APIを利用することが必要になるので、それなりに面倒な処理になります。
どうしてもご質問文のままを実現したければ、以下のような方法によることになるでしょう。
https://excel-excel.com/tips/vba_151.html
https://liclog.net/mouse_event-function-vba-api/
※ 上記はクリックの検知だけなので、その位置からセル位置を割り出して・・と処理を行うことになります。


一方で、ご質問の目的を達成できれば他の方法でも良いのであれば・・
HYPERLINK関数を利用して、リンク先を検索先のセルに指定することでも可能と思います。
具体的には、Sheet1のB1セルに、
=HYPERLINK("#Sheet2!B"&MATCH(A1,Sheet2!A1:A10,0), VLOOKUP(A1,Sheet2!A1:B10,2,0))
の数式を入力することでできるでしょう。
※ 当方の環境ではXLOOKUPが使えませんので、上式はVLOOKUPに変えてあります。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
ダブルクリックであればどのようなコードになるのか教えてもらえると助かります!

お礼日時:2023/09/24 15:02

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


おすすめ情報