Excelのハイパーリンク一覧から一括ダウンロードする方法とファイルサイズ取得(PowerShell・VBA・Power Query)

Webサイトの表をExcelに貼り付けて整形できたのに、実体は「ダウンロード用ファイルのリンク一覧」だった——そんな場面は意外と多いです。リンクを1件ずつ開かずにまとめて取得し、さらに保存後のファイルサイズや更新日時までExcelで見える化するための、実務で使える手順をまとめます。

目次

よくある状況:Excelに貼り付けたら「リンク一覧」だった

Webページの複数列テーブルをExcelに貼り付けると、見た目は「ファイル名」「種別」「更新日」などが並ぶ“一覧表”になります。しかし実際には、表の各行にあるファイル名がハイパーリンクになっていて、クリックしないと実体(URL)が分からないことがあります。

このとき多くの人が詰まるのが次の2点です。

  • リンクを1件ずつクリックして保存するのは非現実的(大量だと特に)
  • ダウンロード後、ローカルのファイルサイズや更新日時をExcelのセルで参照したいが、標準関数だけではうまくいかない

結論:現実的な解決ルートは「URL抽出 → 自動取得」+「属性は別ルートで取得」

まず押さえたいのは、Excelは「リンクを一覧で持つ」ことは得意でも、「Webから複数ファイルを安全に自動保存する」「OS上のファイル属性を関数だけで取る」といった用途は標準機能だけでは弱い、という点です。そこで次の組み合わせが現実的です。

やりたいことおすすめ手段強み注意点
リンク先ファイルを一括ダウンロードPowerShell(推奨)ログ・再実行・エラー処理が強い/Excelから切り離せる認証が必要なサイトは追加対応が要る場合あり
Excelだけで一括ダウンロードExcel VBAExcel内で完結/ボタン1つで実行しやすいマクロ制限・セキュリティ警告・環境差の影響を受けやすい
ローカルファイルのサイズ・更新日時などをExcelで参照VBAユーザー定義関数(UDF)セル関数のように扱えるマクロ有効ブックが必要
フォルダー配下のファイル属性を一覧化Power Query「フォルダーから」マクロ不要で属性一覧が作れる/更新が簡単“任意の1ファイルをセル参照で取得”よりは一覧向き

最初の重要ステップ:ExcelのハイパーリンクからURLを取り出す

一括ダウンロードは「URLの列」を用意できれば、ほぼ勝ちです。問題は、貼り付けた表のセルが“見た目は文字列でも、URLはハイパーリンクとして埋まっている”ことがある点です。

リンクの入り方は主に3パターン

パターンExcel上の見え方中身URLの取り出し方
ハイパーリンク(オブジェクト)青文字+下線(または通常表示)セル値とURLが別管理VBAで Range.Hyperlinks(1).Address
HYPERLINK関数見た目はリンク数式にURLが含まれる数式文字列から抽出(やや面倒)
URLが文字列として入っているhttps://〜 が見えるセル値そのものがURLそのまま使える(最も簡単)

方法A:VBAでURL列を作る(最も確実で再現性が高い)

貼り付けた表がハイパーリンク(オブジェクト)だった場合、手作業で「リンク先をコピー」して回るのは地獄です。ここはVBAでURLを抽出するのが最短です。

次のユーザー定義関数(UDF)を標準モジュールに貼り付けると、セルを引数にURLを文字列で返すようになります。

Option Explicit

'セルに設定されたハイパーリンクのURLを返す
'ハイパーリンクが無い場合はセルの値をそのまま返す(URL文字列が入っているケースを想定)
Public Function GetLinkAddress(ByVal target As Range) As Variant
    On Error GoTo EH

    If target Is Nothing Then
        GetLinkAddress = ""
        Exit Function
    End If

    If target.Hyperlinks.Count > 0 Then
        GetLinkAddress = target.Hyperlinks(1).Address
    Else
        GetLinkAddress = target.Value
    End If

    Exit Function
EH:
    GetLinkAddress = ""
End Function

使い方は簡単です。たとえばA列にリンク付きのファイル名があるなら、B2に次を入れて下へコピーします。

  • =GetLinkAddress(A2)

これでB列にURL一覧ができます。このURL列をCSVにしてPowerShellへ渡す、またはVBAでそのままループしてダウンロードする、という流れに持ち込めます。

方法B:URLが見えているなら“余計な加工をしない”

すでにセルにURL文字列が入っているなら、無理にVBAを使う必要はありません。むしろ加工しすぎると、URL末尾のクエリ文字列(?id=...)を壊してしまうことがあります。

  • URLは原則として“そのまま”扱う
  • 余計な全角化やトリムで壊さない(前後の空白除去はOK)

リンク先を一括ダウンロードする:PowerShellが現場で強い

「1つずつクリックしたくない」という悩みへの最適解は、URLリストを使ったスクリプトダウンロードです。特にPowerShellは、Windows環境に標準搭載されていることが多く、ログ出力・再実行・エラー処理がしやすいのがメリットです。

準備:ExcelのURL列をCSVにする

Excelで作ったURL列(例:B列)を次の形式でCSVにします。

列名例意味
Urlhttps://example.com/files/report.xlsxダウンロード元のURL
FileName(任意)report_2026-01.xlsx保存ファイル名を指定したい場合

ポイントは、列名(ヘッダー)を入れることです。PowerShell側で扱いやすくなります。

基本スクリプト:URLを順番に保存し、ログも残す

以下は、CSVのUrl列を読み込み、指定フォルダーへ順次ダウンロードする例です。既に同名ファイルが存在する場合は連番を付けて退避し、結果ログ(成功/失敗、保存先、サイズ)もCSVで出力します。

# 1) 設定
$csvPath  = "C:\work\links.csv"          # Excelから保存したCSV
$destDir  = "C:\work\downloads"          # 保存先フォルダー
$logPath  = Join-Path $destDir "download_log.csv"
$delayMs  = 500                          # アクセス間隔(ミリ秒)。負荷配慮で適宜調整

# 2) 保存先フォルダー作成
New-Item -ItemType Directory -Force -Path $destDir | Out-Null

# 3) ファイル名に使えない文字を置換する関数
function Convert-ToSafeFileName {
    param([Parameter(Mandatory=$true)][string]$Name)

    $invalid = [System.IO.Path]::GetInvalidFileNameChars()
    foreach ($ch in $invalid) {
        $Name = $Name.Replace($ch, "_")
    }
    return $Name
}

# 4) 同名があれば連番を付ける関数
function Get-UniquePath {
    param(
        [Parameter(Mandatory=$true)][string]$Path
    )

    if (-not (Test-Path $Path)) { return $Path }

    $dir  = Split-Path -Path $Path -Parent
    $base = [System.IO.Path]::GetFileNameWithoutExtension($Path)
    $ext  = [System.IO.Path]::GetExtension($Path)

    $i = 2
    while ($true) {
        $candidate = Join-Path $dir ("{0}_{1}{2}" -f $base, $i, $ext)
        if (-not (Test-Path $candidate)) { return $candidate }
        $i++
    }
}

# 5) CSV読み込み
$rows = Import-Csv -Path $csvPath

$results = New-Object System.Collections.Generic.List[object]

foreach ($row in $rows) {
    $url = ($row.Url + "").Trim()
    if ([string]::IsNullOrWhiteSpace($url)) { continue }

    try {
        $uri = [Uri]$url

        # 保存ファイル名の決定(CSVにFileName列があれば優先)
        $nameFromCsv = ($row.FileName + "").Trim()
        if (-not [string]::IsNullOrWhiteSpace($nameFromCsv)) {
            $fileName = Convert-ToSafeFileName -Name $nameFromCsv
        }
        else {
            # URL末尾から推定(末尾が空ならGUID)
            $leaf = [System.IO.Path]::GetFileName($uri.AbsolutePath)
            if ([string]::IsNullOrWhiteSpace($leaf)) {
                $leaf = ([Guid]::NewGuid().ToString() + ".bin")
            }
            $fileName = Convert-ToSafeFileName -Name ([Uri]::UnescapeDataString($leaf))
        }

        $outPath = Join-Path $destDir $fileName
        $outPath = Get-UniquePath -Path $outPath

        # ダウンロード
        Invoke-WebRequest -Uri $uri -OutFile $outPath -MaximumRedirection 5 -ErrorAction Stop

        $bytes = (Get-Item $outPath).Length

        $results.Add([pscustomobject]@{
            Url      = $url
            Status   = "OK"
            SavePath = $outPath
            Bytes    = $bytes
            Message  = ""
            Time     = (Get-Date)
        }) | Out-Null
    }
    catch {
        $results.Add([pscustomobject]@{
            Url      = $url
            Status   = "NG"
            SavePath = ""
            Bytes    = 0
            Message  = ($_.Exception.Message)
            Time     = (Get-Date)
        }) | Out-Null
    }

    Start-Sleep -Milliseconds $delayMs
}

# 6) 結果ログ出力(UTF-8)
$results | Export-Csv -Path $logPath -NoTypeInformation -Encoding UTF8

このスクリプトの実務ポイントは次の通りです。

  • ログを残す:失敗URLだけ再実行、などの運用ができるようになります。
  • 保存先の衝突に強い:同名があり得るリンク一覧でも安全に保存できます。
  • アクセス間隔を空ける:短時間に大量アクセスすると、サイト側でブロックされたり、相手に迷惑をかけたりします。

ファイル名がURL末尾と一致しないケースへの対処

URL末尾が「download?id=123」のような形式だと、URLからファイル名が推定できません。こうしたケースでは次の対応が現実的です。

状況症状現実的な対処
URLにファイル名が含まれない保存名が.binやGUIDになりがちExcel側に「保存名」列を作り、CSVのFileNameとして渡す
同じURLでも都度違うファイルが返る上書き事故が起きるファイル名に日付や連番を含める運用にする
リダイレクトが多い取得できない/別ページを保存してしまう-MaximumRedirection を増やす、URL自体を見直す

よくあるエラーと切り分け

現象原因の例対処の方向性
403(Forbidden)っぽいログイン必須/User-Agent制限/直リンク禁止権限確認、正規のダウンロード手順(APIや共有リンク)に切り替える
ファイルではなくHTMLが保存される実はダウンロードページのURLだったブラウザでネットワークログを見て“実ファイルURL”を取得する
途中で失敗する(タイムアウト)回線/サーバー負荷/大容量アクセス間隔を増やす、再実行できるログ運用にする
ファイル名が文字化けするURLエンコード/日本語ファイル名URL末尾をUnescapeする、Excel側で保存名を指定する

大量ダウンロード時の“実務マナー”

技術的にできても、やり方を間違えるとサイト側に迷惑がかかります。最低限、次の配慮を入れてください。

  • 短時間に大量アクセスしない(間隔を空ける/夜間に実行する等)
  • 利用規約・社内ルールに従う(自動取得が禁止されているサイトもあります)
  • 認証が必要なコンテンツは、正規の手段(共有設定、公式API、管理者の許可)を優先する

Excelだけで一括ダウンロードしたい:VBAで回す方法

「PowerShellを使えない」「どうしてもExcelのボタンで完結したい」場合は、VBAでURLを順番に保存する方法があります。ただし、マクロ制限や環境依存が出やすい点は理解しておきましょう。

最小構成:URLDownloadToFileで保存する

以下は、B列にURL、C列に保存結果(OK/NG)を出す例です。保存先フォルダーはダイアログで選びます。

Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" ( _
        ByVal pCaller As LongPtr, _
        ByVal szURL As String, _
        ByVal szFileName As String, _
        ByVal dwReserved As Long, _
        ByVal lpfnCB As LongPtr _
    ) As Long
#Else
    Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" ( _
        ByVal pCaller As Long, _
        ByVal szURL As String, _
        ByVal szFileName As String, _
        ByVal dwReserved As Long, _
        ByVal lpfnCB As Long _
    ) As Long
#End If

Private Function PickFolder() As String
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    fd.Title = "保存先フォルダーを選択してください"
    If fd.Show = -1 Then
        PickFolder = fd.SelectedItems(1)
    Else
        PickFolder = ""
    End If
End Function

Private Function SafeFileName(ByVal s As String) As String
    Dim bad As Variant, i As Long
    bad = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
    For i = LBound(bad) To UBound(bad)
        s = Replace(s, CStr(bad(i)), "_")
    Next i
    SafeFileName = s
End Function

Private Function FileNameFromUrl(ByVal url As String) As String
    Dim p As Long, leaf As String
    p = InStrRev(url, "/")
    If p > 0 Then
        leaf = Mid$(url, p + 1)
    Else
        leaf = url
    End If

    If Len(leaf) = 0 Then leaf = Format(Now, "yyyymmdd_hhnnss") & ".bin"
    FileNameFromUrl = SafeFileName(leaf)
End Function

Public Sub BatchDownloadFromUrls()
    Dim folder As String
    folder = PickFolder()
    If Len(folder) = 0 Then Exit Sub

    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    Dim r As Long
    Dim url As String, savePath As String, fileName As String
    Dim rc As Long

    Application.ScreenUpdating = False
    Application.StatusBar = "ダウンロードを開始します..."

    For r = 2 To lastRow
        url = Trim$(ws.Cells(r, "B").Value)
        If Len(url) > 0 Then
            fileName = FileNameFromUrl(url)
            savePath = folder & "\" & fileName

            rc = URLDownloadToFile(0, url, savePath, 0, 0)
            If rc = 0 Then
                ws.Cells(r, "C").Value = "OK"
                ws.Cells(r, "D").Value = savePath
            Else
                ws.Cells(r, "C").Value = "NG(" & rc & ")"
                ws.Cells(r, "D").Value = ""
            End If
        End If

        DoEvents
        Application.StatusBar = "処理中: " & (r - 1) & " / " & (lastRow - 1)
        Application.Wait Now + TimeSerial(0, 0, 1) 'アクセス間隔
    Next r

    Application.StatusBar = False
    Application.ScreenUpdating = True
End Sub

VBA方式の注意点は次の通りです。

  • サイト側が直リンクを嫌う場合、取得に失敗しやすい(403など)
  • プロキシや証明書、社内セキュリティ設定の影響を受けやすい
  • 大量件数だとExcelが重くなるため、ログを別シートにする、途中再開できる設計にする等の工夫が必要

ローカルファイル属性をExcelで参照する:標準関数だけでは難しい理由

Excelの標準関数は、基本的に「セルの値」や「ブック内データ」を対象に計算します。OSのファイルシステムにアクセスして、任意パスのサイズ・更新日時を返す関数は標準では用意されていません。

そのため、次のどれかを選ぶことになります。

  • VBAのユーザー定義関数(UDF)で取得する
  • Power Queryでフォルダー一覧として取り込む
  • PowerShell等で属性を収集してCSV化し、Excelで読み込む

VBAで「ファイルサイズ」「更新日時」をセル関数のように使う

ここでは、最も要望が多い「ファイルサイズ(バイト)」と「最終更新日時」を返すUDF例を紹介します。いずれも、パスが存在しない場合はエラー値を返し、Excelの数式として扱いやすくします。

基本:FileLenとFileDateTimeを使う

Option Explicit

'ファイルサイズ(バイト)を返す
Public Function FileSizeBytes(ByVal filePath As String) As Variant
On Error GoTo EH


If Len(Trim$(filePath)) = 0 Then
    FileSizeBytes = CVErr(xlErrNA)
    Exit Function
End If

If Len(Dir$(filePath, vbNormal)) = 0 Then
    FileSizeBytes = CVErr(xlErrNA)
    Exit Function
End If

FileSizeBytes = FileLen(filePath)
Exit Function


EH:
FileSizeBytes = CVErr(xlErrValue)
End Function

'最終更新日時を返す
Public Function FileModifiedAt(ByVal filePath As String) As Variant
On Error GoTo EH


If Len(Trim$(filePath)) = 0 Then
    FileModifiedAt = CVErr(xlErrNA)
    Exit Function
End If

If Len(Dir$(filePath, vbNormal)) = 0 Then
    FileModifiedAt = CVErr(xlErrNA)
    Exit Function
End If

FileModifiedAt = FileDateTime(filePath)
Exit Function


EH:
FileModifiedAt = CVErr(xlErrValue)
End Function

'バイト数を読みやすい表示に整形(例:12.3 MB)
Public Function FormatBytes(ByVal bytesValue As Variant) As Variant
On Error GoTo EH


If IsError(bytesValue) Then
    FormatBytes = bytesValue
    Exit Function
End If

Dim d As Double
d = CDbl(bytesValue)

If d < 1024 Then
    FormatBytes = Format(d, "0") & " B"
    Exit Function
End If

d = d / 1024
If d < 1024 Then
    FormatBytes = Format(d, "0.0") & " KB"
    Exit Function
End If

d = d / 1024
If d < 1024 Then
    FormatBytes = Format(d, "0.0") & " MB"
    Exit Function
End If

d = d / 1024
FormatBytes = Format(d, "0.0") & " GB"
Exit Function


EH:
FormatBytes = CVErr(xlErrValue)
End Function

シート上では次のように使えます。

  • A2にフルパスが入っている場合:=FileSizeBytes(A2)
  • 読みやすい表示:=FormatBytes(FileSizeBytes(A2))
  • 更新日時:=FileModifiedAt(A2)

注意:FileLenは大容量ファイルでオーバーフローする場合がある

環境や対象ファイルによっては、数GB級のファイルでFileLenが扱える範囲を超えてエラーになることがあります。大容量ファイルも扱う可能性があるなら、Windows APIを使って64bitで取得する方法を用意しておくと安心です(上級者向け)。

上級:64bitサイズを取得する(Windows API)

次は、64bit相当のファイルサイズを取得して返す例です。戻り値は数値(バイト)です。

Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
        ByVal lpFileName As String, _
        ByVal dwDesiredAccess As Long, _
        ByVal dwShareMode As Long, _
        ByVal lpSecurityAttributes As LongPtr, _
        ByVal dwCreationDisposition As Long, _
        ByVal dwFlagsAndAttributes As Long, _
        ByVal hTemplateFile As LongPtr _
    ) As LongPtr

    Private Declare PtrSafe Function GetFileSizeEx Lib "kernel32" ( _
        ByVal hFile As LongPtr, _
        ByRef lpFileSize As Currency _
    ) As Long

    Private Declare PtrSafe Function CloseHandle Lib "kernel32" ( _
        ByVal hObject As LongPtr _
    ) As Long
#Else
    Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
        ByVal lpFileName As String, _
        ByVal dwDesiredAccess As Long, _
        ByVal dwShareMode As Long, _
        ByVal lpSecurityAttributes As Long, _
        ByVal dwCreationDisposition As Long, _
        ByVal dwFlagsAndAttributes As Long, _
        ByVal hTemplateFile As Long _
    ) As Long

    Private Declare Function GetFileSizeEx Lib "kernel32" ( _
        ByVal hFile As Long, _
        ByRef lpFileSize As Currency _
    ) As Long

    Private Declare Function CloseHandle Lib "kernel32" ( _
        ByVal hObject As Long _
    ) As Long
#End If

Public Function FileSizeBytes64(ByVal filePath As String) As Variant
    On Error GoTo EH

    Const GENERIC_READ As Long = &H80000000
    Const FILE_SHARE_READ As Long = &H1
    Const FILE_SHARE_WRITE As Long = &H2
    Const FILE_SHARE_DELETE As Long = &H4
    Const OPEN_EXISTING As Long = 3
    Const FILE_ATTRIBUTE_NORMAL As Long = &H80

    If Len(Trim$(filePath)) = 0 Then
        FileSizeBytes64 = CVErr(xlErrNA)
        Exit Function
    End If

    If Len(Dir$(filePath, vbNormal)) = 0 Then
        FileSizeBytes64 = CVErr(xlErrNA)
        Exit Function
    End If

    Dim h As LongPtr
    Dim sz As Currency
    Dim ok As Long

    h = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE Or FILE_SHARE_DELETE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)

    'CreateFile失敗時は -1 相当になることが多い
    If h = -1 Then
        FileSizeBytes64 = CVErr(xlErrValue)
        Exit Function
    End If

    ok = GetFileSizeEx(h, sz)
    CloseHandle h

    If ok = 0 Then
        FileSizeBytes64 = CVErr(xlErrValue)
        Exit Function
    End If

    'Currencyは内部的に1/10000単位の64bit整数なので補正
    FileSizeBytes64 = sz * 10000
    Exit Function

EH:
    On Error Resume Next
    If h <> 0 Then CloseHandle h
    FileSizeBytes64 = CVErr(xlErrValue)
End Function

「通常はFileSizeBytesで十分、たまに大容量が混じる」なら、列を分けるのではなく、次のように“64bit版をデフォルト”にしても良いでしょう。

  • =FormatBytes(FileSizeBytes64(A2))

マクロなしで属性一覧を作りたい:Power Query「フォルダーから」が安定

「ファイルサイズや更新日時を取りたい」だけなら、Power Queryの“フォルダーから”取り込みが非常に強力です。特に、同一フォルダー配下のファイルをまとめて一覧化する用途に向きます。

Power Queryでできること

  • 指定フォルダー内のファイル名、拡張子、サイズ、更新日時、作成日時などを一覧化
  • フィルター(拡張子がxlsxだけ、など)や列追加がGUIで可能
  • 「更新」ボタンで再取得でき、運用が楽

手順の流れ(Windows版Excelを想定)

  1. Excelの「データ」タブ → 「データの取得」
  2. 「ファイルから」→「フォルダーから」
  3. 対象フォルダーを選択
  4. プレビューで「変換データ」を選択(必要なら)
  5. 列(Name/Extension/Date modified/Size/Folder Pathなど)を整えて読み込み

リンクからダウンロードしたファイルを1つのフォルダーに集約しておけば、Power Queryで属性が一瞬で“台帳化”できます。ExcelのセルにUDFで1件ずつ参照するより、一覧で管理したい現場ではこちらのほうが管理しやすいことが多いです。

実務でのおすすめ構成:迷ったらこの組み合わせ

要件別に、現場でトラブルが少ない構成をまとめます。

状況おすすめ理由
リンクが大量/失敗したURLだけやり直したいURL抽出(VBA)+一括DL(PowerShell)+ログ運用再実行に強く、Excelが固まりにくい
社内ルールでPowerShellが使いづらいExcel VBAで一括DL(小〜中規模)Excel内で完結しやすい
ダウンロード後の属性を一覧で管理したいダウンロード先を1フォルダーに統一+Power Queryマクロ不要で更新が簡単、保守しやすい
シートで「このパスのサイズ」を関数っぽく見たいVBA UDF(FileLen / API)Excel内の参照が自然になる

リンク一覧 → 一括取得 → 属性確認までの“流れ”の例

最後に、最短で回る手順例をまとめます。初めて整備する場合でも、この順番で進めると迷いにくいです。

  1. Web表をExcelに貼り付け、必要な列だけ残す(ファイル名、カテゴリ等)
  2. リンクセルの隣に=GetLinkAddress(A2)でURL列を作る
  3. URL列(+必要なら保存名列)をCSVで保存する
  4. PowerShellでCSVを読み込み、指定フォルダーへ一括ダウンロードする(ログ出力)
  5. 保存先フォルダーをPower Query「フォルダーから」で取り込み、サイズ・更新日時を台帳化する
  6. (必要なら)Excelシート上でUDFを使い、任意パスのサイズを参照する

見落としがちな注意点:利用規約・認証・負荷

一括ダウンロードは便利な反面、運用を誤ると問題になりやすい領域です。特に次の点は、事前に確認しておくと安心です。

  • サイト利用規約:自動取得が禁止のサービスもあります。
  • 認証:ログインが必要なリンクは、単純なURL取得では弾かれることがあります(正規の共有リンク、API、管理者の許可が必要な場合あり)。
  • 負荷:短時間に大量アクセスすると、相手側のシステム負荷やアクセス制限の原因になります。

まとめ:Excelは「URLを整える場所」、取得と属性は“得意な道具”に任せる

Excelに貼り付けた「ダウンロード用リンク一覧」から効率よく処理するコツは、役割分担です。

  • Excel:リンク一覧の整形と、URL列の抽出(必要なら保存名も作る)
  • PowerShell(またはVBA):URLをループして一括ダウンロード(ログを残す)
  • VBA UDF/Power Query:ローカルファイル属性を取得して見える化

この流れに乗せるだけで、「1件ずつクリック」「ファイルサイズを目視で確認」といった作業はほぼ不要になります。最初に仕組みを作ってしまえば、次回以降はURLを貼り付けて更新するだけで回るようになります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次