- Tham gia
- 5/6/23
- Bài viết
- 106
- Được thích
- 19
Không có file, chỉ gửi hình. Mình xin gửi code hìnhChào tất cả các bạn. Tôi cần 1 đoạn code xuất dữ liệu như sau. Vùng dữ liệu của tôi là A1100000 tôi muốn cứ cách 5 dòng xuất ra vùng cột G
cụ thể các dòng (1,6,11,16...). Xin chân thành cảm ơn
View attachment 292865
Bài này dễ nên có nhiều cách, tuy nhiên sử dụng filter để copy qua mới là thú vịCái này thì cần gì VBA bạn.
G1 = 1
G2 = G1 + 5
Tương tự kéo công thức cột G xuống
Mấy giá trị bên cạnh thì bạn dùng hàm Vlookup hoặc Index + Match sang là được.
Anh có thể chỉ giúp để em và mọi người học hỏi được khôngBài này dễ nên có nhiều cách, tuy nhiên sử dụng filter để copy qua mới là thú vị![]()
Bạn thử xem sao đã, kiếm thú vui hihiAnh có thể chỉ giúp để em và mọi người học hỏi được không![]()
Nếu filter theo màu vàng rồi copy thì chắc em làm được, còn viết công thức với filter thì em không có tí ý tưởng gì anh ạBạn thử xem sao đã, kiếm thú vui hihi
Nhiều cái mốc xì gì bạn.Bài này dễ nên có nhiều cách, tuy nhiên sử dụng filter để copy qua mới là thú vị![]()
Mình có nói công thức đâu, bước 1 thì filter cột stt bằng "*1" -> OK. Bước 2 thì filter "*6" tick vào cái ô khoanh đỏ là xongNếu filter theo màu vàng rồi copy thì chắc em làm được, còn viết công thức với filter thì em không có tí ý tưởng gì anh ạ
Với bài này thì em sử dụng hàm Xlookup là tối ưu nhất trong khả năng.
Nhiều khi thớt chưa biết mà do bác mách nước nên các thành viên khác mới biết đâyNhiều cái mốc xì gì bạn.
Thớt đã biết mánh GPE từ đầu rồi: Muốn vòi code cho dễ thì cứ việc thêm chi tiết dữ liệu khủng hằng trăm ngàn dòng.
Cái vụ Add current selection filter này đúng là giờ em mới biết luôn anh, đúng là lâu nay filter phà phà mà tối cổ quá.Mình có nói công thức đâu, bước 1 thì filter cột stt bằng "*1" -> OK. Bước 2 thì filter "*6" tick vào cái ô khoanh đỏ là xong
View attachment 292870
Nhiều khi thớt chưa biết mà do bác mách nước nên các thành viên khác mới biết đây![]()
Sub cong_thuc()
Dim i As Integer
Dim j As Integer
j = 1
For i = 1 To 1000 Step 5
Sheets("Sheet1").Range("G" & j).FormulaR1C1 = "=R" & i & "C1"
j = j + 1
Next i
End Sub
Sub viet_binh_thuong()
Dim i As Integer
Dim j As Integer
j = 1
For i = 1 To 1000 Step 5
Sheets("Sheet1").Range("G" & j).Formula = "=A" & i
j = j + 1
Next i
End Sub
Sub viet_bang_mang()
Dim dataArray() As Variant
Dim i As Integer
Dim j As Integer
dataArray = Sheets("Sheet1").Range("A1:A1000").Value
j = 1
For i = 1 To 1000 Step 5
Sheets("Sheet1").Range("G" & j).Value = dataArray(i, 1)
j = j + 1
Next i
End Sub
Bài này bạn cũng có thể dùng công thức ở cột G1
=INDEX(A:A, (ROW()-1)*5+1)
Bài đã được tự động gộp:
Ngẫm lại mình cũng hay xin code, trợ giúp đồng môn xin code.
Cách 1
Mã:Sub cong_thuc() Dim i As Integer Dim j As Integer j = 1 For i = 1 To 1000 Step 5 Sheets("Sheet1").Range("G" & j).FormulaR1C1 = "=R" & i & "C1" j = j + 1 Next i End Sub
Cách 2
Mã:Sub viet_binh_thuong() Dim i As Integer Dim j As Integer j = 1 For i = 1 To 1000 Step 5 Sheets("Sheet1").Range("G" & j).Formula = "=A" & i j = j + 1 Next i End Sub
Cách 3:
Mã:Sub viet_bang_mang() Dim dataArray() As Variant Dim i As Integer Dim j As Integer dataArray = Sheets("Sheet1").Range("A1:A1000").Value j = 1 For i = 1 To 1000 Step 5 Sheets("Sheet1").Range("G" & j).Value = dataArray(i, 1) j = j + 1 Next i End Sub
Lưu ý cột A dữ liệu tượng trưng và có trùng mã nên ko thế dùng VlookupCái này thì cần gì VBA bạn.
G1 = 1
G2 = G1 + 5
Tương tự kéo công thức cột G xuống
Mấy giá trị bên cạnh thì bạn dùng hàm Vlookup hoặc Index + Match sang là được.
Code căn bản không có gì xấu. Không tự viết được thì xin cũng chả sao.Ngẫm lại mình cũng hay xin code, trợ giúp đồng môn xin code.
...
Sub vung_du_lieu_buoc_nhay_nam()
Dim dataArray() As Variant
Dim i As Integer
Dim j As Integer
dataArray = Sheets("Sheet1").Range("A1:D1000").Value
j = 1
For i = 1 To 1000 Step 5
Sheets("Sheet1").Range("G" & j).Value = dataArray(i, 1)
Sheets("Sheet1").Range("H" & j).Value = dataArray(i, 2)
Sheets("Sheet1").Range("I" & j).Value = dataArray(i, 3)
Sheets("Sheet1").Range("J" & j).Value = dataArray(i, 4)
j = j + 1
Next i
End Sub
Nếu không dùng VBA thì mọi thứ khác đều có thể Ctrl+Z để chữa tính nhầm....
Nhiều khi thớt chưa biết mà do bác mách nước nên các thành viên khác mới biết đây![]()
Bài này mình nghĩ không cần dùng đến VBA đâu.Chào tất cả các bạn. Tôi cần 1 đoạn code xuất dữ liệu như sau. Vùng dữ liệu của tôi là A1100000 tôi muốn cứ cách 5 dòng xuất ra vùng cột G
cụ thể các dòng (1,6,11,16...). Xin chân thành cảm ơn
View attachment 292865
cảm ơn bạn. Đã test dữ liệu 800.000 dòng uống xong ly cà phê nó còn chưa chạy xong ( đã đổi biến Integer thành và Long và chưa thêm Application.ScreenUpdating = False )Bài của bạn là vùng dữ liệu bạn dùng code này thử
Mã:Sub vung_du_lieu_buoc_nhay_nam() Dim dataArray() As Variant Dim i As Integer Dim j As Integer dataArray = Sheets("Sheet1").Range("A1:D1000").Value j = 1 For i = 1 To 1000 Step 5 Sheets("Sheet1").Range("G" & j).Value = dataArray(i, 1) Sheets("Sheet1").Range("H" & j).Value = dataArray(i, 2) Sheets("Sheet1").Range("I" & j).Value = dataArray(i, 3) Sheets("Sheet1").Range("J" & j).Value = dataArray(i, 4) j = j + 1 Next i End Sub
rồi Dữ liệu 1 triệu dòng kéo như bạn xong Banh máy luôn, treo luôn kakaBài này mình nghĩ không cần dùng đến VBA đâu.
Bạn thử cách này xem sao:
- E1 = 1
- E2 = MOD(ROW(E1),5)+1. Kéo công thức cho đến hết
- Filter cột E = 1. Copy sang vùng bạn cần
Tất cả các cách bạn giúp thực sự không có tính tốc độ khi dữ liệu lớn .dù sao cảm ơn bạnBài này bạn cũng có thể dùng công thức ở cột G1
=INDEX(A:A, (ROW()-1)*5+1)
Bài đã được tự động gộp:
Ngẫm lại mình cũng hay xin code, trợ giúp đồng môn xin code.
Cách 1
Mã:Sub cong_thuc() Dim i As Integer Dim j As Integer j = 1 For i = 1 To 1000 Step 5 Sheets("Sheet1").Range("G" & j).FormulaR1C1 = "=R" & i & "C1" j = j + 1 Next i End Sub
Cách 2
Mã:Sub viet_binh_thuong() Dim i As Integer Dim j As Integer j = 1 For i = 1 To 1000 Step 5 Sheets("Sheet1").Range("G" & j).Formula = "=A" & i j = j + 1 Next i End Sub
Cách 3:
Mã:Sub viet_bang_mang() Dim dataArray() As Variant Dim i As Integer Dim j As Integer dataArray = Sheets("Sheet1").Range("A1:A1000").Value j = 1 For i = 1 To 1000 Step 5 Sheets("Sheet1").Range("G" & j).Value = dataArray(i, 1) j = j + 1 Next i End Sub
Chém gió, mấy công thức hạt bụi như vậy nháy mắt cái là xong, 1 triệu dòng mà to chắc.rồi Dữ liệu 1 triệu dòng kéo như bạn xong Banh máy luôn, treo luôn kaka
dữ liệu tầm 1 triệu dòng ,1 ngày chạy code này tầm 5000 lần, bạn có thời gian để kéo 5000 lần cho 1 triệu dòng không nhĩ . Bài toán con nhưng bạn chưa chắc làm được sao cho <0.2 giây cho 1 triệu dòng .Chém gió, mấy công thức hạt bụi như vậy nháy mắt cái là xong, 1 triệu dòng mà to chắc.
Bài toán cỏn con suy nghĩ cho lòng vòng rồi còn bày đặt tốc độ này nọ.
dữ liệu tầm 1 triệu dòng ,1 ngày chạy code này tầm 5000 lần. xin tư vấn thuật toánTrung bình thì một ngày làm công việc này mấy lần?
Nếu cả tuần mới làm một lần thì chỉ là công việc bất thường, cho nó chạy nửa ngày cũng chẳng sao.
Nếu nhiều hơn 2 ngày một lần thì đây là công việc thường xuyên.
Thường xuyên làm việc với dữ liệu lớn thì phải biết mà học Data Model. Không thể ỷ lại vào nhờ người khác giúp.
Microsoft đã cập nhật với những công cụ làm việc với dữ liệu lớn hơn chục năm rồi. Lười học rồi ở đấy mà banh máy với kaka, kacọt..
Làm sao có thể chạy code làm việc đó trong vòng 0,2 giây được nhỉ? Máy tôi hơi cùi chạy (code tôi viết) hết 3,7 giây. Máy mạnh chắc tầm 1 - 2 giây.dữ liệu tầm 1 triệu dòng ,1 ngày chạy code này tầm 5000 lần, bạn có thời gian để kéo 5000 lần cho 1 triệu dòng không nhĩ . Bài toán con nhưng bạn chưa chắc làm được sao cho <0.2 giây cho 1 triệu dòng .
Tôi chuyên nghiệp về C++. Cỡ bạn khiêu khích tôi không nổi đâu.dữ liệu tầm 1 triệu dòng ,1 ngày chạy code này tầm 5000 lần, bạn có thời gian để kéo 5000 lần cho 1 triệu dòng không nhĩ . Bài toán con nhưng bạn chưa chắc làm được sao cho <0.2 giây cho 1 triệu dòng .
...
5000 x 1000000 là 5 tỷ phát sinh một ngày.dữ liệu tầm 1 triệu dòng ,1 ngày chạy code này tầm 5000 lần. xin tư vấn thuật toán