Htmlテーブルの接続

October 1, 2023
excel vba Mac

Htmlテーブルの接続

Excelにはデータの接続という機能があります。これはデータベースやテキストファイル等のデータとリンクされた表をExcelシート上に展開する機能です。この機能を使うことでExcel形式では無いデータや閲覧のみで渡したいデータ等を効率的に利用することができます。この中でインターネット上の表(Table要素)を展開することも出来るのですが、Windows版とMac版では最初に設定する際の挙動が少し違います。

Windows版とMac版の違い

Windows版ではURLのインプットダイアログが表示され、URLを入力することで次のステップに進むのですが、Mac版ではURLの直接入力はできず、iqyという見慣れない拡張子の付いたファイルを選択する必要があります。またこのiqyファイルは特定のディレクトリに保存されている必要があります。

このiqyファイルはURLを入力しただけのテキストファイルです。なぜMac版だけこの仕様なのかは不明ですが、Windows版と比べると手間が多いのは間違いありません。それに初めて使う場合は面を喰らい、iqyという見慣れないファイルのせいでこの機能の利用自体を忌避されかねません。

VBAでショートカット

ならば、無い機能はVBAでつくるの精神でiqyファイルを自動作成し、少しでもWindows版に近づけてみましょう。流れとしては以下のとおりです。

  1. インプットダイアログでURLを入力
  2. 入力されたURLをiqyファイルとしてカレントディレクトリに保存
  3. 2を元にデータの接続を設定する

では実際のコードは以下のとおりです。

Sub addHtmlTable()
Dim cmd As String, qname As String

cmd = Application.InputBox(prompt:="URLを入力して下さい。", Title:="WEBのテーブルに接続", Type:=2)
If cmd <> "" And cmd <> "False" Then
    qname = getQueryName(cmd) 'ファイル名の決定
    If Not Application.OperatingSystem Like "*Mac*" Then
        cmd = "URL;" & cmd 'Windowsではそのまま
    Else
        Dim path As String, iqy As String 'Macではiqyファイル作成
        path = getQuerypath() & qname & ".iqy" '特定のディレクトリパスは以下のFunctionに表記
        iqy = cmd
        Open path For Output As #1
            Print #1, iqy
        Close #1
        cmd = "FINDER;" & path
    End If
    Application.CutCopyMode = False
    With ActiveSheet.QueryTables.Add(Connection:=cmd, Destination:=Range("$A$1"))
        .name = qname
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = "1"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End If
End Sub

'ファイル名の決定
Function getQueryName(ByVal url As String) As String
Dim qname As String

qname = Replace(url, "https://", "")
qname = Replace(qname, "http://", "")
qname = Replace(qname, ".", "-")
qname = Replace(qname, "/", "_")
If Len(qname) > 30 Then
    qname = Left(qname, 30)
End If
getQueryName = qname

End Function

'特定のディレクトリパス
Function getQuerypath() As String
Dim cpath As String: cpath = ThisWorkbook.path
Dim roots() As String
Dim querypath As String

roots = Split(cpath, "/Documents/")
querypath = roots(0) & "/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Queries/"
getQuerypath = querypath

End Function

データの接続を利用する機会がないけど、機能として持っときたいなという方はFormeStudio.xlsm Ver2.65でリボンメニューから利用できるようになっています。もしよろしければお使いください。

Next Previous

3つの表

October 12, 2023
excel データ入力 操作

Excelで量産シミュレーション

October 12, 2023
excel データ入力 操作

テーブルについて

October 12, 2023
excel データ入力 操作