Hi Every one.
It is big pain for MIS guys to import data from many files to the master file and manipulate the same. Below macro will import all Only Active sheet from each file into the master workbook, after impoting sheets, it will copy first two columns and keep last 10 character from it.
It is big pain for MIS guys to import data from many files to the master file and manipulate the same. Below macro will import all Only Active sheet from each file into the master workbook, after impoting sheets, it will copy first two columns and keep last 10 character from it.
Option Explicit Sub Merge_All_Excel() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim sn(9999) As String Dim xDir$, fName As String Dim sheetname As String Dim master As Workbook, import As Worksheet, file2 As Workbook Dim r As Long, i As Long Dim xt As String Dim lr As Long Set master = ThisWorkbook With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = Application.ThisWorkbook.Path & "\" .Title = "Please select a folder containing files" .Show If .SelectedItems.Count <> 0 Then xDir$ = .SelectedItems(1) & "\" End If End With fName = Dir(xDir$) r = 1 Do While Len(fName) > 0 If UCase(Split(fName, ".")(UBound(Split(fName, ".")))) = "CSV" Or _ Left(UCase(Split(fName, ".")(UBound(Split(fName, ".")))), 2) = "XL" Then sn(r) = fName r = r + 1 End If fName = Dir Loop On Error Resume Next For i = 1 To r - 1 Workbooks.Open xDir$ & sn(i), ReadOnly:=True Set file2 = ActiveWorkbook Set import = file2.ActiveSheet import.Copy After:=master.Sheets(master.Sheets.Count) file2.Close False master.Sheets(Sheets.Count).Activate xt = Split(sn(i), ".")(UBound(Split(sn(i), "."))) sheetname = Replace(sn(i), "." & xt, "") master.ActiveSheet.Name = sheetname Next i Dim shCount As Integer Dim col As Integer Dim sh As Worksheet Dim dRng As Range Dim cell As Range Dim LastCell As Range Dim rng2 As Range Set sh = Sheets("MASTER") sh.Activate sh.Cells.Clear shCount = Sheets.Count col = 1 For i = 1 To shCount If Sheets(i).Name <> "MASTER" Then Sheets(i).Activate Set dRng = sh.Cells(1, col) dRng.Resize(1, 2).Value = Sheets(i).Name lr = Cells.Find(What:="*", SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Row Set dRng = sh.Cells(2, col) Sheets(i).Range("A1:B" & lr).Copy sh.Select dRng.PasteSpecial xlPasteValues col = col + 2 End If Next sh.Activate Application.CutCopyMode = False Cells.Columns.AutoFit Set LastCell = Cells(Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row, Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlValues).Column) Set rng2 = Range(Range("A3"), LastCell) For Each cell In rng2 If cell.Value <> "" Then cell.Value = Right(cell.Value, 10) End If Next cell Cells.Columns.AutoFit Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox "Done", Title:="www.ExcelVbaLab.Com" Range("A1").Select End Sub
Do write your feedback & post your excel VBA macro related query on www.ExcelVbaLab.Com
Cheers!!
Tags: #Excel #VBA #Macro to #Import #sheet #from all #files in #folder and then #merge #first two columns into #master #sheet
No comments:
Post a Comment