Nội dung yêu cầu là lấy dữ liệu từ các ô đã bị trộn, trong khi mở file ra thì dữ liệu được lấy từ dữ liệu chưa trộn rồi trộn lại >>> cốc hiểue muốn lọc lấy dữ liệu khi điều kiện là đã bị trộn ô
anh chị nào giỏi lập trinh giúp em với nhé
anh ơi ý là đáp án là bên sheets kết quả đó anh cột C là cố định và tương ứng với loại đó thì liệt kê những code, diển giải, số tiền raNội dung yêu cầu là lấy dữ liệu từ các ô đã bị trộn, trong khi mở file ra thì dữ liệu được lấy từ dữ liệu chưa trộn rồi trộn lại >>> cốc hiểu
e muốn lọc lấy dữ liệu khi điều kiện là đã bị trộn ô
anh chị nào giỏi lập trinh giúp em với nhé
anh ơi, có cách nào để cột C cố định và chỉ upload dữ liệu mấy cột kia thôi được không anh, trường hợp nếu như cột code có thể nhiều hơn 8 dòng thì có thể insert ra thêm dòng được không?- bạn tải file đính kèm, cho chạy Macro.
- click nút Update tại sheet KET QUA để xem kết quả nhé !
[GPECODE=vb]
Sub SapXepSoLieu()
Dim Answer
Dim ws As Worksheet
Set ws = Sheets("KETQUA")
ws.Select
mSg = mSg & "Xoa' so' lieu vung`: C6:F65000" & " tai. sheet " & ws.Name & vbNewLine & "truoc khi Update"
Answer = MsgBox(mSg, vbYesNo + vbQuestion)
If Answer = vbNo Then Exit Sub
'If Answer = vbYes Then
ws.Range("C6:F65000").Clear 'loai. bo? noi. dung + format cell
With Sheets("DATA")
If .FilterMode Then .ShowAllData 'do Set vung
Set vung = .Range(.Range("B65000").End(xlUp), .Range("B5"))
End With
'copy 2 vung`
vung.Offset(, 3).Copy Destination:=ws.Range("C6") 'cot. Group
vung.Resize(, 3).Copy Destination:=ws.Range("D6") 'Code, dien giai, So tien
'sort A->Z cot Group
With Range(Range("C65000").End(xlUp), Range("F5"))
.Sort key1:=Range("C5"), order1:=xlAscending, Header:=xlYes
End With
'tron. o^ (cot Group)
Call MergeSameCell(Range([C65000].End(xlUp), [C5])) 'bao gom` Header
Set ws = Nothing: Set vung = Nothing
End Sub
Sub MergeSameCell(WorkRng As Range)
'http://www.extendoffice.com/documents/excel/1138-excel-merge-same-value.html
Dim xRows As Integer, Rng As Range
xRows = WorkRng.Rows.Count
Application.DisplayAlerts = False 'do khi Merger cell -> se~ show 1 msgbox
For Each Rng In WorkRng.Columns
'For Each Rng In WorkRng 'error
For i = 1 To xRows - 1
For j = i + 1 To xRows
If Rng.Cells(i, 1).Value <> Rng.Cells(j, 1).Value Then
Exit For
End If
Next
With WorkRng.Parent.Range(Rng.Cells(i, 1), Rng.Cells(j - 1, 1))
.Merge
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
i = j - 1
Next
Next
Application.DisplayAlerts = True
End Sub
[/GPECODE]
Thử code này luôn coi saoanh ơi ý là đáp án là bên sheets kết quả đó anh cột C là cố định và tương ứng với loại đó thì liệt kê những code, diển giải, số tiền ra
Sub GetDataMerged()
Application.DisplayAlerts = False
Dim Sh As Worksheet, tam, nguon(), i
Set Sh = Sheets("KETQUA")
Sheets("DATA").[B4:H10000].AdvancedFilter 2, , Sh.[C5:F5], 0
Sh.Range(Sh.[C5], Sh.[F10000].End(3)).Sort [C5], Header:=1
nguon = Sh.Range(Sh.[C5], Sh.[C10000].End(3))
With CreateObject("scripting.dictionary")
For i = 2 To UBound(nguon)
If Not .exists(nguon(i, 1)) Then .Add nguon(i, 1), ""
Next
tam = .keys
End With
For i = 0 To UBound(tam)
With Sh.Range(Sh.[C6], Sh.[C10000].End(3))
.AutoFilter 1, tam(i)
.MergeCells = True
.VerticalAlignment = xlCenter
.AutoFilter
End With
Next
Sh.Range(Sh.[C5], Sh.[F10000].End(3)).Borders.Value = 1
Application.DisplayAlerts = tue
End Sub
cám ơn anh, em chỉ muốn cột C cố định như vậy chứ không muốn chỉ lấy những dòng có data, nếu được a viết giúp em lại nhé, cột C tại sheet kết quả là cố định vậy luôn, hiện tại khoảng cách giữa các mã là 8 dòng,như file gốc của em đưa lên đó.Thử code này luôn coi sao
PHP:Sub GetDataMerged() Application.DisplayAlerts = False Dim Sh As Worksheet, tam, nguon(), i Set Sh = Sheets("KETQUA") Sheets("DATA").[B4:H10000].AdvancedFilter 2, , Sh.[C5:F5], 0 Sh.Range(Sh.[C5], Sh.[F10000].End(3)).Sort [C5], Header:=1 nguon = Sh.Range(Sh.[C5], Sh.[C10000].End(3)) With CreateObject("scripting.dictionary") For i = 2 To UBound(nguon) If Not .exists(nguon(i, 1)) Then .Add nguon(i, 1), "" Next tam = .keys End With For i = 0 To UBound(tam) With Sh.Range(Sh.[C6], Sh.[C10000].End(3)) .AutoFilter 1, tam(i) .MergeCells = True .VerticalAlignment = xlCenter .AutoFilter End With Next Sh.Range(Sh.[C5], Sh.[F10000].End(3)).Borders.Value = 1 Application.DisplayAlerts = tue End Sub
theo mình hiểu thì bạn chỉ lọc các giá trị đã cài sẵn tại sheet KETQUA ---> bạn tải file đính kèm xem sao nhé !anh ơi, có cách nào để cột C cố định và chỉ upload dữ liệu mấy cột kia thôi được không anh,
...
vẫn chưa hiểu chỗ này, có lẽ bạn muốn điền thêm số liệu (thêm row) vào sheet KETQUA ???trường hợp nếu như cột code có thể nhiều hơn 8 dòng thì có thể insert ra thêm dòng được không?
anh có thể hướng dẫn làm bằng phương pháp này được không, em có làm rồi, mà nó không được giống như anh,Bài này chỉ cần PivotTable, cái rẹt ra ngay kết quả trong 10s, cập nhật kết quả mới khi data thay đổi luôn
Khỏe re... khỏi code kiết gì ráo
View attachment 120754
anh có thể hướng dẫn làm bằng phương pháp này được không, em có làm rồi, mà nó không được giống như anh,
có 4 menu trong chức năng này
1.report fiter
2.column labels
3.row labels
4.value
e kéo từng tiêu đề bỏ vào mà nó ko giống của anh, nhờ anh hướng dẫn giúp em nhé
cám ơn anh