[Help] Nối các nội dung trong vùng dữ liệu thành 1 hàng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vuhungcute

Thành viên mới
Tham gia
6/4/09
Bài viết
20
Được thích
0
Chào mọi người !

Hiện mình đang có bảng số liệu với tổng là 458924 hàng. Hiện mình có vấn đề nan giải như sau:

1. Ô số liệu bắt đầu từ hàng thứ 104 (tới 118).
2. Mình đã highlight vùng dữ liệu mẫu của file.
3. Mình muốn vùng dữ liệu đó thành 1 hàng dài nối với nhau mà không cần chia thành nhiều hàng.
4. Các vùng này hiện tại theo nguyên tắc là: 7 cột, 15 hàng. Có một vài vùng nó không đồng nhất. Những vùng này mình sẽ sửa tay cũng được.

Do file quá lớn nên mình ko đính kèm, mình gửi kèm bằng link dropbox. Mình post bài có gì sai mong chỉ dẫn.

Cám ơn mọi người rất nhiều. Bác nào giúp em em xin hậu tạ chầu cafe tử tế ^^

Link file: https://www.dropbox.com/s/l3nf372saecmgsl/SWDOWN-VN-20100731.xlsx
 
Chào mọi người !

Hiện mình đang có bảng số liệu với tổng là 458924 hàng. Hiện mình có vấn đề nan giải như sau:

1. Ô số liệu bắt đầu từ hàng thứ 104 (tới 118).
2. Mình đã highlight vùng dữ liệu mẫu của file.
3. Mình muốn vùng dữ liệu đó thành 1 hàng dài nối với nhau mà không cần chia thành nhiều hàng.
4. Các vùng này hiện tại theo nguyên tắc là: 7 cột, 15 hàng. Có một vài vùng nó không đồng nhất. Những vùng này mình sẽ sửa tay cũng được.

Do file quá lớn nên mình ko đính kèm, mình gửi kèm bằng link dropbox. Mình post bài có gì sai mong chỉ dẫn.

Cám ơn mọi người rất nhiều. Bác nào giúp em em xin hậu tạ chầu cafe tử tế ^^

Link file: https://www.dropbox.com/s/l3nf372saecmgsl/SWDOWN-VN-20100731.xlsx

Dữ liệu của bạn khủng thật đấy (mình chưa từng thấy) chắc là xuất ra từ phần mềm nào đó.
Nhưng theo mình bạn không nên sửa dữ liệu (hoặc đã sửa là sửa hết luôn). Vì nếu sửa dở dang thì người giúp bạn sẽ rất khó tìm thấy quy luật để xác định từng vùng dữ liệu cần nối.
Bạn cứ để nguyên dữ liệu và giải thích cách xác định vùng dữ liệu cần nối là đc rồi.

Cái này phải dùng VBA thôi chứ công thức là treo máy luôn :D
 
Dữ liệu của bạn khủng thật đấy (mình chưa từng thấy) chắc là xuất ra từ phần mềm nào đó.
Nhưng theo mình bạn không nên sửa dữ liệu (hoặc đã sửa là sửa hết luôn). Vì nếu sửa dở dang thì người giúp bạn sẽ rất khó tìm thấy quy luật để xác định từng vùng dữ liệu cần nối.
Bạn cứ để nguyên dữ liệu và giải thích cách xác định vùng dữ liệu cần nối là đc rồi.

Cái này phải dùng VBA thôi chứ công thức là treo máy luôn :D



Cái này là đề tài khoa học mình làm tay đó bạn àh...Không phải xuất từ kho dữ liệu nào cả.

Vì ban đầu mình làm theo hàng, nhưng do yêu cầu của người hướng dẫn nên mình phải chuyển đổi lại cái dữ liệu này thành 1 hàng. Bạn giúp mình với nhé.

Thanks bạn nhiều ^^
 
Cái này là đề tài khoa học mình làm tay đó bạn àh...Không phải xuất từ kho dữ liệu nào cả.

Vì ban đầu mình làm theo hàng, nhưng do yêu cầu của người hướng dẫn nên mình phải chuyển đổi lại cái dữ liệu này thành 1 hàng. Bạn giúp mình với nhé.

Thanks bạn nhiều ^^

Trong Excel 2007 trở lên chỉ có 16.384 cột, dữ liệu thực tế của bạn hơn số đó thì bạn xử lý thế nào?
 
Trong file mình gửi có highlight đoạn mẫu. Cứ đúng 7 cột 15 hàng là thành 1 hàng dữ liệu duy nhất (tương đương 1 hàng 99 cột).
 
Ra đâu cũng đc bạn. Sheet mới, hoặc nằm kế bên vùng hightlight để đối chiếu cũng đc ^^.

Bạn giúp mình nhé ^^ Thanks bạn nhiều

Tôi làm thử cho bạn 7 khối, bạn tự nghiên cứu và tối ưu nhé.

Mã:
Sub Gop()
    Dim sSQL As String, cnn As Object, rst As Object
    Dim i As Byte, recArray As Variant, recCount As Long, iRow As Long, iRun As Long
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
              ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";")
    iRow = 104
    For iRun = 0 To 7
        sSQL = ""
        For i = 1 To 7
            sSQL = sSQL & " SELECT F" & i & " AS GOP " & _
                           "FROM [Sheet1$A" & iRow & ":G" & iRow + 14 & "] " & _
                           "WHERE F" & i & " IS NOT NULL UNION ALL "
        Next
        Set rst = cnn.Execute(Left(sSQL, Len(sSQL) - 10))
        recArray = rst.GetRows
        recCount = UBound(recArray, 2) + 1
        Sheet2.Cells(Sheet2.[A65536].End(3).Offset(1).Row, 1).Resize(1, recCount).Value = recArray
        iRow = iRow + 15
    Next
    Sheet2.Select
    Erase recArray
    rst.Close: Set rst = Nothing
    cnn.Close: Set cnn = Nothing
 
End Sub
 
Tôi làm thử cho bạn 7 khối, bạn tự nghiên cứu và tối ưu nhé.

Mã:
Sub Gop()
    Dim sSQL As String, cnn As Object, rst As Object
    Dim i As Byte, recArray As Variant, recCount As Long, iRow As Long, iRun As Long
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
              ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";")
    iRow = 104
    For iRun = 0 To 7
        sSQL = ""
        For i = 1 To 7
            sSQL = sSQL & " SELECT F" & i & " AS GOP " & _
                           "FROM [Sheet1$A" & iRow & ":G" & iRow + 14 & "] " & _
                           "WHERE F" & i & " IS NOT NULL UNION ALL "
        Next
        Set rst = cnn.Execute(Left(sSQL, Len(sSQL) - 10))
        recArray = rst.GetRows
        recCount = UBound(recArray, 2) + 1
        Sheet2.Cells(Sheet2.[A65536].End(3).Offset(1).Row, 1).Resize(1, recCount).Value = recArray
        iRow = iRow + 15
    Next
    Sheet2.Select
    Erase recArray
    rst.Close: Set rst = Nothing
    cnn.Close: Set cnn = Nothing
 
End Sub


Hướng dẫn chi tiết giúp mình được không bạn...Mình cực gà phần excel !$@!!
 
Tôi đã làm trong file, bạn nhớ Enable Macro khi mở file nhé.

Mình coi file của bạn làm rồi. Mà sao nó lại thiếu 1 giá trị vậy bạn ơi ?

Ví dụ: cái highlight số cuối cùng phải là 398,7371.

Rùi giờ mình làm hết cho các số liệu đó như thế nào bạn nhỉ ?

Thanks bạn nhiều lắm luôn í }}}}}
 
Mình coi file của bạn làm rồi. Mà sao nó lại thiếu 1 giá trị vậy bạn ơi ?

Ví dụ: cái highlight số cuối cùng phải là 398,7371.

Rùi giờ mình làm hết cho các số liệu đó như thế nào bạn nhỉ ?

Thanks bạn nhiều lắm luôn í }}}}}

Nó phải theo thứ tự chứ bạn, cái mà bạn nói cuối cùng nó nằm ở cột A, sau khi cột A xong thì mới ghép đến cột B, bạn kiểm tra kỷ nhé.
 
Nó phải theo thứ tự chứ bạn, cái mà bạn nói cuối cùng nó nằm ở cột A, sau khi cột A xong thì mới ghép đến cột B, bạn kiểm tra kỷ nhé.

Theo như file chạy kế quả thì số cuối cùng là: 415,1934

http://gyazo.com/8164c29ecdfb736b75da7fe2c2bac5fb

Còn bản số liệu của mình số cuối cùng là: 398,7371

http://gyazo.com/c7a4b3551dfd04ef7cdf8701fae77ee2

Cái này mất số 398,7371
 
Cái này hình như là hệ tọa độ điểm point nào đó...........
 
Xin lỗi theo ý như bạn thì tôi không làm được.

Vậy nếu hàng đó mình bổ sung các giá trị 0 để nó đủ nội dung thì đc ko bạn ?

Hoặc dã dụ hàng đó để đó cũng được. Mình sẽ copy tay cho nó vào hàng cuối. Bạn hướng dẫn cho mình làm trên file của mình được không ?

Thanks bạn nhiều lắm
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn thử xem đúng ý bạn chưa.

Chọn khối dữ liệu cần nối.
Chạy macro
 

File đính kèm

Chép code sau vào module file của bạn:

Mã:
Function MergeRanges(ParamArray arguments() As Variant) As Variant()
    Dim cell As Range, temp() As Variant
    ReDim temp(0)
    For Each argument In arguments
      For Each cell In argument
        If cell <> "" Then
          temp(UBound(temp)) = cell
          ReDim Preserve temp(UBound(temp) + 1)
        End If
      Next cell
    Next argument
    ReDim Preserve temp(UBound(temp) - 1)
    MergeRanges = temp
End Function

Rồi chạy thủ tục sau:

Mã:
Sub Gop()
    Dim iRow As Long, iRun As Long, rng As Range
    iRow = 104
    Sheet2.Cells.ClearContents
    For iRun = 0 To 30588
        Set rng = Sheet1.Range("A" & iRow & ":G" & iRow + 14)
        Sheet2.Cells(Sheet2.[A65536].End(3).Offset(1).Row, 1).Resize _
                    (1, UBound(MergeRanges(rng))).Value = MergeRanges(rng)
        iRow = iRow + 15
    Next
    Sheet2.Select
 
End Sub
 
Chép code sau vào module file của bạn:

Mã:
Function MergeRanges(ParamArray arguments() As Variant) As Variant()
    Dim cell As Range, temp() As Variant
    ReDim temp(0)
    For Each argument In arguments
      For Each cell In argument
        If cell <> "" Then
          temp(UBound(temp)) = cell
          ReDim Preserve temp(UBound(temp) + 1)
        End If
      Next cell
    Next argument
    ReDim Preserve temp(UBound(temp) - 1)
    MergeRanges = temp
End Function

Rồi chạy thủ tục sau:

Mã:
Sub Gop()
    Dim iRow As Long, iRun As Long, rng As Range
    iRow = 104
    Sheet2.Cells.ClearContents
    For iRun = 0 To 30588
        Set rng = Sheet1.Range("A" & iRow & ":G" & iRow + 14)
        Sheet2.Cells(Sheet2.[A65536].End(3).Offset(1).Row, 1).Resize _
                    (1, UBound(MergeRanges(rng))).Value = MergeRanges(rng)
        iRow = iRow + 15
    Next
    Sheet2.Select
 
End Sub


Xin lỗi vì làm phiền bạn. THiệt tình là mình ko rành về cái fần macro này nên mình không biết làm như thế nào cả. Bạn chỉ chi tiết giúp mình với -\\/.
 
Để mình cố -_- có 30K dòng thui -+*/ Bạn ở đâu cho mình mời bạn 1 chầu cafe đc hem ^^

Nói túm lại nó sẽ lấy hết số đó bạn, chỉ có 1 số duy nhất ở dòng cuối cùng nó nằm riêng lẻ thôi. Để xử cái này thì bạn tự làm nhé.
 

Bài viết mới nhất

Back
Top Bottom