QueryTables メモ


VBAでUipathちっくな事をさせたかったのがきっかけ。
元々Uipathは.Net系である訳なので、なにかあるはずい?とぐぐりまくった時のメモ

<参考サイト>
MicroSoft-ExcelQueryTables

パラメータ多すぎて覚えきれないのでコード書いてコメントメモにした。
Gitできない環境なので一旦ここへ置かせて頂きます。

Sub Sample_QueryTables()

    '-------------------
    'Webデータを取得する
    '-------------------
    Dim ws As Worksheet
    Dim sUrl As String

    Set ws = ThisWorkbook.Worksheets(SHEET_INDEX)
    sUrl = GET_STRING_URL

   'QueryTableの作成 読み込むCSV(Web)パスと、取り込み先のシート、セルを指定
    With ws.QueryTables.Add(Connection:=sUrl, Destination:=Range("A1"))
'        .CommandType = 0
        .Name = "Emplist.asp?OrgCd=N52"         'どのWebクエリかを指定
        .FieldNames = True                      '列見出し表示(True/Falseどちらを設定しても、
                                                'CSVファイル読込では結果は変わらない
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True              'True の場合、先頭の 5 行のデータに共通する
                                                '書式をクエリTblの新しい行のデータに適用する。
                                                '未使用のセルは書式設定されません。
                                                'False の場合、クエリTableに最後に適用した
                                                'オートフォーマットがクエリTblの
                                                '新しい行のデータに適用される。

        .RefreshOnFileOpen = False              'ブックを開いたときにクエリを更新するか

        .BackgroundQuery = True                 'True = 更新をバックグラウンドで実行する 

        .RefreshStyle = xlInsertDeleteCells     '取得または指定したワークシートの行を
                                                '追加または削除して、クエリによって返される
                                                'recordset 内の行の数に対応するように設定。
                                                'xlInsertDeleteCells:1 新しいレコードセットに
                                                '必要な行数と正確に一致するように、一部の行を
                                                '挿入または削除する。
        .SavePassword = False
        .SaveData = True                        'False = ブックを保存する時、クエリのデータを
                                                '        保存しない 
        .AdjustColumnWidth = True
        .RefreshPeriod = 0                      'クエリの自動更新のプロパティ。
                                                '分単位(0 ~ 32767 の整数)

        .WebSelectionType = xlEntirePage        'WebPageの全てのTbl、又は特定のテーブルのみを
                                                'インポートするかを示す値を設定)
                                                '(既定値:xlAllTables(全てのTbl),
                                                ' xlEntirePage(全て), 
                                                ' xlSpecifiedTables (特定のテーブル)

        .WebFormatting = xlWebFormattingNone    'WebPageをQueryTblにインポートする時に
                                                'どれだけの書式を適用するかを示す値を設定
                                                'xlWebFormattingAll(全ての書式), 
                                                'xlWebFormattingNone(書式なし)

        .WebPreFormattedTextToColumns = True    'HTMLタグ内に含まれるデータを列に変換するか
                                                'どうかを設定または返す

        .WebConsecutiveDelimitersAsOne = True   'webPage上の HTML <PRE>タグから
                                                'クエリTblにデータをインポートする時、
                                                '列に解析する場合は、
                                                'Treu = 連続した区切り文字が1つの
                                                '       区切り文字として扱われます。
                                                'False = 連続した区切り文字が
                                                '        複数の区切り文字として扱われます。
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False

        'QueryTablesオブジェクトを更新
        .Refresh BackgroundQuery:=False         'False:Refreshメソッドを実行する際に、
                                                'バックグラウンドで更新しない
        '名前でクエリを指定
        'ActiveSheet.QueryTables("SHEET_NAME").Refresh 'Commit的なやつ

    End With

End Sub



'/--- 番外編 ---
Excelの範囲選択が非常に楽になりました。
参考サイト紛失
@furiさんの記事でした。
表データの処理にはCurrentRegionが便利

  '表Adressを取得
  Set tbl = ws.Range("A1").CurrentRegion
  Set tbl = tbl.Offset(1, 0).Resize(tbl.Rows.Count, tbl.Columns.Count)
  Debug.Print "表の範囲 : " & tbl.Address



'/--- 自分用メモメモ その2---
エクセルVBAのIE(InternetExplorer)制御について