[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別のシートにコピーしたURLのハイパーリンクを有効にする方法』(Taka)
シートAの内容を条件選択してシートBにコピーします。
コピーした内容にはURLが含まれていて
シートAではワンクリックでハイパーリンクが起動するのですが
コピーしたシートBのURLは一度ダブルクリックをしないと
ハイパーリンクが有効になりません。
マクロで範囲(C5:C1000)を指定してハイパーリンクを有効にする方法はないでしょうか?
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
■2
>A列、B列の内容を条件選択して別のシートにコピー〜ソートしています
【条件選択】というのがよくわかりません。
■3
想像するに【値貼り付け】をしていて、コピーした直後はURLがハイパーリンクになっていないけど、ダブルクリックすることによって、オートコレクトが働きハイパーリンクが設定されているとかではないですか?
ならば、普通の(ハイパーリンク状態のまま)貼り付けをすればよいように思いますが如何でしょうか?
(もこな2) 2023/05/26(金) 10:25:13
Sub コピー()
Range("A5:C1000").Copy
Destination: Sheets("検索結果").Range("A5:C1000").PasteSpecial Paste:=xlPasteValues
End Sub
Sub ソート()
Call Sheets("検索結果").Range("A5:C1000").Sort( _
Key1:=Sheets("検索結果").Range("C5"), Order1:=xlDescending) End Sub
マクロはWebサイトの例をコピーして書いているので
文法はよくわかっていません。
「.PasteSpecial Paste:=xlPasteValues」
このあたりが問題なのかと思うのですが
いろいろ変えてみてもエラーが出てしまいます。
(Taka) 2023/05/26(金) 10:39:31
=IF($H5=1,E5,0)
このとき既にハイパーリンクになっていませんでした。
結果の表示なのでハイパーリンクにできません。
※IF文のセルは先に書いたものと一致していません。
実際には$H5の文字列が含まれるものを抽出してコピーし
ソートして空白の行を取り除いています。
(Taka) 2023/05/26(金) 10:53:52
〔H5の計算式〕
=IF(COUNTIF(B5:F5,"*"&$C$2&"*"),1,0)
〔I5の計算式〕
=IF($H5=1,B5,0)
$C$2の文字列に含まれるものをH列に1とし
H列に1が入っているものをI〜L列に抜き出して別のシートにコピーしています。
そもそもの作り方が邪道かも知れません。
(Taka) 2023/05/26(金) 11:06:18
# 無駄なラベルの削除等ちょっと修正しました。 Sub コピー() ActiveSheet.Range("A5:C1000").Copy Sheets("検索結果").Range("A5:C1000").PasteSpecial Paste:=xlPasteValues ~~~~~↑~~~~~ ~~~~~~~~~↑~~~~~~~~~~~ 形式を選択して貼り付け の 値貼り付け をしなさい End Sub
なので、たとえば↓のように(形式を選択して貼り付けの)値貼り付けじゃない【普通の】貼り付けにしたらどうですか?という話です。
Sub コピーと普通の貼り付け() ActiveSheet.Range("A5:C1000").Copy Destination:=Sheets("検索結果").Range("A5") ~↑~~ ~~~~~~~~~~~~~↑~~~~~~~~~~~~~~~ コピーしたセル範囲 を 検索結果シートのA5セル以降に貼り付けなさい End Sub
※普通の貼り付けは本来「Pasteメソッド」のお仕事ですが、Copyメソッドの引数である「Destination」に 貼り付け先を指定すると代用ができますので、上記のような書き方を採用するケースが多いです。
■5
PasteSpecialメソッドでも「すべて」「罫線を除くすべて」や「値」を貼り付けたあと、そのまま「書式」を貼り付ければハイパーリンクになるようです。
(冗長に思えるのでお勧めしませんが、参考まで。)
■6
>条件選択はマクロではなく、IF文で抽出しています。
こちらは理解できなかったので考慮していません。
(オートフィルタで抽出してると想像しましたが違うようですね)
(もこな2) 2023/05/26(金) 11:40:26
(Taka) 2023/05/26(金) 14:19:35
ダブルクリックの代わりにF2キー、Enterでも
編集したとされ、ハイパーリンクされると思います。
(大事) 2023/05/26(金) 15:40:24
>このとき既にハイパーリンクになっていませんでした。
↑のようにご自身で認識されている通り、【ハイパーリンクが設定されていない】ものからコピーしてもそりゃダメでしょう。
■8
>現状の仕組みを変えないと駄目そう
「■6」で触れましたが、元のデータ(C列がハイパーリンクになっている表)からオートフィルタで抽出してコピペじゃダメなんですか?
(オートフィルタで"含まれるもの"という条件だと、少し難しくはなりますができないことではないと思います。)
いやいや、どうしても値貼り付けした結果をハイパーリンクにしたいのだということならば、そのままズバリ、セルの値を使ってセルにハイパーリンクを設定すればよいです。
【参考】 https://www.moug.net/tech/exvba/0050064.html https://kokodane.com/mini_macro50.htm https://www.moug.net/tech/exvba/0050064.html
たぶん(量にもよります)、1セルずつ編集モードにして(オートコレクタでハイパーリンクの設定をして)確定するよりは早いと思います。
(もこな2) 2023/05/26(金) 16:12:23
Sub ハイパーリンク()
Range("A2").Hyperlinks.Add Anchor:=Range("A2"), Address:=Range("A2").Value
End Sub
上記の応用でひとつのセルにハイパーリンクをつけることができました。
範囲の指定方法がうまくいかないのですが、あとは頑張って直します。
助かりました。
(Taka) 2023/05/26(金) 17:24:56
>マクロで範囲(C5:C1000)を指定してハイパーリンクを有効にする方法はないでしょうか?
ということならば↓のようにすればよいでしょう。
#完成品のプレゼントではなく、研究用資料として提供します。
Sub 研究用() Stop 'ブレークポイントの代わり Dim MyRNG As Range
For Each MyRNG In Sheets("検索結果").Range("C5:C1000") MyRNG.Hyperlinks.Add Anchor:=MyRNG, Address:=MyRNG.Value Next MyRNG End Sub
※標準モジュールでシートを指定しないとActiveSheetを指定したことになりますから、きちんと指定することを推奨
(もこな2) 2023/05/26(金) 20:20:21
Sub Sample()
Dim i As Long With ActiveSheet.Hyperlinks For i = 5 To 1000 .Add Anchor:=Cells(i, 5), Address:=Cells(i, 5).Value Next i End With End Sub (Taka) 2023/05/29(月) 16:09:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.