vuongtoituonglai
Thành viên thường trực




- Tham gia
- 7/5/14
- Bài viết
- 350
- Được thích
- 47
Một ngày sắp trôi qua rồi, sao không có cao thủ nào ra tay giúp đỡ mình vậy.
Có cao thủ nào ra tay giúp mình với. cảm ơn nhiều
Cảm ơn bạn, sau khi xem đoạn video mình không làm được gì cả, bạn có thể chỉ thêm cho mình.
Không khó thì bạn giúp mình đi, nhưng chỉ có điều lấy dữ liệu từ sheet 1,2,3 qua sheet Ton bạn nhé. Do dữ liệu ban đầu định dạng các cột của sheet 1,2,3 như vậy rồi nên giờ không sửa lại được vì còn những phần mềm có liên quan đến dữ lieu này. Bạn cố gang giúp mình nhé. Cảm ơnViệc này chẳng có gì khó, chỉ có cái bạn lấy dữ liệu từ sheet Ton qua sheet 1, 2, 3 tiêu đề cột không thống nhất nên mình tự làm khó cho mình trong việc trích lọc dữ liệu.
Cho mình hỏi trước:
1. Dữ liệu của bạn từ hệ thống nào ra hay là do điền bằng tay?
2. Dữ liệu có nhiều không?
3. Cấu trúc của bảng tính cần lấy dữ liệu có thường xuyên thay đổi không?
Cảm ơn bạn đã quan tâm giúp đỡ
1. Dữ liệu mình nhập vào bằng tay
2. Dữ liệu của sheet 1,2,3 cộng lại nhiều nhất khoảng 1000 dòng
3. Dữ liệu của sheet 1,2,3 hầu như đều có thay đổi mỗi tháng, mỗi tháng mình phải tổng hợp dữ liệu từ sheet 1,2,3 qua sheet "Ton" một lần rồi sau đó in ra để đi kiểm hàng tồn kho thực tế.
Bạn cố gắng nghiêng cứu giúp mình nhé. Cảm ơn bạn.
Cảm ơn kuldokk rất nhiều, mình có thể thêm đoạn code này vào module1 được không bạn? Nếu được thì thêm vào chổ nào? Bạn chỉ mình nhé.
With Sheets("Ton")
.Font.Name = "Courier New"
.Font.Size = 10
End With
With .[F5].Resize(k)
.NumberFormat = "#,##0"
.Font.Size = 14
.Font.Bold = True
.Font.ColorIndex = 3
End With
With .[B55].Resize(k)
.Font.Size = 10
.Font.ColorIndex = 1
End With
Public Sub chuyen_du_lieu
...
[chèn code vào đây]
MsgBox "Done in " & (Timer - start) & " s."
...
end sub
Cảm ơn bạn nhé, mình làm theo bạn hướng dẫn nhưng code không chạy được bạn kiểm tra dùm mình làm sai chổ nào. Phần code mình thêm vào có màu đỏ nhé. Chân thành cảm ơn.Anh có thể thêm vào Sub chuyen_du_lieu, ngay trước đoạn
Mã:Public Sub chuyen_du_lieu ... [chèn code vào đây] MsgBox "Done in " & (Timer - start) & " s." ... end sub
chú ý thay k bằng số phù hợp.
Code bị sai nên xóa bỏ.......Chào các anh, chị và các bạn!
Mình có một vấn đề cần được sự giúp đỡ của quý anh chị và các bạn. Tất cả những gì mình mong muốn được sự giúp đỡ đều có trong file.
Rất mong nhận được sự đỡ.
Cảm ơn bạn nhé, mình làm theo bạn hướng dẫn nhưng code không chạy được bạn kiểm tra dùm mình làm sai chổ nào. Phần code mình thêm vào có màu đỏ nhé. Chân thành cảm ơn.
Public Sub chuyen_du_lieu()
Application.ScreenUpdating = False
Dim dong_cuoi_sheet_ton As Long
Dim start As Double
Dim borderTypeI As Integer, i As Integer
Dim stt() As Long
start = Timer
'xoa du lieu
dong_cuoi_sheet_ton = dong_cuoi_cung_cua_cot("Ton", "B")
If dong_cuoi_sheet_ton > 5 Then
xoa_du_lieu
End If
'copy du lieu
dong_cuoi_sheet_ton = dong_cuoi_cung_cua_cot("Ton", "B")
copy_du_lieu_tu_sheet1 (dong_cuoi_sheet_ton)
dong_cuoi_sheet_ton = dong_cuoi_cung_cua_cot("Ton", "B")
copy_du_lieu_tu_sheet2 (dong_cuoi_sheet_ton)
dong_cuoi_sheet_ton = dong_cuoi_cung_cua_cot("Ton", "B")
copy_du_lieu_tu_sheet3 (dong_cuoi_sheet_ton)
dong_cuoi_sheet_ton = dong_cuoi_cung_cua_cot("Ton", "B")
ReDim stt(1 To (dong_cuoi_sheet_ton - 4), 1 To 1)
For i = 1 To UBound(stt, 1)
stt(i, 1) = i
Next i
'tinh toan
With ActiveWorkbook.Sheets("Ton")
.Range("G5:G" & dong_cuoi_sheet_ton).Formula = "=H5*E5"
.Range("I5:I" & dong_cuoi_sheet_ton).Formula = "=IF(F5>G5,kiem_lai,"""")"
.Range("J5:J" & dong_cuoi_sheet_ton).Formula = "=F5-G5"
For borderTypeI = 7 To 12
With .Range("A5:K" & dong_cuoi_sheet_ton).Borders(borderTypeI)
.LineStyle = xlContinuous
End With
Next
.Range("A5").Resize((dong_cuoi_sheet_ton - 4), 1) = stt
End With
With Sheets("Ton")
.Font.Name = "Courier New"
.Font.Size = 10
End With
With .[F5].Resize(6)
.NumberFormat = "#,##0"
.Font.Size = 14
.Font.Bold = True
.Font.ColorIndex = 3
End With
With .[B55].Resize(11)
.Font.Size = 10
.Font.ColorIndex = 1
End With
MsgBox "Done in " & (Timer - start) & " s."
Application.ScreenUpdating = True
End Sub
bác thử lại thế này nhé
Code bị sai nên xóa bỏ.......
Code bị sai nên xóa bỏ.......
Cảm ơn bạn nhé. Bạn học VBA bao lâu thì viết được code này vậy?
bác thử lại thế này nhé
Chào các anh chị và các bạn GPE!Có tí vấn đề rồi bạn ơi, từ dòng số 5 trở xuống format như vậy là ổn rồi, còn dòng số 1 đến 4 thì bạn chỉnh lại dùm mình là không format gì cả. Cảm ơn bạn nhé
Thay vì sử dụng code sao bạn không sử dụng Data Consolidate sẵn có để tổng hợp?Chào các anh chị và các bạn GPE!
Bài #15 đã hỗ trợ tôi viết code và đã sử dụng trong thời gian dài, nay dữ liệu có sự thay đổi để đồng nhất các Sheet nên mong các anh chị và các bạn điều chỉnh rút ngắn code để code hoạt động được nhanh hơn.
Chân thành cảm ơn.
Mình chua biết Data Consolidate là gì, mình sẽ tìm hiểu. Hàng tháng mình có khoảng 30 file excel cần phải tổng hợp dữ lieu và sau đó in ra để phát hành.Thay vì sử dụng code sao bạn không sử dụng Data Consolidate sẵn có để tổng hợp?
THử XEM CODE Mới Này XEMMình chua biết Data Consolidate là gì, mình sẽ tìm hiểu. Hàng tháng mình có khoảng 30 file excel cần phải tổng hợp dữ lieu và sau đó in ra để phát hành.
cảm ơn bạn đã quan tâm.
Sub UPDATE_DATA()
Application.ScreenUpdating = False
Dim WS As Worksheet, Arrsh As String, endr As Long
Sheet4.[5:6000].Clear: Sheet5.[5:6000].Clear
Arrsh = "?TON?TEMP?"
For Each WS In Worksheets
If InStr(1, Arrsh, "?" & WS.Name & "?", vbTextCompare) = 0 Then
WS.Range("A5:P" & WS.[A6500].End(3).Row).Copy
Sheets("TEMP").Range("A65536").End(3).Offset(1).PasteSpecial (12)
End If
Application.CutCopyMode = False
Next
Sheet5.[A4:P123000].AdvancedFilter 2, Sheet4.[M2:M3], Sheet4.[A4:K4], False
Sheet5.[5:6000].Clear
With Sheet4
endr = [A65536].End(3).Row
.Range("H5:h" & endr).FormulaR1C1 = "=RC[1]*RC[-3]"
.Range("j5:j" & endr).FormulaR1C1 = "=IF(RC[-3]>RC[-2],""NG"",""OK"")"
.Range("a5:a" & endr).Value = Evaluate("ROW(R:R)")
.Range("A5:k" & endr).Borders.LineStyle = 2
End With
Application.ScreenUpdating = True
End Sub
Cảm ơn bạn Lê Duy Thương Code chạy mình thấy đúng rồi. Do mình có nhiều file excel cần phải sử dung code như vầy có hướng nào phát triển code thành dạng Add In và hiện diện lên thanh Ribbon của Office không bạn. Nếu được bạn nghiêng cứu giúp mình nhéTHử XEM CODE Mới Này XEM
THêM FILEPHP:Sub UPDATE_DATA() Application.ScreenUpdating = False Dim WS As Worksheet, Arrsh As String, endr As Long Sheet4.[5:6000].Clear: Sheet5.[5:6000].Clear Arrsh = "?TON?TEMP?" For Each WS In Worksheets If InStr(1, Arrsh, "?" & WS.Name & "?", vbTextCompare) = 0 Then WS.Range("A5:P" & WS.[A6500].End(3).Row).Copy Sheets("TEMP").Range("A65536").End(3).Offset(1).PasteSpecial (12) End If Application.CutCopyMode = False Next Sheet5.[A4:P123000].AdvancedFilter 2, Sheet4.[M2:M3], Sheet4.[A4:K4], False Sheet5.[5:6000].Clear With Sheet4 endr = [A65536].End(3).Row .Range("H5:h" & endr).FormulaR1C1 = "=RC[1]*RC[-3]" .Range("j5:j" & endr).FormulaR1C1 = "=IF(RC[-3]>RC[-2],""NG"",""OK"")" .Range("a5:a" & endr).Value = Evaluate("ROW(R:R)") .Range("A5:k" & endr).Borders.LineStyle = 2 End With Application.ScreenUpdating = True End Sub
Cảm ơn hpkhuong code chạy mình thấy dư 2 dòngBạn thử với code này:
Mã:Option Explicit Sub GPE() Dim Ws As Worksheet, Arr, dArr, I&, K& ReDim dArr(1 To 100000, 1 To 11) Application.ScreenUpdating = False For Each Ws In Worksheets If Ws.Name <> "Ton" Then Arr = Ws.Range(Ws.[A5], Ws.[A6500].End(3)).Resize(, 12).Value For I = 1 To UBound(Arr) K = K + 1 dArr(K, 1) = K dArr(K, 2) = Arr(I, 3) dArr(K, 3) = Arr(I, 7) dArr(K, 4) = Arr(I, 9) dArr(K, 5) = Arr(I, 11) dArr(K, 6) = Arr(I, 12) dArr(K, 7) = Empty dArr(K, 8) = "=RC[1]*RC[-3]" dArr(K, 9) = Arr(I, 5) dArr(K, 10) = "=IF(RC[-3]>RC[-2],""NG"",""OK"")" dArr(K, 11) = "=RC[-4]-RC[-3]" Next I End If Next Ws With Sheets("Ton") .Range("A5:K100000").ClearContents If K Then .Range("A5").Resize(K, 11) = dArr .Range("A5").Resize(K, 11).Borders.ColorIndex = 1 End If End With Application.ScreenUpdating = True End Sub
và lúc này lại cần đến anh nhân viên mạnh mẽ hpKhuong lấy dữ liệu từ TXT gắn vào sheet bằng vi ba . há há1. Là sao? dư dòng nào đâu? Có bao nhiêu dòng bên sheet 1,2,3 thì nó mang qua hết. Tổng là 26 dòng mà.... Tôi test chẳng thấy dư dòng nào cả
2. Bạn nghĩ sao việc code cho bạn 1 đoạn dùng để tổng hợp (mỗi tháng chạy 1 lần để mục đích đi kiểm kê thôi) mà phải tùy biến thành addin... cho tiện. Với cái việc copy code vào và chạy 1 phát mà cũng không làm được ah? phải đi cài addin ....Thì tôi không hiểu nổi bạn làm biếng đến cỡ nào rồi...
Công ty tôi nhân viên kế toán kho đi kiểm kê mấy chục ngàn hàng...họ dùng máy bắn, sau đó cắm máy vào PC để xuất ra file TXT, sau đó từ TXT này mới dùng excel cắn xén....tùm lum thứ mới ra được cái dữ liệu thô.........từ đó mà lên bảng kiểm kê....đối chiếu với sổ sách..... Đấy...........việc của họ nó dài hơi và thủ công vậy đó mà họ vẫn làm được....chứ chưa nói chi đến chuyện nhấp chuột là có số liệu...
Còn bạn chỉ việc chạy code thôi mà... Nói túm lại bó tay.canh....![]()
Ah, đã kiểm tra lại rồi hpkhuong ơi, kết quả đúng rồi cảm ơn bạn nhé nhưng bạn có thể chỉnh lại dùm mình lấy dữ liệu của sheet 1,2,3 qua sheet Ton thôi bởi vì file có thể có những sheet linh tinh khác không cần lấy qua sheet Ton1. Là sao? dư dòng nào đâu? Có bao nhiêu dòng bên sheet 1,2,3 thì nó mang qua hết. Tổng là 26 dòng mà.... Tôi test chẳng thấy dư dòng nào cả
2. Bạn nghĩ sao việc code cho bạn 1 đoạn dùng để tổng hợp (mỗi tháng chạy 1 lần để mục đích đi kiểm kê thôi) mà phải tùy biến thành addin... cho tiện. Với cái việc copy code vào và chạy 1 phát mà cũng không làm được ah? phải đi cài addin ....Thì tôi không hiểu nổi bạn làm biếng đến cỡ nào rồi...
Công ty tôi nhân viên kế toán kho đi kiểm kê mấy chục ngàn hàng...họ dùng máy bắn, sau đó cắm máy vào PC để xuất ra file TXT, sau đó từ TXT này mới dùng excel cắn xén....tùm lum thứ mới ra được cái dữ liệu thô.........từ đó mà lên bảng kiểm kê....đối chiếu với sổ sách..... Đấy...........việc của họ nó dài hơi và thủ công vậy đó mà họ vẫn làm được....chứ chưa nói chi đến chuyện nhấp chuột là có số liệu...
Còn bạn chỉ việc chạy code thôi mà... Nói túm lại bó tay.canh....![]()
Bài #26 hiện cho kết quả đúng rồi nhưng mình có vấn đề bạn nào biết giúp mình với. File của mình có nhiều sheet nhưng mình chỉ lấy dữ liệu từ sheet 1,2,3 qua sheet TonBạn thử với code này:
Mã:Option Explicit Sub GPE() Dim Ws As Worksheet, Arr, dArr, I&, K& ReDim dArr(1 To 100000, 1 To 11) Application.ScreenUpdating = False For Each Ws In Worksheets If Ws.Name <> "Ton" Then Arr = Ws.Range(Ws.[A5], Ws.[A6500].End(3)).Resize(, 12).Value For I = 1 To UBound(Arr) K = K + 1 dArr(K, 1) = K dArr(K, 2) = Arr(I, 3) dArr(K, 3) = Arr(I, 7) dArr(K, 4) = Arr(I, 9) dArr(K, 5) = Arr(I, 11) dArr(K, 6) = Arr(I, 12) dArr(K, 7) = Empty dArr(K, 8) = "=RC[1]*RC[-3]" dArr(K, 9) = Arr(I, 5) dArr(K, 10) = "=IF(RC[-3]>RC[-2],""NG"",""OK"")" dArr(K, 11) = "=RC[-4]-RC[-3]" Next I End If Next Ws With Sheets("Ton") .Range("A5:K100000").ClearContents If K Then .Range("A5").Resize(K, 11) = dArr .Range("A5").Resize(K, 11).Borders.ColorIndex = 1 End If End With Application.ScreenUpdating = True End Sub
Cảm ơn hpkhuong nhé. Dữ lieu sheet 1,2,3 nếu nhiều hơn so với hiện tại khi lấy qua sheet Ton thì tự động Border, còn khi dữ liệu ít hơn thì có cách nào bỏ phần Border dư không? Bạn giúp mình thêm code vào cho hoàn chỉnh nhé.Bạn lấy lại code này.
Mã:Option Explicit Sub GPE() Dim Ws As Worksheet, Arr, dArr, I&, K& ReDim dArr(1 To 100000, 1 To 11) Application.ScreenUpdating = False For Each Ws In Worksheets If Ws.Name = "1" Or Ws.Name = "2" Or Ws.Name = "3" Then Arr = Ws.Range(Ws.[A5], Ws.[A6500].End(3)).Resize(, 12).Value For I = 1 To UBound(Arr) K = K + 1 dArr(K, 1) = K dArr(K, 2) = Arr(I, 3) dArr(K, 3) = Arr(I, 7) dArr(K, 4) = Arr(I, 9) dArr(K, 5) = Arr(I, 11) dArr(K, 6) = Arr(I, 12) dArr(K, 7) = Empty dArr(K, 8) = "=RC[1]*RC[-3]" dArr(K, 9) = Arr(I, 5) dArr(K, 10) = "=IF(RC[-3]>RC[-2],""NG"",""OK"")" dArr(K, 11) = "=RC[-4]-RC[-3]" Next I End If Next Ws With Sheets("Ton") .Range("A5:K100000").ClearContents If K Then .Range("A5").Resize(K, 11) = dArr .Range("A5").Resize(K, 11).Borders.ColorIndex = 1 End If End With Application.ScreenUpdating = True End Sub
muốn giúp lắm nhưng nhìn dữ lieu như một đám rừng. chăc đọc dữ liệu và hiểu chắc hết 3 tháng nên đành chờ cao nhân vậyChào các ace diễn đàn,
Tiện sẵn có thread này về tổng hợp dữ liệu mình xin hỏi luôn.
Mình có file master tổng hợp dữ liệu từ nhiều file khác nhau trong cùng 1 folder, những file này thay đổi hằng ngày.
Trong file master đã có code copy nội dung của các file đó vào từng sheet tương ứng rôi, tuy nhiên mình chạy thì báo lỗi.
Ace xem giúp và sửa giúp mình với. Mình thì coi như ko biết gì code hết mà rất cần để chạy report cho lẹ
File này là của một bạn cùng cty đã nghỉ để lại.
P/s Lỗi ở đây ko kể lỗi do thiếu file trong folder vi những file đó mình cũng ko cần nữa. Lỗi mình muốn nói là code đó ko copy dc dữ liệu từ các file có sẵn.
anh cứ cố gắng đọc hiểu 3 tháng đi , vì mấy người viết chen ngang kiểu này cứ quăng bài xong 6 tháng sau mới quay lại xem kết quả màmuốn giúp lắm nhưng nhìn dữ lieu như một đám rừng. chăc đọc dữ liệu và hiểu chắc hết 3 tháng nên đành chờ cao nhân vậy![]()
Hi bạn, cái code đó open file trong thư mục, copy data, rồi paste vào sheet tương ứng trong file master. Ví dụ mở file I2120 rồi copy data trong đó vào sheet I2120 trong file mastermuốn giúp lắm nhưng nhìn dữ lieu như một đám rừng. chăc đọc dữ liệu và hiểu chắc hết 3 tháng nên đành chờ cao nhân vậy![]()