Nhờ giúp đỡ sửa dữ liệu gộp được từ hàng ngang chuyển sang hàng dọc.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Jayce

Thành viên mới
Tham gia
20/5/22
Bài viết
22
Được thích
14
Em chào các Anh/Chị !
Em có sưu tầm trong GPE (của bác ndu96081631) code VBA gộp dữ liệu từ nhiều file mà không cần mở file. (ví dụ em để trong file đính kèm ạ)
Mã:
Function GetData(ByVal FileName As String, ByVal SheetName As String, ByVal RangeAddress As String, _
            ByVal HasTitle As Boolean, ByVal UseTitle As Boolean)
            
  Dim rsCon As Object, rsData As Object, cat As Object, tbl As Object
  Dim tmpArr, Arr()
  Dim szConnect As String, szSQL As String, tmp As String
  Dim lCount As Long, lR As Long, lC As Long, lVer As Long
  lVer = Val(Application.Version)
  Set rsCon = CreateObject("ADODB.Connection")
  Set rsData = CreateObject("ADODB.Recordset")
  Set cat = CreateObject("ADOX.Catalog")
 
  If lVer < 12 Then
    szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";" & _
                "Extended Properties=""Excel 8.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
  Else
    szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";" & _
                "Extended Properties=""Excel 12.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
  End If
  If SheetName = "" Then
    Dim Dbs  As Object, db As Object
    Set Dbs = CreateObject("DAO.DBEngine." & IIf(lVer < 12, "36", "120"))
    Set db = Dbs.OpenDatabase(FileName, False, False, "Excel 8.0;")
    tmp = db.TableDefs(0).Name
    tmp = Replace(tmp, " ", "?")
    tmp = Replace(tmp, "'", " ")
    tmp = WorksheetFunction.Trim(tmp)
    tmp = Replace(tmp, " ", "'")
    tmp = Replace(tmp, "?", " ")
    SheetName = tmp
    db.Close
    Set Dbs = Nothing: Set db = Nothing
  End If
  If Right(SheetName, 1) <> "$" Then SheetName = SheetName & "$"
  rsCon.Open szConnect
  cat.ActiveConnection = rsCon
 
  szSQL = "SELECT * FROM [" & SheetName & RangeAddress & "];"
  rsData.Open szSQL, rsCon, 0, 1, 1
  tmpArr = rsData.GetRows
  ReDim Arr(UBound(tmpArr, 2) - UseTitle, UBound(tmpArr, 1) + 1)
  If UseTitle Then
    For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
      Arr(0, lC) = rsData.Fields(lC).Name
    Next
  End If
  For lR = LBound(tmpArr, 2) To UBound(tmpArr, 2)
    For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
      Arr(lR - UseTitle, lC) = tmpArr(lC, lR)
    Next
  Next
  rsData.Close: Set rsData = Nothing
  rsCon.Close: Set rsCon = Nothing
  GetData = Arr
End Function
Mã:
Sub Main()
  Dim vFile, FileItem, aRes, Target As Range
  Dim FileName As String, SheetName As String, RangeAddress As String
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
  If TypeName(vFile) = "Variant()" Then
    SheetName = "Sheet1": RangeAddress = "B2:K2"
    For Each FileItem In vFile
      FileName = CStr(FileItem)
      If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
        aRes = GetData(FileName, SheetName, RangeAddress, False, False)
        If IsArray(aRes) Then
          Set Target = Sheet1.Range("B60000").End(xlUp).Offset(1)
          Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
        End If
      End If
    Next
    MsgBox "Done!"
  End If
End Sub
-Trong Sheet "Tonghop1" trong file "FILE TONG HOP" em sẽ lấy được dữ liệu của B2:K2 của 5 file CA1 đến CA5 có cấu trúc giống nhau
Dữ liệu sẽ nhận được sẽ vào B2:K6 của Sheet "Tonghop1"
1.PNG
-Bây giờ em muốn dữ liệu tổng hợp được sẽ theo hàng dọc ở cột B và dữ liệu tổng hợp từ các file sẽ nối tiếp nhau như Sheet "Tonghop2"
2.PNG
Mong Anh/Chị giúp em với ạ!
Em xin chân thành cảm ơn! Chúc tất cả thành viên GPE một ngày đầu tuần vui vẻ!
- Thêm một vấn đề nữa là lấy thêm dữ liệu ở B5:K5, B6:K6 trong các file cần tổng hợp và sẽ chèn lần lượt vào cột C và cột D theo hàng dọc nữa nếu có thể ạ!
 

File đính kèm

  • tong hop du lieu nhieu file vao 1 file.zip
    58.9 KB · Đọc: 16
Em chào các Anh/Chị !
Em có sưu tầm trong GPE (của bác ndu96081631) code VBA gộp dữ liệu từ nhiều file mà không cần mở file. (ví dụ em để trong file đính kèm ạ)
Mã:
Function GetData(ByVal FileName As String, ByVal SheetName As String, ByVal RangeAddress As String, _
            ByVal HasTitle As Boolean, ByVal UseTitle As Boolean)
           
  Dim rsCon As Object, rsData As Object, cat As Object, tbl As Object
  Dim tmpArr, Arr()
  Dim szConnect As String, szSQL As String, tmp As String
  Dim lCount As Long, lR As Long, lC As Long, lVer As Long
  lVer = Val(Application.Version)
  Set rsCon = CreateObject("ADODB.Connection")
  Set rsData = CreateObject("ADODB.Recordset")
  Set cat = CreateObject("ADOX.Catalog")
 
  If lVer < 12 Then
    szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";" & _
                "Extended Properties=""Excel 8.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
  Else
    szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";" & _
                "Extended Properties=""Excel 12.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
  End If
  If SheetName = "" Then
    Dim Dbs  As Object, db As Object
    Set Dbs = CreateObject("DAO.DBEngine." & IIf(lVer < 12, "36", "120"))
    Set db = Dbs.OpenDatabase(FileName, False, False, "Excel 8.0;")
    tmp = db.TableDefs(0).Name
    tmp = Replace(tmp, " ", "?")
    tmp = Replace(tmp, "'", " ")
    tmp = WorksheetFunction.Trim(tmp)
    tmp = Replace(tmp, " ", "'")
    tmp = Replace(tmp, "?", " ")
    SheetName = tmp
    db.Close
    Set Dbs = Nothing: Set db = Nothing
  End If
  If Right(SheetName, 1) <> "$" Then SheetName = SheetName & "$"
  rsCon.Open szConnect
  cat.ActiveConnection = rsCon
 
  szSQL = "SELECT * FROM [" & SheetName & RangeAddress & "];"
  rsData.Open szSQL, rsCon, 0, 1, 1
  tmpArr = rsData.GetRows
  ReDim Arr(UBound(tmpArr, 2) - UseTitle, UBound(tmpArr, 1) + 1)
  If UseTitle Then
    For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
      Arr(0, lC) = rsData.Fields(lC).Name
    Next
  End If
  For lR = LBound(tmpArr, 2) To UBound(tmpArr, 2)
    For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
      Arr(lR - UseTitle, lC) = tmpArr(lC, lR)
    Next
  Next
  rsData.Close: Set rsData = Nothing
  rsCon.Close: Set rsCon = Nothing
  GetData = Arr
End Function
Mã:
Sub Main()
  Dim vFile, FileItem, aRes, Target As Range
  Dim FileName As String, SheetName As String, RangeAddress As String
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
  If TypeName(vFile) = "Variant()" Then
    SheetName = "Sheet1": RangeAddress = "B2:K2"
    For Each FileItem In vFile
      FileName = CStr(FileItem)
      If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
        aRes = GetData(FileName, SheetName, RangeAddress, False, False)
        If IsArray(aRes) Then
          Set Target = Sheet1.Range("B60000").End(xlUp).Offset(1)
          Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
        End If
      End If
    Next
    MsgBox "Done!"
  End If
End Sub
-Trong Sheet "Tonghop1" trong file "FILE TONG HOP" em sẽ lấy được dữ liệu của B2:K2 của 5 file CA1 đến CA5 có cấu trúc giống nhau
Dữ liệu sẽ nhận được sẽ vào B2:K6 của Sheet "Tonghop1"
View attachment 291953
-Bây giờ em muốn dữ liệu tổng hợp được sẽ theo hàng dọc ở cột B và dữ liệu tổng hợp từ các file sẽ nối tiếp nhau như Sheet "Tonghop2"
View attachment 291954
Mong Anh/Chị giúp em với ạ!
Em xin chân thành cảm ơn! Chúc tất cả thành viên GPE một ngày đầu tuần vui vẻ!
- Thêm một vấn đề nữa là lấy thêm dữ liệu ở B5:K5, B6:K6 trong các file cần tổng hợp và sẽ chèn lần lượt vào cột C và cột D theo hàng dọc nữa nếu có thể ạ!
Bạn tham khảo:
Mã:
Sub Main()
  Dim vFile, FileItem, aRes, Target As Range
  Dim FileName As String, SheetName As String, RangeAddress As String
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
  If TypeName(vFile) = "Variant()" Then
    SheetName = "Sheet1": RangeAddress = "B2:K2"
    For Each FileItem In vFile
      FileName = CStr(FileItem)
      If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
        aRes = GetData(FileName, SheetName, RangeAddress, False, False)
        If IsArray(aRes) Then
          Set Target = Sheet1.Range("B60000").End(xlUp).Offset(1)
          Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
        End If
      End If
    Next
    ChuyenDoi Sheet1'---------->Thêm mới dòng này
    MsgBox "Done!"
  End If
End Sub
'---------->Thêm mới đoạn này:
Sub ChuyenDoi(ByVal sheet As Worksheet)
    Dim rng As Range, arr As Variant, result As Variant, i As Long, j As Long, k As Long
    Set rng = sheet.Range("B2").CurrentRegion
    arr = rng.Value: rng.ClearContents
    i = UBound(arr, 1): j = UBound(arr, 2)
    ReDim result(1 To i * j, 1 To 1)
    For j = LBound(arr, 2) To UBound(arr, 2)
        For i = LBound(arr, 1) To UBound(arr, 1)
            k = k + 1
            result(k, 1) = arr(i, j)
        Next i
    Next j
    sheet.Range("B2").Resize(UBound(result, 1), 1).Value = result
End Sub
 
Upvote 0
Bạn tham khảo:
Mã:
Sub Main()
  Dim vFile, FileItem, aRes, Target As Range
  Dim FileName As String, SheetName As String, RangeAddress As String
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
  If TypeName(vFile) = "Variant()" Then
    SheetName = "Sheet1": RangeAddress = "B2:K2"
    For Each FileItem In vFile
      FileName = CStr(FileItem)
      If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
        aRes = GetData(FileName, SheetName, RangeAddress, False, False)
        If IsArray(aRes) Then
          Set Target = Sheet1.Range("B60000").End(xlUp).Offset(1)
          Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
        End If
      End If
    Next
    ChuyenDoi Sheet1'---------->Thêm mới dòng này
    MsgBox "Done!"
  End If
End Sub
'---------->Thêm mới đoạn này:
Sub ChuyenDoi(ByVal sheet As Worksheet)
    Dim rng As Range, arr As Variant, result As Variant, i As Long, j As Long, k As Long
    Set rng = sheet.Range("B2").CurrentRegion
    arr = rng.Value: rng.ClearContents
    i = UBound(arr, 1): j = UBound(arr, 2)
    ReDim result(1 To i * j, 1 To 1)
    For j = LBound(arr, 2) To UBound(arr, 2)
        For i = LBound(arr, 1) To UBound(arr, 1)
            k = k + 1
            result(k, 1) = arr(i, j)
        Next i
    Next j
    sheet.Range("B2").Resize(UBound(result, 1), 1).Value = result
End Sub
Em cảm ơn bác rất nhiều ạ!
Thêm nữa cho em xin lỗi ạ! Bác giúp đúng ý em đưa ra, nhưng em nhờ sai mất rồi ạ. Ý em muốn data sắp xếp giống như cột màu vàng, còn data sau khi lọc là cột màu đỏ (cái này do em đưa ra sai ở bài viết trên).
22222222.PNG
Bác xem giúp em sửa đoạn nào để chuyển đổi sắp xếp hết dữ liệu đã lọc ở file thứ nhất rồi mới đến file thứ 2 với ạ!
Mã:
Sub ChuyenDoi(ByVal sheet As Worksheet)
    Dim rng As Range, arr As Variant, result As Variant, i As Long, j As Long, k As Long
    Set rng = sheet.Range("B2").CurrentRegion
    arr = rng.Value: rng.ClearContents
    i = UBound(arr, 1): j = UBound(arr, 2)
    ReDim result(1 To i * j, 1 To 1)
    For j = LBound(arr, 2) To UBound(arr, 2)
        For i = LBound(arr, 1) To UBound(arr, 1)
            k = k + 1
            result(k, 1) = arr(i, j)
        Next i
    Next j
    sheet.Range("B2").Resize(UBound(result, 1), 1).Value = result
End Sub
 
Upvote 0
Em cảm ơn bác rất nhiều ạ!
Thêm nữa cho em xin lỗi ạ! Bác giúp đúng ý em đưa ra, nhưng em nhờ sai mất rồi ạ. Ý em muốn data sắp xếp giống như cột màu vàng, còn data sau khi lọc là cột màu đỏ (cái này do em đưa ra sai ở bài viết trên).
View attachment 292034
Bác xem giúp em sửa đoạn nào để chuyển đổi sắp xếp hết dữ liệu đã lọc ở file thứ nhất rồi mới đến file thứ 2 với ạ!
Mã:
Sub ChuyenDoi(ByVal sheet As Worksheet)
    Dim rng As Range, arr As Variant, result As Variant, i As Long, j As Long, k As Long
    Set rng = sheet.Range("B2").CurrentRegion
    arr = rng.Value: rng.ClearContents
    i = UBound(arr, 1): j = UBound(arr, 2)
    ReDim result(1 To i * j, 1 To 1)
    For j = LBound(arr, 2) To UBound(arr, 2)
        For i = LBound(arr, 1) To UBound(arr, 1)
            k = k + 1
            result(k, 1) = arr(i, j)
        Next i
    Next j
    sheet.Range("B2").Resize(UBound(result, 1), 1).Value = result
End Sub
Hơi vòng vèo, bạn thử lại:
Mã:
Sub Main()
  Dim vFile, FileItem, aRes, Target As Range
  Dim FileName As String, SheetName As String, RangeAddress As String
  Dim shTmp As Worksheet
  Set shTmp = newSheet '---------->Thêm moi dòng này
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
  If TypeName(vFile) = "Variant()" Then
    SheetName = "Sheet1": RangeAddress = "B2:K2"
    For Each FileItem In vFile
      FileName = CStr(FileItem)
      If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
        aRes = GetData(FileName, SheetName, RangeAddress, False, False)
        If IsArray(aRes) Then
          Set Target = shTmp.Range("B60000").End(xlUp).Offset(1) '---------->Sua dòng này
          Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
        End If
      End If
    Next
    '---------->Thêm moi doan này
    ChuyenDoi shTmp, Sheet1
    Application.DisplayAlerts = False
    shTmp.Delete
    Application.DisplayAlerts = True
    Sheet1.Activate
    MsgBox "Done!"
  End If
End Sub

'---------->Thêm moi doan này:
Sub ChuyenDoi(ByVal shTmp As Worksheet, ByVal sheet As Worksheet, Optional ByVal delim As String = ".")
    Dim rng As Range, arr As Variant, result As Variant, i As Long, j As Long, k As Long
    Set rng = shTmp.Range("B2").CurrentRegion
    arr = rng.Value: rng.ClearContents
    i = UBound(arr, 1): j = UBound(arr, 2)
    ReDim result(1 To i * j, 1 To 3)
    For j = LBound(arr, 2) To UBound(arr, 2)
        For i = LBound(arr, 1) To UBound(arr, 1)
            k = k + 1
            result(k, 1) = arr(i, j)
            If arr(i, j) Like "*" & delim & "*" Then
                result(k, 2) = Split(arr(i, j), delim)(0)
                result(k, 3) = Split(arr(i, j), delim)(1)
            End If
        Next i
    Next j
    
    With shTmp
        .Range("B2").Resize(UBound(result, 1), 3).Value = result
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("C2"), Order:=xlAscending
        .Sort.SortFields.Add Key:=.Range("D2"), Order:=xlAscending
        .Sort.SetRange .Range("B2").Resize(UBound(result, 1), 3)
        .Sort.Header = xlNo
        .Sort.Apply
        result = .Range("B2").Resize(UBound(result, 1), 1).Value
    End With
    sheet.Range("B2").Resize(UBound(result, 1), 1).Value = result
End Sub

Private Function newSheet() As Worksheet
    With ThisWorkbook
        Set newSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    End With
End Function
 
Upvote 0
Hơi vòng vèo, bạn thử lại:
Mã:
Sub Main()
  Dim vFile, FileItem, aRes, Target As Range
  Dim FileName As String, SheetName As String, RangeAddress As String
  Dim shTmp As Worksheet
  Set shTmp = newSheet '---------->Thêm moi dòng này
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
  If TypeName(vFile) = "Variant()" Then
    SheetName = "Sheet1": RangeAddress = "B2:K2"
    For Each FileItem In vFile
      FileName = CStr(FileItem)
      If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
        aRes = GetData(FileName, SheetName, RangeAddress, False, False)
        If IsArray(aRes) Then
          Set Target = shTmp.Range("B60000").End(xlUp).Offset(1) '---------->Sua dòng này
          Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
        End If
      End If
    Next
    '---------->Thêm moi doan này
    ChuyenDoi shTmp, Sheet1
    Application.DisplayAlerts = False
    shTmp.Delete
    Application.DisplayAlerts = True
    Sheet1.Activate
    MsgBox "Done!"
  End If
End Sub

'---------->Thêm moi doan này:
Sub ChuyenDoi(ByVal shTmp As Worksheet, ByVal sheet As Worksheet, Optional ByVal delim As String = ".")
    Dim rng As Range, arr As Variant, result As Variant, i As Long, j As Long, k As Long
    Set rng = shTmp.Range("B2").CurrentRegion
    arr = rng.Value: rng.ClearContents
    i = UBound(arr, 1): j = UBound(arr, 2)
    ReDim result(1 To i * j, 1 To 3)
    For j = LBound(arr, 2) To UBound(arr, 2)
        For i = LBound(arr, 1) To UBound(arr, 1)
            k = k + 1
            result(k, 1) = arr(i, j)
            If arr(i, j) Like "*" & delim & "*" Then
                result(k, 2) = Split(arr(i, j), delim)(0)
                result(k, 3) = Split(arr(i, j), delim)(1)
            End If
        Next i
    Next j
  
    With shTmp
        .Range("B2").Resize(UBound(result, 1), 3).Value = result
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("C2"), Order:=xlAscending
        .Sort.SortFields.Add Key:=.Range("D2"), Order:=xlAscending
        .Sort.SetRange .Range("B2").Resize(UBound(result, 1), 3)
        .Sort.Header = xlNo
        .Sort.Apply
        result = .Range("B2").Resize(UBound(result, 1), 1).Value
    End With
    sheet.Range("B2").Resize(UBound(result, 1), 1).Value = result
End Sub

Private Function newSheet() As Worksheet
    With ThisWorkbook
        Set newSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    End With
End Function
1 phát ăn ngay. Em cảm ơn bác rất là nhiều!
 
Upvote 0
Hơi vòng vèo, bạn thử lại:
Mã:
Sub Main()
  Dim vFile, FileItem, aRes, Target As Range
  Dim FileName As String, SheetName As String, RangeAddress As String
  Dim shTmp As Worksheet
  Set shTmp = newSheet '---------->Thêm moi dòng này
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
  If TypeName(vFile) = "Variant()" Then
    SheetName = "Sheet1": RangeAddress = "B2:K2"
    For Each FileItem In vFile
      FileName = CStr(FileItem)
      If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
        aRes = GetData(FileName, SheetName, RangeAddress, False, False)
        If IsArray(aRes) Then
          Set Target = shTmp.Range("B60000").End(xlUp).Offset(1) '---------->Sua dòng này
          Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
        End If
      End If
    Next
    '---------->Thêm moi doan này
    ChuyenDoi shTmp, Sheet1
    Application.DisplayAlerts = False
    shTmp.Delete
    Application.DisplayAlerts = True
    Sheet1.Activate
    MsgBox "Done!"
  End If
End Sub

'---------->Thêm moi doan này:
Sub ChuyenDoi(ByVal shTmp As Worksheet, ByVal sheet As Worksheet, Optional ByVal delim As String = ".")
    Dim rng As Range, arr As Variant, result As Variant, i As Long, j As Long, k As Long
    Set rng = shTmp.Range("B2").CurrentRegion
    arr = rng.Value: rng.ClearContents
    i = UBound(arr, 1): j = UBound(arr, 2)
    ReDim result(1 To i * j, 1 To 3)
    For j = LBound(arr, 2) To UBound(arr, 2)
        For i = LBound(arr, 1) To UBound(arr, 1)
            k = k + 1
            result(k, 1) = arr(i, j)
            If arr(i, j) Like "*" & delim & "*" Then
                result(k, 2) = Split(arr(i, j), delim)(0)
                result(k, 3) = Split(arr(i, j), delim)(1)
            End If
        Next i
    Next j
   
    With shTmp
        .Range("B2").Resize(UBound(result, 1), 3).Value = result
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("C2"), Order:=xlAscending
        .Sort.SortFields.Add Key:=.Range("D2"), Order:=xlAscending
        .Sort.SetRange .Range("B2").Resize(UBound(result, 1), 3)
        .Sort.Header = xlNo
        .Sort.Apply
        result = .Range("B2").Resize(UBound(result, 1), 1).Value
    End With
    sheet.Range("B2").Resize(UBound(result, 1), 1).Value = result
End Sub

Private Function newSheet() As Worksheet
    With ThisWorkbook
        Set newSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    End With
End Function
Cho em hỏi thêm đoạn này
Mã:
   SheetName = "Sheet1": RangeAddress = "B2:K2"
em lấy được dữ liệu từ ô B2 đến K2
Em thử nhân 3 lần lên để lấy được dữ liệu của B5:K5 & B6:K6 nhưng thời gian cũng nhân 3 lần lên (Em làm với 1000 file).
Bác xem giúp em cho nó lấy cùng lúc với B2:K2 và chuyển đổi hàng dọc vào cột "C" & "D" với.
Em đòi hỏi nhiều quá thì mong bác thông cảm...
Bài đã được tự động gộp:

Đến màu đỏ là dừng thôi.
Em vẫn còn nhớ bác. Bác bỏ qua cho em vụ nửa tiếng tây, nửa tiếng ta ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi thêm đoạn này
Mã:
   SheetName = "Sheet1": RangeAddress = "B2:K2"
em lấy được dữ liệu từ ô B2 đến K2
Em thử nhân 3 lần lên để lấy được dữ liệu của B5:K5 & B6:K6 nhưng thời gian cũng nhân 3 lần lên (Em làm với 1000 file).
Bác xem giúp em cho nó lấy cùng lúc với B2:K2 và chuyển đổi hàng dọc vào cột "C" & "D" với.
Em đòi hỏi nhiều quá thì mong bác thông cảm...
Bài đã được tự động gộp:


Em vẫn còn nhớ bác. Bác bỏ qua cho em vụ nửa tiếng tây, nửa tiếng ta ạ.
Đoạn màu vàng màu đỏ là mình nói vui như đèn xanh, đèn vàng, đèn đỏ ấy mà.
 
Upvote 0
Cho em hỏi thêm đoạn này
Mã:
   SheetName = "Sheet1": RangeAddress = "B2:K2"
em lấy được dữ liệu từ ô B2 đến K2
Em thử nhân 3 lần lên để lấy được dữ liệu của B5:K5 & B6:K6 nhưng thời gian cũng nhân 3 lần lên (Em làm với 1000 file).
Bác xem giúp em cho nó lấy cùng lúc với B2:K2 và chuyển đổi hàng dọc vào cột "C" & "D" với.
Em đòi hỏi nhiều quá thì mong bác thông cảm...
Bài đã được tự động gộp:


Em vẫn còn nhớ bác. Bác bỏ qua cho em vụ nửa tiếng tây, nửa tiếng ta ạ.
Với mình vấn đề này chắc là đụng nóc rồi,đến đèn đỏ rồi bạn chờ bạn khác nhé ^^
 
Upvote 0
Hôm trước bạn mới đăng bài này mình cũng đọc, nếu bạn nói chỉ viết code mới thì chắc nhanh hơn vì nhiều người không muốn sửa code của người khác mấy đâu.
Vâng. Em rút kinh nghiệm ạ.
Bài đã được tự động gộp:

Với mình vấn đề này chắc là đụng nóc rồi,đến đèn đỏ rồi bạn chờ bạn khác nhé ^^
Vâng bác. Em tìm hiểu thêm hoặc chấp nhận lâu hơn vậy ạ. Cái này em cũng có tool là phần mềm thứ 3 hỗ trợ nhưng không tiện bằng cái mà bác đã giúp ạ. Em cảm ơn bác rất nhiều.
 
Upvote 0
Web KT
Back
Top Bottom