[[20230526093932]] 『別のシートにコピーしたURLのハイパーリンクを有戟x(Taka) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別のシートにコピーしたURLのハイパーリンクを有効にする方法』(Taka)

シートAの内容を条件選択してシートBにコピーします。

コピーした内容にはURLが含まれていて
シートAではワンクリックでハイパーリンクが起動するのですが
コピーしたシートBのURLは一度ダブルクリックをしないと
ハイパーリンクが有効になりません。
マクロで範囲(C5:C1000)を指定してハイパーリンクを有効にする方法はないでしょうか?

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


普通にコピペすればよろし。
(大事) 2023/05/26(金) 09:52:24

すみません。説明が足りませんでした。
コピーはマクロを使用しています。
A列に会社名、B列に事業内容、C列にURLが入っています。
A列、B列の内容を条件選択して別のシートにコピー〜ソートしていますが
ソートしたURLのハイパーリンクが有効になりません。
(Taka) 2023/05/26(金) 10:09:29

おっしゃる意味が解りません。
マクロだろうが普通にコピペすればよろし。
(大事) 2023/05/26(金) 10:16:42

■1
>コピーはマクロを使用しています。
 具体的なコードを提示された方が回答者側で状況が把握しやすいです。

■2
>A列、B列の内容を条件選択して別のシートにコピー〜ソートしています
【条件選択】というのがよくわかりません。

■3
想像するに【値貼り付け】をしていて、コピーした直後はURLがハイパーリンクになっていないけど、ダブルクリックすることによって、オートコレクトが働きハイパーリンクが設定されているとかではないですか?

ならば、普通の(ハイパーリンク状態のまま)貼り付けをすればよいように思いますが如何でしょうか?

(もこな2) 2023/05/26(金) 10:25:13


もなこ2さん、ありがとうございます。

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文で抽出しています。

=IF($H5=1,E5,0)

このとき既にハイパーリンクになっていませんでした。
結果の表示なのでハイパーリンクにできません。

※IF文のセルは先に書いたものと一致していません。
実際には$H5の文字列が含まれるものを抽出してコピーし
ソートして空白の行を取り除いています。
(Taka) 2023/05/26(金) 10:53:52


$H5も間違いでした。(泣)

〔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


■4
>このあたりが問題なのかと思うのですが
既にコメントしていますが以下の通りです。
 # 無駄なラベルの削除等ちょっと修正しました。
 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


もこな2さん、ありがとうございます。
現状は計算式の値を貼り付けるようになっているので
修正頂いた内容だと計算式がそのままコピーされてしまいます。
現状の仕組みを変えないと駄目そうなので、別の方法を考えます。
(Taka) 2023/05/26(金) 13:21:42

■5の冗長についても試してみましたが
URLがダブルクリックしなければハイパーリンクにならない
状況は変わりませんでした。

(Taka) 2023/05/26(金) 14:19:35


だから、セルには完全に編集したという事にって無いので
ハイパーリンクもされないのだと思います。
この辺は、MSしかわからないかと。

ダブルクリックの代わりにF2キー、Enterでも
編集したとされ、ハイパーリンクされると思います。
(大事) 2023/05/26(金) 15:40:24


■7
>現状は計算式の値を貼り付けるようになっているので〜
>冗長についても試してみましたが〜
ちょっと理解してもらえなかったようですが、【ハイパーリンクが設定されている】セルをそのままコピペすれば、1行で済むのにPasteSpecialメソッドを使って2行なり3行で表現することを冗長(むだがある)と表現しました。

>このとき既にハイパーリンクになっていませんでした。
↑のようにご自身で認識されている通り、【ハイパーリンクが設定されていない】ものからコピーしてもそりゃダメでしょう。

■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


もこな2さん、ありがとうございます。

Sub ハイパーリンク()
Range("A2").Hyperlinks.Add Anchor:=Range("A2"), Address:=Range("A2").Value
End Sub

上記の応用でひとつのセルにハイパーリンクをつけることができました。
範囲の指定方法がうまくいかないのですが、あとは頑張って直します。
助かりました。
(Taka) 2023/05/26(金) 17:24:56


■9
>範囲の指定方法がうまくいかない
どのように"うまくいかない"のか説明がないのでわかりませんが、1セルずつ作業(設定)していけばよいはずです。

>マクロで範囲(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


もこな2さん、ありがとうございます。
中身は理解していませんが、なんとか出来ました。

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.