前提・実現したいこと
図のように、別のエクセルファイルから持ってきたデータを一覧にするファイルを作成しています。
例1:
この図を下記のように、
A行を別の列の最終行までセルの結合させたいです。
MaxRowを使ってMergeするのかな?と思ったのですが、
どうやれば良いのか分からず、、お力添え頂けると幸いです…
ソースコード
Option Explicit Sub import_excel() '最終行を変数に取得 Dim MaxRow As Integer MaxRow = Worksheets("2019年10月").Cells(Rows.Count, 1).End(xlUp).Row + 2 Dim arrayPath As Variant arrayPath = Application.GetOpenFilename("ブック, *.xlsm", MultiSelect:=True) If IsArray(arrayPath) Then MsgBox "ちょっと時間かかるかも(´;ω;`)" '画面の描画を停止する Application.ScreenUpdating = False 'Forループ(iが1から配列の要素数まで) Dim i As Integer For i = 1 To UBound(arrayPath) '変数を用意し、ブックを開いて格納 Dim openBook As Workbook Set openBook = Workbooks.Open(arrayPath(i)) 'セルの結合を解除する Cells.Select Selection.UnMerge With Workbooks("管理表VBA").Worksheets("2019年10月") .Range("A" & MaxRow).Value = openBook.Worksheets(1).Range("E6").Value Call RgCopy(.Range("B" & MaxRow), openBook.Worksheets(1).Range("AA9:AA14")) Call RgCopy(.Range("D" & MaxRow), openBook.Worksheets(1).Range("S9:S14")) .Range("E" & MaxRow).Value = openBook.Worksheets(1).Range("AH15").Value .Range("F" & MaxRow).Value = openBook.Worksheets(1).Range("H8").Value .Range("G" & MaxRow).Value = openBook.Worksheets(1).Range("B4").Value End With Application.DisplayAlerts = False openBook.Close MaxRow = MaxRow + 2 Next i '画面の描画を再開する Application.ScreenUpdating = True MsgBox "おわたよ(`・ω・´)" End If End Sub
'fromRg:コピー元セル 'toRg:コピー先セル Private Sub RgCopy(toRg As Range, fromRg As Range) Dim rg As Range Dim i As Long i = 0 For Each rg In fromRg If rg.Value <> "" Then toRg.Offset(i).Value = rg.Value i = i + 1 End If Next End Sub
ツールのバージョン
Excel 2016
追記(19/10/15)
イメージ図をもっとわかりやすいものに変更しました。
読み取る他のファイルのデータがどのようなものか、も提示したほうがいい回答が得られるかと思います~
回答4件
あなたの回答
tips
プレビュー