Nối các cột liên tục với nhau

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,019
Được thích
163
Em đã mô tả trong file đính kèm
Nhờ các anh/ chị hướng dẫn
Em cảm ớn
P/S: em đã seach nhưng không thấy, nếu có đường link nào tương tự thì chỉ giúp em!
 

File đính kèm

  • NoiCot.xlsx
    10.2 KB · Đọc: 23
Nối cột chứ không phải nối dòng bạn ạ!
 
Em đã mô tả trong file đính kèm
Nhờ các anh/ chị hướng dẫn
Em cảm ớn
P/S: em đã seach nhưng không thấy, nếu có đường link nào tương tự thì chỉ giúp em!
Thử:
PHP:
Sub abc()
    Dim i&, j&, k&, a(), b()
    a = Range("E2", Range("E" & Rows.Count).End(3)).Resize(, 3).Value
    For i = 1 To UBound(a, 2)
        For j = 1 To UBound(a, 1)
            k = k + 1: ReDim Preserve b(1 To k): b(k) = a(j, i)
        Next
    Next
    Range("M2").Resize(UBound(b), 1).Value = Application.Transpose(b)
End Sub
 
Em đã mô tả trong file đính kèm
Nhờ các anh/ chị hướng dẫn
Em cảm ớn
P/S: em đã seach nhưng không thấy, nếu có đường link nào tương tự thì chỉ giúp em!
Trước đây tôi có viết hàm Join2DArray, có thể áp dụng cho bài này
1> Code của hàm Join2DArray
Mã:
Function Join2DArray(ParamArray arrays())
  Dim arr(), aSub, tmp
  Dim lRs As Long, lCs As Long, lR As Long, lC As Long
  Dim n As Long, m As Long, i As Long, bChk As Boolean
  On Error Resume Next

  For i = 0 To UBound(arrays)
    aSub = arrays(i)
    n = UBound(aSub, 1) - LBound(aSub, 1) + 1
    lRs = lRs + n
    m = UBound(aSub, 2) - LBound(aSub, 2) + 1
    If lCs < m Then lCs = m
  Next
 
  ReDim arr(1 To lCs, 1 To lRs)
  n = 0: m = 0
  For i = 0 To UBound(arrays)
    aSub = arrays(i)
    For lR = LBound(aSub, 1) To UBound(aSub, 1)
      bChk = False
      n = n + 1
      For lC = LBound(aSub, 2) To UBound(aSub, 2)
        tmp = aSub(lR, lC)
        Select Case VarType(tmp)
          Case 0 To 1: arr(lC, n) = vbNullString
          Case 2 To 7: arr(lC, n) = tmp
          Case 8
            If IsNumeric(tmp) Then
              arr(lC, n) = "'" & tmp
            Else
              arr(lC, n) = tmp
            End If
        End Select
        If Len(CStr(tmp)) Then bChk = True
      Next
      If bChk = False Then n = n - 1
    Next
  Next
  If n Then
    ReDim Preserve arr(1 To lCs, 1 To n)
    Join2DArray = Transpose2DArray(arr)
  End If
End Function
Function Transpose2DArray(ByVal arr2D)
  Dim arr(), aTemp
  Dim lR As Long, lC As Long
  On Error Resume Next
  aTemp = arr2D
  ReDim arr(LBound(aTemp, 2) To UBound(aTemp, 2), LBound(aTemp, 1) To UBound(aTemp, 1))
  For lR = LBound(aTemp, 1) To UBound(aTemp, 1)
    For lC = LBound(aTemp, 2) To UBound(aTemp, 2)
      arr(lC, lR) = aTemp(lR, lC)
    Next
  Next
  Transpose2DArray = arr
End Function
2> Phần áp dụng:
Mã:
Sub Test()
  Dim aRes
  aRes = Join2DArray(Range("E2:E1000"), Range("F2:F1000"), Range("G2:G1000"))
  Range("M2").Resize(UBound(aRes, 1), UBound(aRes, 2)).Value = aRes
End Sub
Bạn không cần quan tâm code hàm Join2DArray viết gì, chỉ cần biết áp dụng theo cú pháp: Join2DArray(mảng 1, mảng 2,...., mảng n) <--- kết quả trả về sẽ lại 1 mảng được "nối đuôi" nhau
Công dụng của hàm thường để copy nhiều sheet vào 1 sheet, kết quả sẽ bỏ quả các dòng rổng
 
Em cảm ơn các anh/chị nhiều!
 
Trước đây tôi có viết hàm Join2DArray, có thể áp dụng cho bài này
1> Code của hàm Join2DArray
Mã:
Function Join2DArray(ParamArray arrays())
  Dim arr(), aSub, tmp
  Dim lRs As Long, lCs As Long, lR As Long, lC As Long
  Dim n As Long, m As Long, i As Long, bChk As Boolean
  On Error Resume Next

  For i = 0 To UBound(arrays)
    aSub = arrays(i)
    n = UBound(aSub, 1) - LBound(aSub, 1) + 1
    lRs = lRs + n
    m = UBound(aSub, 2) - LBound(aSub, 2) + 1
    If lCs < m Then lCs = m
  Next

  ReDim arr(1 To lCs, 1 To lRs)
  n = 0: m = 0
  For i = 0 To UBound(arrays)
    aSub = arrays(i)
    For lR = LBound(aSub, 1) To UBound(aSub, 1)
      bChk = False
      n = n + 1
      For lC = LBound(aSub, 2) To UBound(aSub, 2)
        tmp = aSub(lR, lC)
        Select Case VarType(tmp)
          Case 0 To 1: arr(lC, n) = vbNullString
          Case 2 To 7: arr(lC, n) = tmp
          Case 8
            If IsNumeric(tmp) Then
              arr(lC, n) = "'" & tmp
            Else
              arr(lC, n) = tmp
            End If
        End Select
        If Len(CStr(tmp)) Then bChk = True
      Next
      If bChk = False Then n = n - 1
    Next
  Next
  If n Then
    ReDim Preserve arr(1 To lCs, 1 To n)
    Join2DArray = Transpose2DArray(arr)
  End If
End Function
Function Transpose2DArray(ByVal arr2D)
  Dim arr(), aTemp
  Dim lR As Long, lC As Long
  On Error Resume Next
  aTemp = arr2D
  ReDim arr(LBound(aTemp, 2) To UBound(aTemp, 2), LBound(aTemp, 1) To UBound(aTemp, 1))
  For lR = LBound(aTemp, 1) To UBound(aTemp, 1)
    For lC = LBound(aTemp, 2) To UBound(aTemp, 2)
      arr(lC, lR) = aTemp(lR, lC)
    Next
  Next
  Transpose2DArray = arr
End Function
2> Phần áp dụng:
Mã:
Sub Test()
  Dim aRes
  aRes = Join2DArray(Range("E2:E1000"), Range("F2:F1000"), Range("G2:G1000"))
  Range("M2").Resize(UBound(aRes, 1), UBound(aRes, 2)).Value = aRes
End Sub
Bạn không cần quan tâm code hàm Join2DArray viết gì, chỉ cần biết áp dụng theo cú pháp: Join2DArray(mảng 1, mảng 2,...., mảng n) <--- kết quả trả về sẽ lại 1 mảng được "nối đuôi" nhau
Công dụng của hàm thường để copy nhiều sheet vào 1 sheet, kết quả sẽ bỏ quả các dòng rổng
Cho em hỏi anh @ndu96081631 với ! Hàm này có thể ứng dụng trong việc gộp các sheet nhưng copy theo chiều ngang được không ạ !
 
Trước đây tôi có viết hàm Join2DArray, có thể áp dụng cho bài này
1> Code của hàm Join2DArray
Mã:
Function Join2DArray(ParamArray arrays())
  Dim arr(), aSub, tmp
  Dim lRs As Long, lCs As Long, lR As Long, lC As Long
  Dim n As Long, m As Long, i As Long, bChk As Boolean
  On Error Resume Next

  For i = 0 To UBound(arrays)
    aSub = arrays(i)
    n = UBound(aSub, 1) - LBound(aSub, 1) + 1
    lRs = lRs + n
    m = UBound(aSub, 2) - LBound(aSub, 2) + 1
    If lCs < m Then lCs = m
  Next

  ReDim arr(1 To lCs, 1 To lRs)
  n = 0: m = 0
  For i = 0 To UBound(arrays)
    aSub = arrays(i)
    For lR = LBound(aSub, 1) To UBound(aSub, 1)
      bChk = False
      n = n + 1
      For lC = LBound(aSub, 2) To UBound(aSub, 2)
        tmp = aSub(lR, lC)
        Select Case VarType(tmp)
          Case 0 To 1: arr(lC, n) = vbNullString
          Case 2 To 7: arr(lC, n) = tmp
          Case 8
            If IsNumeric(tmp) Then
              arr(lC, n) = "'" & tmp
            Else
              arr(lC, n) = tmp
            End If
        End Select
        If Len(CStr(tmp)) Then bChk = True
      Next
      If bChk = False Then n = n - 1
    Next
  Next
  If n Then
    ReDim Preserve arr(1 To lCs, 1 To n)
    Join2DArray = Transpose2DArray(arr)
  End If
End Function
Function Transpose2DArray(ByVal arr2D)
  Dim arr(), aTemp
  Dim lR As Long, lC As Long
  On Error Resume Next
  aTemp = arr2D
  ReDim arr(LBound(aTemp, 2) To UBound(aTemp, 2), LBound(aTemp, 1) To UBound(aTemp, 1))
  For lR = LBound(aTemp, 1) To UBound(aTemp, 1)
    For lC = LBound(aTemp, 2) To UBound(aTemp, 2)
      arr(lC, lR) = aTemp(lR, lC)
    Next
  Next
  Transpose2DArray = arr
End Function
2> Phần áp dụng:
Mã:
Sub Test()
  Dim aRes
  aRes = Join2DArray(Range("E2:E1000"), Range("F2:F1000"), Range("G2:G1000"))
  Range("M2").Resize(UBound(aRes, 1), UBound(aRes, 2)).Value = aRes
End Sub
Bạn không cần quan tâm code hàm Join2DArray viết gì, chỉ cần biết áp dụng theo cú pháp: Join2DArray(mảng 1, mảng 2,...., mảng n) <--- kết quả trả về sẽ lại 1 mảng được "nối đuôi" nhau
Công dụng của hàm thường để copy nhiều sheet vào 1 sheet, kết quả sẽ bỏ quả các dòng rổng
Cho em hỏi, nếu nối chuỗi ở 2 File khác nhau, ví dụ File A là nguồn và File B là đích thì code trên có chạy được không và thay đổi thế nào? em cảm ơn!
 
Cho em hỏi, nếu nối chuỗi ở 2 File khác nhau, ví dụ File A là nguồn và File B là đích thì code trên có chạy được không và thay đổi thế nào? em cảm ơn!
Cụ thể chút đi bạn.
Ngoài ra thì nối nhiều mảng lại với nhau khác hoàn toàn với nối chuỗi nhé
 
Cụ thể chút đi bạn.
Ngoài ra thì nối nhiều mảng lại với nhau khác hoàn toàn với nối chuỗi nhé
Nói chính xác hơn là nối mảng với nhau, cụ thể:
File A em có các mảng như sau
A2:A1000
E2:E1000
F2:F1000
Thực tế các mảng trên chưa đến dòng thứ 1.000 (nên có thể chứa các dòng trống)
Bây giờ qua File B, em muốn nối tất cả mảng trên của File A với nhau như
Mảng: A2:A1000 xong
Nối tiếp mảng E2:E1000 xong
Nối tiếp mảng F2:F1000
Kết quả sẽ thể hiện ở Sheet 1, và bắt đầu từ cell C2
Yêu cầu:
Khi nối thì bỏ qua các dòng trống
Và khi chạy code ở File thì có cần mở File A lên không?
Em cảm ơn!
 
Web KT
Back
Top Bottom