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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

2回答

467閲覧

VBA:値が一致する場合、その値の横に値が一致する別シートへのリンクを作成

saito.kaz

総合スコア76

VBA

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

0グッド

0クリップ

投稿2018/08/01 06:52

編集2018/08/01 07:15

有識者 様

いつもお世話になります。
Excelのマクロの使い方について、質問があり投稿致しました。

下記が行いたい事となりますが、過去の回答を確認しても上手くExcel上で実現できず、
再度ご質問させて頂く流れとなりました。
お手数ですが、マクロについての有識者がおりましたら回答頂けないでしょう。

アウトプットのイメージとして、サンプルファイルを用意致しました。
中身をご確認いただければわかる通り、事前にSheet1とSheet2が用意されており、
データが事前に入っております。
(リンク列は空白。)

その後、Sheet1にリンク作成ボタンを配置し、そこを押下すると、
Sheet1を基準に、名称列にある値がSheet2の値列に同一の値がある場合、
リンクマーク▼を作成し、マークをクリックすると、Shee2の同一の値のセルに飛べるようにしたいです。

例えば、下記の例ですと、Sheet1)の名称1は、Sheet2)の名称1と一致するので、
Sheet1)のリンク列に▼マークを作成し、それをクリックすると、Sheet2)へのリンクが
飛べるようになります。

*同様にSheet2からSheet2へ飛べるようにしたいです。Sheet2の値列は一部セルがマージされております。

Sheet1)
No リンク 名称 値1 値2
1 ▼ 名称1 12243 oiref
2 ▼ 名称2 242 efhn
3 ▼ 名称3 23254 dsfvn
4 ▼ 名称4 3 23254
5 ▼ 名称5 35 3
6 名称6 23243 35
7 ▼ 名称7 243 23243

Sheet2) *値列はマージしているケースがあります。また投稿形式の都合上、リンク列にサンプル2やサンプル6などずれていますが、あくまで詳細情報列にある値となります。
No リンク列 値 詳細情報1 詳細情報2
1 ▲ 名称1 サンプル1 サンプル18
2 サンプル2 サンプル19
3 サンプル3 サンプル20
4 ▲ 名称2 サンプル4 サンプル21
5 名称3 サンプル5 サンプル22
6 サンプル6 サンプル23
7 サンプル7 サンプル24
8 ▲ 名称4 サンプル8 サンプル25
9 サンプル9 サンプル26
10 サンプル10 サンプル27
11 ▲ 名称5 サンプル11 サンプル28
12 サンプル12 サンプル29
13 サンプル13 サンプル30
14 サンプル14 サンプル31
15 ▲ 名称7 サンプル15 サンプル32
16 サンプル16 サンプル33
17 サンプル17 サンプル34

有識者の方がおりましたら、教えて頂けないでしょう。

ちなみに下記のマクロを組みましたが、実行しても何も値が返ってきません。
デバックモードでもそのまま値が追加されます。イメージ説明

下記がコードになります。
Sub Sample()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim i As Long
Dim rng As Range
Application.ScreenUpdating = False
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
With sh1
For i = 5 To .Cells(Rows.Count, "C").End(xlUp).Row
If .Range("C" & i).Value <> "" Then
Set rng = sh2.Cells.Find(What:=.Range("C" & i).Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not rng Is Nothing Then
.Hyperlinks.Add Anchor:=.Range("B" & i), Address:="#'" & sh2.Name & "'!" & rng.Address, TextToDisplay:="▼"
sh2.Hyperlinks.Add Anchor:=rng.Offset(0, -1), Address:="#'" & sh1.Name & "'!" & .Range("C" & i).Address, TextToDisplay:="▲"
End If
End If
Next i
End With
Application.ScreenUpdating = True
End Sub

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

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

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

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

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

coco_bauer

2018/08/01 07:06

質問に「ちなみに下記のマクロを組みました」とありますが、そのマクロのコードを質問に追加してください。
saito.kaz

2018/08/01 07:16 編集

大変失礼いたしました。質問にコードを記載致しました。
imihito

2018/08/01 11:52

Sheet1の名称1の数字は半角文字、Sheet2では全角文字ですが実データも同様ですか?
guest

回答2

0

参考程度の話ですが、今回のケースであればワークシート関数でもある程度は対応できたりします。

質問にあるデータで、Sheet2の値が$D$5:$D$21の範囲で、Sheet1のC5セルに式を入れる場合の例です。

=IFERROR(HYPERLINK(CELL("address", INDEX(Sheet2!$D$5:$D$21, MATCH(JIS(D5), Sheet2!$D$5:$D$21,0))),"▼"),"")

INDEX+MATCHで対象のセルへの「参照」を取得し、CELL関数でアドレスを取得、そのアドレスをHYPERLINK関数に渡します。

MATCHでエラーが起きることがあるのでIFERRORで空文字列に差し替えます。

投稿2018/08/01 12:19

編集2018/08/01 12:20
imihito

総合スコア2166

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

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

0

ぱっと見ですが、
マクロを作成してから、A列を挿入したりしました?
見ている箇所が一列ずつずれている様な印象なのですが。

投稿2018/08/01 07:36

torisan

総合スコア678

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問