- ベストアンサー
Webクエリで困っています
- WebクエリでセルA1に入力したURLを読み込み、表を取り込んで必要な箇所をコピーしたいですが、エラーが発生しています。
- マクロを使用して、Webクエリで特定のURLから表を取り込む方法を試していますが、エラーが発生しています。
- Webクエリを使用してセルA1に入力したURLから表を取り込むためのマクロを作成しましたが、エラーが発生しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
下記で試してみて。 URL の簡易チェックで Like 演算子を使うため、大小文字の統一の 必要があり、Lcase 関数で URL を小文字化してたのが原因かも。 Sub クエリで取得() Dim sConnectionStr As String Dim sh As Worksheet Set sh = Worksheets("クエリで取得") sConnectionStr = Trim$(sh.Range("A1").Text) If Len(sConnectionStr) = 0 Then Exit Sub If LCase$(sConnectionStr) Like "http://*" Or _ LCase$(sConnectionStr) Like "https://*" Then sh.Rows("2:" & CStr(sh.Rows.Count)).ClearContents sConnectionStr = "URL;" & sConnectionStr With sh.QueryTables.Add(Connection:=sConnectionStr, _ Destination:=sh.Range("A2")) .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = True .WebDisableRedirections = False .Refresh BackgroundQuery:=False .Delete End With sh.Range("A19:Q54").Copy Else MsgBox "A1 セルが未入力か URL として不適切", vbInformation End If End Sub
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
QueryTables.Add(Connection:=~ に URL を指定する場合、URL であることを 表す "URL;" というキーワードが必要(下記ソースの※のライン)です。 また、不要と思われる各種プロパティー設定は多少整理しました。 下記ソースを VBE にコピー&ペーストすると http:// の部分で余計な「?」 記号までペーストされますが、削除して下さい。 Sub クエリで取得() Dim sConnectionStr As String Dim sh As Worksheet ' WEB クエリを作成するシートを参照 Set sh = ActiveSheet ' または Worksheets("シート名") ' 前処理:余計なホワイトスペース等を除去し、Like 演算子で比較 ' できるように小文字化しておく sConnectionStr = Trim$(LCase$(sh.Range("A1").Text)) ' A1 にはデータが入力されていて、かつ http:// で始まっているか If Len(sConnectionStr) And sConnectionStr Like "http://*" Then ' 前処理:一応シートをクリアした方が良いでしょう sh.Rows("2:" & CStr(sh.Rows.Count)).ClearContents ' ※POINT: 接続文字列に URL であることを表すキーワードを付与 sConnectionStr = "URL;" & sConnectionStr ' WEB クエリを作成する With sh.QueryTables.Add(Connection:=sConnectionStr, _ Destination:=sh.Range("A2")) .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = True .WebDisableRedirections = False ' 実際にインポートするには Refresh メソッドを実行する ' 今回はインポートが完了するまで待機する必要があるので、 ' BackgroundQuery は False にしておく .Refresh BackgroundQuery:=False ' WEB クエリを繰り返し更新する必要がなければ ' 削除した方が省リソースです .Delete End With sh.Range("A19:Q54").Copy Else MsgBox "A1 セルが未入力か URL として不適切", vbInformation End If End Sub
補足
Sub クエリで取得() ' ' クエリで取得 Macro ' マクロ記録日 : 2009/8/1 ユーザー名 : charlie ' Dim sConnectionStr As String Dim sh As Worksheet Set sh = Worksheets("クエリで取得") sConnectionStr = Trim$(LCase$(sh.Range("A1").Text)) If Len(sConnectionStr) And sConnectionStr Like "https://*" Then sh.Rows("2:" & CStr(sh.Rows.Count)).ClearContents sConnectionStr = "URL;" & sConnectionStr With sh.QueryTables.Add(Connection:=sConnectionStr, _ Destination:=sh.Range("A2")) .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = True .WebDisableRedirections = False .Refresh BackgroundQuery:=False .Delete End With sh.Range("A19:Q54").Copy Else MsgBox "A1 セルが未入力か URL として不適切", vbInformation End If End Sub ------------------- 上記のように修正しましたが、 .Refresh BackgroundQuery:=Falseで黄色のエラーになります。 どうしたらよいでしょうか。 尚、http://をhttps://にしました。 宜しくお願いします。
お礼
いやっ!できました!!! 感動です。イメージ通りのものができました。 感謝!感謝!感謝!です。 いろいろご親切にこちらのわがままを聞いて頂いて恐縮です。ありがとうございました。 いつも、『新しいマクロの記録』から作成して、不要な部分を削除する方法で作っていました。今回変数をはじめて知りました。いろいろなことができそうですね。難しそうですが、勉強してみます。 ありがとうございましたm(__)m