sharepointのExcelパスを加工してHYPERLINK関数でリンクさせようとすると色々とうまくいかない時がある。
こういうやつ https://xxxxx.sharepoint.com/sites/aaa/bbb/Shared%20Documents/~~
シート関数の ENCODEURL() はコロンやスラッシュもエンコードしてしまうので、この場合には使えない。
WorkBookオブジェクトのFullNameURLEncodedは良い感じに必要なところだけをEncodeしてくれているので、VBAやPowershellなどでこいつを抽出できれば使える。日本語がガンガン含まれていても問題ないみたい。
シェアポをOnedriveにリンクさせたローカルフォルダ内の*.xlsxであれば、Powershellの場合、
(Excelが起動している前提)
using namespace Microsoft.Office.Interop.Excel [Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Excel") $excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application") cd シェアポをOnedriveにリンクさせたローカルパス ls *.xlsx | foreach { $book = $excel.Workbooks.Open($_.FullName); $book.FullNameURLEncoded; $book.Close(); }
これで得られたhttp://付きのパスをExcelシートC列に並べた場合、
D列がシート名
E列が"$A$1"などのアドレス
だとすると
=HYPERLINK(CONCAT("[",C1,"]'",D1,"'!",E1))
これでシート指定・アドレス指定のハイパーリンクを作ることが出来た