LoginSignup
1
5

More than 3 years have passed since last update.

QueryTables メモ

Last updated at Posted at 2019-12-25

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)制御について

1
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5