🥰

【ExcelVBA】OneDrive上のExcelファイルのデータを1行ずつ取り出し、2次元配列に格納する

に公開

はじめに

OneDrive上にあるExcelファイルを操作して、Excelファイルのデータを1行ずつ取り出し、2次元配列に格納するVBAマクロを作りました。

データ

データは以下の通りです

ソースコード

ソースコードは下記のとおりです。

'OneDrive上のExcelデータから1行1列ずつ値を取得する処理
Sub ShowOneDrivePath()
    Dim objShell As Object
    Dim OneDrivePath As String
    Dim wb1, wb2 As Workbook
    Dim ws1, ws2 As Worksheet
    Dim file_name As String
    Dim full_file_name As String
    Dim i, j, k, l As Long
    Dim array1 As Variant
    
    ' Create a Shell object
    Set objShell = CreateObject("WScript.Shell")
    
    ' Get the OneDrive path from the environment variable
    OneDrivePath = objShell.ExpandEnvironmentStrings("%OneDrive%")
    
    full_file_name = OneDrivePath & "\" & "myTIMテスト" & "\" & "OneDrive_test1.xlsm"
    
    
    
    Set wb1 = Workbooks.Open(full_file_name)
    Set ws1 = wb1.Worksheets("test1")
    
    
        
    Dim startRange As Range
    Dim startRow As Long
    
    Dim endRange As Range
    Dim endRow As Long
    
    
    Dim address As String
    Dim arrAddress As Variant
    Dim startColumnAlphabet As String
    Dim endColumn As Long
    
    Dim endColumnAlphabet As String
    Dim wf As WorksheetFunction
    Dim arrData(100) As Variant
    Dim data As Variant
    
    '開始セルを取得
    Set startRange = ws1.Range("B4")
    
    '対象となる行を取得
    startRow = startRange.Row
    
    '開始セルの「列を示すアルファベット」を取得
    address = startRange.address(RowAbsolute:=True, ColumnAbsolute:=False)
    arrAddress = Split(address, "$")
    startColumnAlphabet = arrAddress(0)
    
    '最終列を取得
    endColumn = startRange.End(xlToRight).Column
    '最終列を取得
    endRow = ws1.Cells(Rows.Count, endColumn).End(xlUp).Row
    '最終セルを取得
    Set endRange = ws1.Cells(endRow, endColumn)
    
    '最終セルの「列を示すアルファベット」を取得
    address = endRange.address(RowAbsolute:=True, ColumnAbsolute:=False)
    arrAddress = Split(address, "$")
    endColumnAlphabet = arrAddress(0)
    
    'worksheet関数をセットする
    Set wf = Application.WorksheetFunction
    
    k = 0
    For i = startRow To endRow
        '指定した範囲を一括で取得する
        arrData(k) = wf.Transpose(wf.Transpose(Range(startColumnAlphabet & i & ":" & endColumnAlphabet & i)))
        k = k + 1
    Next i
    
    
    l = 0
    '配列の数だけ繰り返し
    For l = 0 To k - 1
        For Each data In arrData(l)
            '配列を表示
            Debug.Print data
        Next
    Next l
    
End Sub
   

テスト結果

テスト結果は下記の画像です。

最後に

色んな事が出来るので、OneDriveを使えると便利ですね!

Discussion