例文を使って繰り返し業務を時短

【マクロ・VBA】Googleスプレットシートをエクセルにインポートする

エクセル、マクロ、VBAでGoogleスプレットシートをエクセルにインポートする方法 VBA

スプレットシートをエクセルにインポート

Googleドライブの特定のスプレッドシートから情報をエクセルに転記する手順

  1. Google APIを有効にする
    • Google APIを使うには、APIを有効にする必要があります。Google Developers ConsoleからAPIを有効にし、必要な認証情報を取得してください。
  2. 必要なライブラリを追加する
    • VBAからGoogle APIを使用するためには、必要なライブラリを参照する必要があります。以下のライブラリを追加してください。
      • Microsoft WinHTTP Services, version 5.1
      • Microsoft Scripting Runtime
      • Microsoft XML, v6.0
  3. スプレッドシートから情報を取得するためのスクリプトを作成する

このVBAコードは、GoogleスプレッドシートからExcelファイルをダウンロードし、そのExcelファイルの全シートをアクティブブックにインポートするためのものです。

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

'Googleスプレッドシートをインポートする
Sub MainSample()
    Dim strURL As String
    strURL = "https://docs.google.com/spreadsheets/d/1l24RztIdYZWZiAqVdGPocubPzzbCVlCz/"

'https://docs.google.com/spreadsheets/d/[ここにIDが存在]/edit#gid=*********

    Dim strFile As String
    strFile = GetSpreadsheet(strURL)
  
    Application.ScreenUpdating = False
    Call GetAllSheets(ThisWorkbook, strFile)
    Application.ScreenUpdating = True
  
    MsgBox "インポート完了"
End Sub

'APIのURLDownloadToFileでxlsxをダウンロード
Function GetSpreadsheet(ByVal argURL As String) As String
    Dim outFile As String
    outFile = "C:\〇〇〇〇\〇〇〇〇\〇〇〇〇\〇〇〇〇.xlsx"
    'outFile = ThisWorkbook.path & "\" & "ファイル名" & Format(Now(), "yyyymmddhhmmss") & ".xlsx"

    If argURL Like "*edit?usp=sharing" Then
        argURL = Replace(argURL, "edit?usp=sharing", "")
    End If
    argURL = argURL & "export?format=xlsx"
  
    Call URLDownloadToFile(0, argURL, outFile, 0, 0)
    GetSpreadsheet = outFile
End Function

'ダウンロードしたxlsxの全シートの取込
Sub GetAllSheets(targetBook As Workbook, ByVal strFile As String)
    Dim wb As Workbook
    Set wb = Workbooks.Open(FileName:=strFile, ReadOnly:=True)
  
    Dim ws As Worksheet
    For Each ws In wb.Sheets
        ws.Copy after:=targetBook.Sheets(targetBook.Sheets.Count)
    Next
  
    wb.Close SaveChanges:=True
    'Kill strFile
End Sub

説明

Declare文は、Windows API関数を宣言するためのものであり、VBAコード内でWin32 APIを使用できるようにします。この場合、’URLDownloadToFile

URLDownloadToFile関数

この関数は、URLで指定されたファイルをローカルファイルにダウンロードするAPI関数です。この関数は、URLからExcelファイルをダウンロードし、指定されたファイルパスに保存します。この関数によって、GoogleスプレッドシートからExcelファイルをダウンロードしています。

スプレッドシートを取得

この関数は、URLDownloadToFile関数を使用して、GoogleスプレッドシートからExcelファイルをダウンロードし、そのファイルパスを返します。関数の引数には、GoogleスプレッドシートのURLを指定します。

GetAllSheetsサブルーチン

このサブルーチンは、指定されたExcelファイルの全シートをアクティブブックにインポートするためのものです。このサブルーチンには、アクティブブックを表す’targetBookstrFile引数があります。

このVBAコードを実行する前に、GoogleスプレッドシートのURLやExcelファイルを保存するパスを適宜変更してください。また、このコードではExcelファイルをダウンロード後に削除していますが、必要に応じてコメントアウトしてください。

コメント

タイトルとURLをコピーしました