QueryTables メモ



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

<参考サイト>
<a herf = "https://docs.microsoft.com/ja-jp/office/vba/api/excel.querytables.add">MicroSoft-ExcelQueryTables</a>

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

```VB
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
```
<br>
'/--- 番外編 ---
Excelの範囲選択が非常に楽になりました。

参考サイト紛失

@furiさんの記事でした。
<a href = "https://qiita.com/furi/items/e2155fdd8810dd79795a">表データの処理にはCurrentRegionが便利</a>


```VB
  '表Adressを取得
  Set tbl = ws.Range("A1").CurrentRegion
  Set tbl = tbl.Offset(1, 0).Resize(tbl.Rows.Count, tbl.Columns.Count)
  Debug.Print "表の範囲 : " & tbl.Address
```
<br>
'/--- 自分用メモメモ その２---
<a href = "https://www.vba-ie.net/element/meta.php">エクセルVBAのIE（InternetExplorer）制御について</a>