少し前にも同じコードの他の点についてアドバイスをいただいたのですが、新たな問題点が生じたので改めて質問させてほしいです。
具体的な問題点が分からなかったのでコードをそのまま載せました。
シート1に値を入力すると、繁殖牛データ。データ。という2個のシートから検索し、リンクをつけたいです。
繁殖牛データシートに入っている値を入力した時は
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3))
データシートに入っている値を入力した時は
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ & "'!" & Range(Cells(kennsaku, 1))
で「'Range'メソッドは失敗しました:'_Worksheet'オブジェクト」とでます。
試験的にどちらのシートにも入っていない値を入力すると、思惑通りに"見つからないのでリンクは貼りません"と帰ってきます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim kennsaku, y, z
If Target.Count > 1 Then Exit Sub 'セルを二つ以上選択した場合
If Target.Value = "" Then Exit Sub 'データが空の場合
If Application.CountIf(Range("A1:Z80"), Target.Value) > 1 Then
MsgBox Target.Value & "は既に入力されています", vbOKOnly + vbExclamation
Target.Clear
Exit Sub
End If
Set y = Worksheets("繁殖牛データ").Range("$C$1:$C$1003")
Set z = Worksheets("データ").Range("$A$1:$A$65536")
kennsaku = Application.Match(Target.Value, y, 0)
If IsNumeric(kennsaku) Then
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3))
Else
kennsaku = Application.Match(Target.Value, z, 0)
If IsError(kennsaku) Then
MsgBox "見つからないのでリンクは貼りません", vbOKOnly + vbExclamation
Exit Sub
Else
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ & "'!" & Range(Cells(kennsaku, 1))
End If
End If
Range("A1:Z80").Font.Underline = False
End Sub
No.1ベストアンサー
- 回答日時:
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3))
これはエラーになるよ。
1.sheet名の指定の仕方が変だ。
2.&の後はcellを参照していない。cellの値を参照している。これはhyperlinkをクリックしたときにエラーになる。
ActiveSheet.Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:="繁殖牛データ!" & "R" & kennsaku & "C1"
としたいのではないか。
"R" & kennsaku & "C1"
は
"A" & kennsaku
でもいいか。
SubAddress:="繁殖牛データ!" & "R" & kennsaku & "C3"と
SubAddress:="データ!" & "R" & kennsaku & "C1"
にしたところうまくいきました。
重複チェックに次いでまたしても助けていただき、本当に感謝しています。
"R" & kennsaku & "C1"の部分はや、SubAddressのあたりは理解していないです。
今回は、値を入力した結果を眺めてだいたいの意味を想像した結果、たまたまいきましたが、本やウェブページで学ぶとしたら、何かお勧めはあるでしょうか?
No.2
- 回答日時:
こんにちは。
解決済みのようではありますが、ちょっと割り込ませていただきます。
>今回は、値を入力した結果を眺めてだいたいの意味を想像した結果、たまたまいきましたが、本やウェブページで学ぶとしたら、何かお勧めはあるでしょうか?
Webページには、癖の多いものがあるので、お勧めできませんね。このぐらい書けるレベルにると、書籍のほうがよいです。大村あつしさんの『かんたんプログラミング Excel VBA』(シーリーズ3部)がありますから、辞書代わりに使ってもよいと思います。あまりに内容的に細かすぎるのに難がありますね。最後まで全部理解するのには、1年以上かかってしまいます。全部を覚える必要はありませんが。
ただ、そのコードから受ける印象としては、中級から上級のレベルのもの、つまり、入門編や初級編では歯が立たないと思っているオブジェクトの概念自体を学んだほうが、よりはっきり分かってくると思います。
例えば、Range オブジェクトのCells プロパテイというのは、何年も経っている私自身も、未だにスッキリとして理解しているわけではありません。RangeオブジェクトとCellsプロパティは、親子の関係のようで、他人なのです。今回は、だから反乱を起こしてしまうわけです。
VBAでコードを書く場合は、Rangeの方が、Application という大親との関係は親密です。こんな、説明は訳が分からないと思いますが。
それと、ご質問のコードですが、単に、
SubAddress:="'繁殖牛データ'!" & Cells(kennsaku, 3).Address
SubAddress:="'データ'!" & Cells(kennsaku, 1).Address
とすればよいのではありませんか?実際に見つけたセルのアドレスとは違いますが、文字化するなら、これで十分のはずです。あえて換えたければ、.Address(1, 1, xlR1C1) とすればよいですが、古い種類のブジェクトでなければ、必要ないと思います。
後は、今回は、問題が発生していないのですが、以下の場所は、イベントが、二重に発生していますから、本来は、
Application.EnableEvents = False
Target.Clear
Application.EnableEvents = True
としたほうがよいです。
>SubAddressのあたりは理解していないです。
こういう瑣末なプロパティについては、私も理解していないです。(^^; しょせん人の作ったオブジェクトですから、こういうのは、決まったように入れるしかありませんね。
ありがとうございます!
皆さんのおかげで、今作っているファイルもそろそろ完成しそうです。
一通り思惑通りに動くようになったら、さらに理解を深めたいと思っていたのです。本屋に行っても書籍の多さに圧倒されるばかりでなかなか選べないですね。
実は、今回のアドバイスもちんぷんかんぷんです。
薦められた本も参考書の候補に入れて学んでみます。
完成しそうと書きつつも、再び作成中のファイルについて質問するかもしれませんが、その際も気が向いたらアドバイスお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
はがきについて。
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
【関数】先頭だけにある、半角...
-
Excel ピボットテーブルで日付...
-
Excelのpivotについて質問です
-
時間によってファイル名が変わ...
-
エクセル 白黒印刷で白線を印刷...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
WPS OFFICEでの縦書きについて
-
Excelのチェックボックスの使い...
-
エクセルの条件付き書式につい...
-
エクセルのセルに同じ大きさの...
-
エクセルの関数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報