質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

584閲覧

【VBA】画像スクレイピングについて

mashison.jr

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/05/12 21:49

エクセル内にある画像URLをスクレイピングして、指定するフォルダに保存するVBAを作成したつもりでしたが、何度やってもfilenameにてエラーが発生します。
その他にもエラー箇所がありましたら、ご教授いただけますでしょうか。
また、以下コードにファイル名をL列に並んだB列のものに出来るようにしたいです。
※office365 64ビットとなります。
何卒よろしくお願いいたします。

Option Explicit
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr

'簡略化【案】
Sub downloadimages()
Dim lastrow As Long
Dim rc As Long
On Error Resume Next
Dim downloadStatus As Variant
Dim url As String
Dim destinationFile_local As String
MkDir "C:\Users\Guest\Pictures"
lastrow = Sheet2.Range(Range("L2"), Range("L2").End(xlDown)).Count

For rc = "TK0804" To lastrow
url = Sheet2.Cells(rc, 1).Value
desttinationFile_local = "C:\Users\Guest\Pictures" & Filename(rc - 1 & ".jpg")
downloadStatus = URLDownloadToFile(0, url, desttinationFile_local, 0, 0)

Next
nsgBox "☆完了☆"
Call openFolder("C:\Users\Guest\Pictures")
End Sub
Sub openFolder(path As String)

Shell "C:\Windows\Explorer.exe " & path, vbNormalFocus

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mashison.jr

2022/05/13 00:59

お忙しい中ありがとうございます。 ミスを含めて修正しましたが、実行時エラー53が出る状況でした。 お手数ですがご指摘頂けると幸いです。 Option Explicit Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _ "URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal _ szFileName As String, ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr '簡略化【案】 Sub downloadimages()   Dim lastrow As Long   Dim rc As Long   Dim downloadStatus As Variant   Dim url As String   Dim desttinationFile_local As String   MkDir "D:\test"   lastrow = Sheet2.Range(Range("L2"), Range("L2").End(xlDown)).Count  For rc = 1 To lastrow     url = Sheet2.Cells(rc, 1).Value     desttinationFile_local = "D:\test" & rc & ".jpg"     downloadStatus = URLDownloadToFile(0, url, desttinationFile_local, 0, 0)  Next  MsgBox "完了"  Call openFolder(D:\test) End Sub Sub openFolder(path As String)  Shell "C:\Windows\explorer.exe" & path, vbNormalFocus End Sub
hatena19

2022/05/13 01:50

どの行でエラーが出ますか。 また、エラーメッセージは何でしょうか。
hatena19

2022/05/13 02:12

とりあえず明らかな間違いは、 Call openFolder(D:\test) ↓ Call openFolder("D:\test") Shell "C:\Windows\explorer.exe" & path, vbNormalFocus ↓ Shell "C:\Windows\explorer.exe " & path, vbNormalFocus
mashison.jr

2022/05/13 13:53

お忙しい中、ご協力いただきありがとうございます、 あれから、いろいろと見直しをしまして、以下のようにコードを直したのですが、 未だにCall openFolder("D:\test")にてエラー35が出てわかりませんでした。 Option Explicit Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _ "URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal _ szFileName As String, ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr '簡略化【案】 Sub downloadimages() Dim lastrow As Long Dim rc As Long Dim downloadStatus As Variant Dim url As String Dim desttinationFile_local As String Dim Sheet2 As Worksheet Set Sheet2 = Worksheets("Sheet2") MkDir "D:\test" lastrow = Sheet2.Range(Range("L2"), Range("L2").End(xlDown)).Count For rc = 1 To lastrow url = Sheet2.Cells(rc, 1).Value desttinationFile_local = "D:\test" & Sheet2.Cells(rc, "A").Value & ".jpg" downloadStatus = URLDownloadToFile(0, url, desttinationFile_local, 0, 0) Next MsgBox "完了" Call openFolder("D:\test") Shell "C:\Windows\explorer.exe" & path, vbNormalFocus End Sub
hatena19

2022/05/14 02:16

回答にコードを追記しましたのでそれを試してみてください。
mashison.jr

2022/05/15 00:57

コードの修正等しましたが、エラー75が解決できず、苦戦しております。 可能性ある箇所はどちらになるのでしょうか? パスがみつからないことについて、いろいろ調べていますが、検討つかない状況でした。
guest

回答2

0

Filename(rc - 1 & ".jpg")としているということは、Filenameは自作関数ですよね。
まずは、そのコードも提示してください。

ただ、それ以前に、動作確認するときは、
On Error Resume Next
をコメントアウトしてから実行しましょう。
上記があるとエラーを無視してしまうので、原因の特定が難しくなります。

コメントアウトして実行すると For rc = "TK0804" To lastrowで型不一致エラーがでるはずです。
rc はLong型なので、"TK0804" の部分は数値でないとだめです。

他にも nsgBox "☆完了☆" もエラーになります。nsgBoxなどという関数はありません。


とりあえず下記のコードでどうですか。

vba

1Option Explicit 2Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _ 3"URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal _ 4szFileName As String, ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr 5 6'簡略化【案】 7Sub downloadimages() 8 Dim lastrow As Long 9 Dim rc As Long 10 Dim downloadStatus As Variant 11 Dim url As String 12 Dim desttinationFile_local As String 13 14 Dim Sheet2 As Worksheet 15 Set Sheet2 = Worksheets("Sheet2") 16 17 MkDir "D:\test" 18 lastrow = Sheet2.Range(Range("L2"), Range("L2").End(xlDown)).Count 19 20 For rc = 1 To lastrow 21 url = Sheet2.Cells(rc, 1).Value 22 desttinationFile_local = "D:\test\" & Sheet2.Cells(rc, "A").Value & ".jpg" 23 downloadStatus = URLDownloadToFile(0, url, desttinationFile_local, 0, 0) 24 Next 25 26 MsgBox "完了" 27 28 Shell "C:\Windows\explorer.exe " & "D:\test", vbNormalFocus 29 30End Sub

投稿2022/05/12 23:16

編集2022/05/14 02:15
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずは、そのfilenameになにが入ってるのかチェックしてみよう。

投稿2022/05/12 22:23

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/13 01:33

関数に何が入るんですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問