Sử Dụng Vòng Lặp để Xóa Trùng | Giải Pháp Excel
Có thể bạn quan tâm
- Trang chủ Có gì mới Hoạt động gần nhất Tác giả
- Diễn đàn Tìm bài viết mới Tìm theo chuyên mục
- Video
Video về Excel Video về tin học khác Tin tức về tin học chung - Thông tin mới Featured content Tìm bài mới Tài Nguyên Mới Hoạt động gần nhất
- Tài nguyên Đánh giá mới nhất Tìm tài nguyên
- Đóng góp
Tìm kiếm
Mọi nơi Đề tài Diễn đàn này Đề tài này Chỉ tìm trong tiêu đề Note Tìm kiếm Tìm nâng cao…- Tìm bài viết mới
- Tìm theo chuyên mục
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
- Khách ơi! GPE thông tin đến bạn ấn phẩm "lập trình VBA trong Excel": - Phần cơ bản - Phần Nâng Cao - VBA trong Excel - Cải thiện và tăng tốc
- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Thread starter Thread starter phihndhsp
- Ngày gửi Ngày gửi 12/6/15
Người dùng đang xem chủ đề này
Đang trực tuyến: 2 (Thành viên: 0, Khách: 2)phihndhsp
Thành viên gạo cội



Tham gia 26/12/09 Bài viết 3,363 Được thích 2,489 Giới tính Nam Nghề nghiệp Giáo Viên Giải pháp tìm duy nhất để thay thế DIC( cái này để học hành và tư duy thôi) Nếu bạn nào muốn tìm hiểu thuật toán ở dạng đơn sơ nhất không sử dụng hàm trong VBA thì có thể tham khảo bài này tôi không bẫy bất cứ lỗi gì nên code cũng ngắn gọn, tốc độ xem ra cũng được so với DIC (kém chừng 5-6s so với dữ liệu 60000 dòng) Mã: Sao chép. Sub DIC_01() Dim Rng As Range Dim Arrd() Dim Arrn() Dim DongCuoi As Long Dim i As Long, j As Long Dim DongHienTai As Long DongCuoi = Sheet1.Range("A150000").End(xlUp).Row Arrn = Sheet1.Range("A2:A" & DongCuoi) ReDim Arrd(1 To DongCuoi, 1 To 1) Arrd(1, 1) = Arrn(1, 1) DongHienTai = 1 flag = True For i = 1 To UBound(Arrn, 1) For j = 1 To DongHienTai If (Arrn(i, 1) = Arrd(j, 1)) Then flag = False Exit For End If Next j If (flag = True) Then DongHienTai = DongHienTai + 1 Arrd(DongHienTai, 1) = Arrn(i, 1) End If flag = True Next Sheet1.Range("J2:Z10000").Clear Sheet1.Range("J2").Resize(DongHienTai, 1) = Arrd End Sub File đính kèm
- DIC01_Mang.xlsb DIC01_Mang.xlsb 282.6 KB · Đọc: 55
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,982 phihndhsp đã viết: tốc độ xem ra cũng được so với DIC (kém chừng 5-6s so với dữ liệu 60000 dòng) Nhấp chuột vào đây để mở rộng...Với file trên, tôi test thấy tốc độ code không dùng dic cho thời gian khoảng 8s Tuy nhiên Phi test vậy chưa được đâu! Hãy gõ số thứ tự 1, 2, 3... vào toàn bộ dữ liệu (tức không cho cell nào trùng cả)... rồi test lại code xem thời gian bao nhiêu? Ngoài ra, code dùng dic Phi viết vậy cũng chưa tối ưu đâu (vì vẫn dùng Range chứ chưa hoàn toàn dùng Array) Upvote 0
phihndhsp
Thành viên gạo cội



Tham gia 26/12/09 Bài viết 3,363 Được thích 2,489 Giới tính Nam Nghề nghiệp Giáo Viên Bài tập này dành cho thực hành vòng lặp, thời gian như vậy cũng xem như khá khá rồi, trong thực tế thì không có nhiều trường hợp không trùng nhau như vậy đâu, (bài này em chạy 60000 dòng không trùng thì code chạy 2 phút thua xa dùng dic nhiều), nhưng những dữ liệu nhỏ nhỏ có thể áp dụng. Trước kia chưa biết gì VBA áp dụng công thức, có nhiều khi áp dụng công thức mảng chỉ có 5000 dòng mà mỗi lần chạy là em phát sợ 10 đến 15 phút, trong 1 file mà nhiều công thức lằng nhằng, ngại thêm mấy ông nội sumproduct file chậm cực kỳ, nên em nghĩ dùng VBA như vậy cũng tối ưu rồi đỡ mất khoảng thời gian nhiều lắm như vậy cũng làm toại nguyện nhiều người rồi, nhất là những người chưa biết gì vba. (còn ai đã rành đường lối rồi thì tự nhiên người ta sẽ tìm cách nào đó cao siêu hơn để giải quyết vấn đề lòng tham của con người là vô đáy, tối ưu còn muốn tối ưu hơn). Lần chỉnh sửa cuối: 12/6/15 Upvote 0 ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,982 phihndhsp đã viết: trong thực tế thì không có nhiều trường hợp không trùng nhau như vậy đâu Nhấp chuột vào đây để mở rộng...Tình huống này có đó, tôi gặp hoài, cụ thể là việc lọc danh sách công nhân ở cty Upvote 0
huuthang_bd
Chuyên gia GPE 
Tham gia 10/9/08 Bài viết 8,941 Được thích 11,357 Donate (Momo)
Giới tính Nam Nghề nghiệp Thợ đụng Công dụng chính của Dictionary không phải là để lấy danh sách duy nhất nên code này so với Dictionary thì khập khiễng quá. Upvote 0 doveandrose
hello
Tham gia 3/7/09 Bài viết 2,372 Được thích 2,263 nhật kí thử nghiệm DIC01_Mang.xlsb trên máy Cỏ i5 Ram 4GB để công bằng ta chạy Sub này trước Mã: Sao chép. Public Sub randArr() Dim arr(1 To 200000, 1 To 1) As Variant, r As Long, sourceSTR As String, c As Integer, tempStr As String sourceSTR = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" Randomize For r = 1 To 200000 Step 1 tempStr = Space(10) For c = 1 To 10 Step 1 Mid(tempStr, c, 1) = Mid(sourceSTR, Int(62 * Rnd) + 1, 1) Next arr(r, 1) = tempStr Next Sheet1.Range("A2:A200000").Value = arr End Sub đếm thời gian dùng hàm Mã: Sao chép. Public Declare Function GetTickCount Lib "kernel32.dll" () As Long sử dụng Dic kết quả thời gian : 3796 ( 3.8 giây ) sử dụng mảng kết quả : treo máy ..... hạ cột A xuống còn 100 000 dòng sử dụng Dic thời gian : 1922 ( 2 giây ) sử dụng mảng thời gian : 333 250 ( 6 phút ) Upvote 0phihndhsp
Thành viên gạo cội



Tham gia 26/12/09 Bài viết 3,363 Được thích 2,489 Giới tính Nam Nghề nghiệp Giáo Viên huuthang_bd đã viết: Công dụng chính của Dictionary không phải là để lấy danh sách duy nhất nên code này so với Dictionary thì khập khiễng quá. Nhấp chuột vào đây để mở rộng...ví dụ 1 phần thôi là lấy ra duy nhât, chứ không phải so sánh hết, vì Dic là 1 đối tượng làm sao so sánh được chứ, mình chỉ so sánh 1 phương thức nhỏ của Dic thôi Upvote 0
Kiều Mạnh
I don't program, I beat code into submission!!!
Tham gia 9/6/12 Bài viết 5,538 Được thích 4,135 Giới tính Nam Liên quan đến lọc duy nhất Bác Bill cho cái Dic, AF và Array ...mà cái Dic là cho tốc độ hay nhất thì cứ lôi ra mà xài vậy cho sướng đi ... hai cái kia đâu bằng dic mà
suy nghĩ Upvote 0 V VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,792 Nghề nghiệp Thầy bói bài ta Muốn nói về thuật toán thì phải giải thích thuật toán và cho biết tại sao mình nghĩ như thế là tối ưu rồi. Phải cho người xem cơ hội tìm một thuật toán hay hơn chứ (đương nhiên phải giả sử hệ thống không cung cấp Dictionary) Tự dưng viết một đống code rồi chạy thử. Ai biết nó làm cái gì, dựa trên lý thuyết nào mà "học hành và tư duy" Upvote 0 LLê Phát Huy
Thành viên hoạt động


Tham gia 8/12/14 Bài viết 105 Được thích 84 Donate (Paypal)
phihndhsp đã viết: Giải pháp tìm duy nhất để thay thế DIC( cái này để học hành và tư duy thôi) Nếu bạn nào muốn tìm hiểu thuật toán ở dạng đơn sơ nhất không sử dụng hàm trong VBA thì có thể tham khảo bài này tôi không bẫy bất cứ lỗi gì nên code cũng ngắn gọn, tốc độ xem ra cũng được so với DIC (kém chừng 5-6s so với dữ liệu 60000 dòng) Mã: Sao chép. Sub DIC_01() Dim Rng As Range Dim Arrd() Dim Arrn() Dim DongCuoi As Long Dim i As Long, j As Long Dim DongHienTai As Long DongCuoi = Sheet1.Range("A150000").End(xlUp).Row Arrn = Sheet1.Range("A2:A" & DongCuoi) ReDim Arrd(1 To DongCuoi, 1 To 1) Arrd(1, 1) = Arrn(1, 1) DongHienTai = 1 flag = True For i = 1 To UBound(Arrn, 1) For j = 1 To DongHienTai If (Arrn(i, 1) = Arrd(j, 1)) Then flag = False Exit For End If Next j If (flag = True) Then DongHienTai = DongHienTai + 1 Arrd(DongHienTai, 1) = Arrn(i, 1) End If flag = True Next Sheet1.Range("J2:Z10000").Clear Sheet1.Range("J2").Resize(DongHienTai, 1) = Arrd End Sub Nhấp chuột vào đây để mở rộng...Code còn dài hơn ADO và tốc độ cũng không bằng ADO nói chi so sánh với DIC. Upvote 0
phihndhsp
Thành viên gạo cội



Tham gia 26/12/09 Bài viết 3,363 Được thích 2,489 Giới tính Nam Nghề nghiệp Giáo Viên bài này là tôi muốn hướng dẫn học viên thực hành lặp thôi, tôi biết là nó không xử lại ADO, chủ yếu tìm ra thuật toán, và lấy ví dụ điển hình là lấy ra duy nhất Upvote 0 L Lê Phát Huy
Thành viên hoạt động


Tham gia 8/12/14 Bài viết 105 Được thích 84 Donate (Paypal)
phihndhsp đã viết: bài này là tôi muốn hướng dẫn học viên thực hành lặp thôi, tôi biết là nó không xử lại ADO, chủ yếu tìm ra thuật toán, và lấy ví dụ điển hình là lấy ra duy nhất Nhấp chuột vào đây để mở rộng...Nếu muốn hướng dẫn cho học viên thì phải từ cái đơn giản rồi mới đến cái phức tạp. Tự nhiên bạn đưa ra 1 đống code vậy làm sao những người mới như mình tiêu hóa cho nổi. Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,792 Nghề nghiệp Thầy bói bài taLê Phát Huy đã viết: Code còn dài hơn ADO và tốc độ cũng không bằng ADO nói chi so sánh với DIC. Nhấp chuột vào đây để mở rộng...ADO có cái khuyết điểm của nó: sử dụng nhiều lần trên file đang mở sẽ bị treo máy. Vả lại ADO là loại code lười. Sau khi sưu tập xong mấy cái hàm chuyên kết nối bỏ vào thư viện rồi thì chỉ việc viết một câu lênh SQL và truy cập thôi.
phihndhsp đã viết: bài này là tôi muốn hướng dẫn học viên thực hành lặp thôi, tôi biết là nó không xử lại ADO, chủ yếu tìm ra thuật toán, và lấy ví dụ điển hình là lấy ra duy nhất Nhấp chuột vào đây để mở rộng...Hướng dẫn gì mà cả một đống code không có một dòng chú thích (comments) Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,792 Nghề nghiệp Thầy bói bài ta Code vòng lặp trên chưa hoàn thiện. Viết như thế là chưa nắm vững cách hoạt động của vòng lăp FOR trong VBA. Điểm quan trọng: vòng lặp FOR chấm dứt bất thường khi gặp lệnh Exit For; chấm dứt bình thường khi biến số vòng lặp lớn hơn điểm cuối. Vì vậy, trong code trên, biến flag không cần thiết, và biến DongHienTai có thể bắt đầu ở 0 (thay vì 1). Muốn biết vòng lặp có tìm được trị hay không thì xét j > DongHienTai Upvote 0doveandrose
hello
Tham gia 3/7/09 Bài viết 2,372 Được thích 2,263 lời thầy quả thú vị . nhưng trong 10 người đọc đoạn code liệu đếm được bao nhiêu người hiểu tại sao xét j > DongHienTai trong khi code mẫu trên mạng về VBA và nhiều ngôn ngữ lập trình khác gặp trường hợp này hầu như ai cũng sử dụng thêm biến flag ? theo em đó là để tạo sự trong sáng dễ đọc để đủ 10 người code phổ thông có thể đọc hiểu được là vòng lặp trước đã bị break . Upvote 0nmhung49
Thành viên tích cực

Tham gia 20/8/09 Bài viết 1,186 Được thích 1,338 doveandrose đã viết: lời thầy quả thú vị . nhưng trong 10 người đọc đoạn code liệu đếm được bao nhiêu người hiểu tại sao xét j > DongHienTai trong khi code mẫu trên mạng về VBA và nhiều ngôn ngữ lập trình khác gặp trường hợp này hầu như ai cũng sử dụng thêm biến flag ? theo em đó là để tạo sự trong sáng dễ đọc để đủ 10 người code phổ thông có thể đọc hiểu được là vòng lặp trước đã bị break . Nhấp chuột vào đây để mở rộng...Tôi nghĩ cách a.Phi không phải là không hay nhưng khi dùng dic ta quên mất nếu không dùng dic thì làm sao lấy duy nhất, có thể dùng công cụ có sẵn của Excel là AF, hoặc Remove dup vì 2 cách đó rất nhanh, ta cũng không nên ném đá quá nhiều với chủ đề này, mình xin góp ý nhỏ để code trên có thể nhanh hơn 1 chút [GPECODE=vb] Sub Khong_dung_dic() Dim arr(), i As Long, Rarr(1 To 100000, 1 To 1) Dim j As Long, m As Long Dim t As Double t = Timer arr = Range([A2], [A65000].End(xlUp)).Resize(, 3).Value m = 0 Rarr(1, 1) = arr(1, 1) For i = 2 To UBound(arr) For j = 1 To m If arr(i, 1) = Rarr(j, 1) Then Exit For End If Next j If j > m Then m = m + 1 Rarr(m, 1) = arr(i, 1) End If Next [H2:H10000].Clear [H2].Resize(m, 1) = Rarr [G1] = Timer - t End Sub [/GPECODE] Upvote 0
concogia
Gội rồi mới Cạo
Tham gia 17/9/09 Bài viết 3,412 Được thích 6,881 Theo mình, bạn Phi đã nói rõ mục đích khi viết bài này rồi, không bàn về nhanh chậm nữa, nếu dùng 2 vòng lặp như trong bài thì: 1) Không cần biến flag Bài của bạn Hùng 1) Có thể không dùng Exit For, dùng cái khác (sẽ bớt công đoạn "If j > m Then" nếu còn thích dùng) 2) Có thể không cần công đoạn "If j > m Then" Nói .....đại thôi, bi giờ đi ủng hộ U23 Việt Nam cái đã Việt Nam thắng 4-0 Hihi Upvote 0 HHau151978
Thành viên tích cực

Tham gia 19/10/11 Bài viết 1,477 Được thích 1,440 - Dùng SELECT DISTINCT bằng ADO thì kết quả trả về có thể bị sort, đây có thể không phải điều tác giả mong muốn. - Ngày trước học Pascal, các thầy có dạy tránh dùng Goto vì phá vỡ cấu trúc của chương trình, nhưng lại dùng exit thoải mái. Code ở dưới dùng Goto thay Exit for để không cần so sánh If j>m. Tuy vậy tốc độ cải thiện không đáng kể, vẫn là 10s với máy core i5 ram 4G; nguyên nhân tăng tốc ở code này ( còn 2s) do dữ liệu đề bài có thể đã sort nên tìm từ dưới lên sẽ nhanh thoát vòng lặp hơn. Mã: Sao chép. Sub FilterUnSortedRange() Dim ArrN(), ArrD(), i&, j&, DongHienTai&, n&, t t = Timer n = Range("A" & Columns(1).Rows.Count).End(xlUp).Row ArrN = Range("A2:A" & n).Value2 ReDim ArrD(1 To n - 1, 1 To 1) ArrD(1, 1) = ArrN(1, 1) DongHienTai = 1 For i = 2 To n - 1 For j = DongHienTai To 1 Step -1 If ArrN(i, 1) = ArrD(j, 1) Then GoTo NextI Next DongHienTai = DongHienTai + 1 ArrD(DongHienTai, 1) = ArrN(i, 1) NextI: Next Range("J2:J1000000").Clear Range("J2:J" & DongHienTai + 1) = ArrD MsgBox Timer - t End Sub Upvote 0 concogia
Gội rồi mới Cạo
Tham gia 17/9/09 Bài viết 3,412 Được thích 6,881Hau151978 đã viết: - Dùng SELECT DISTINCT bằng ADO thì kết quả trả về có thể bị sort, đây có thể không phải điều tác giả mong muốn. - Ngày trước học Pascal, các thầy có dạy tránh dùng Goto vì phá vỡ cấu trúc của chương trình, nhưng lại dùng exit thoải mái. Code ở dưới dùng Goto thay Exit for để không cần so sánh If j>m. Tuy vậy tốc độ cải thiện không đáng kể, vẫn là 10s với máy core i5 ram 4G; nguyên nhân tăng tốc ở code này ( còn 2s) do dữ liệu đề bài có thể đã sort nên tìm từ dưới lên sẽ nhanh thoát vòng lặp hơn. Nhấp chuột vào đây để mở rộng...Mình học viết code kiểu "giang hồ" trên GPE nên mình chẳng biết cái thằng Goto nó phá vỡ cấu trúc của chương trình là như thế nào, mình chỉ biết trong trường hợp này dùng Goto sẽ bớt việc cho code rất nhiều ( chắc cũng......đỡ hao xăng tí tẹo) vì không phải hỏi han "If Iếc" gì cả, quan trọng (theo mình) là mình kiểm soát tốt thằng Goto đừng cho nó "chạy bậy" là "con gà đen" thôi, mà trong bài có mỗi một thằng Goto thì ...."cóc" lo Híc Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,792 Nghề nghiệp Thầy bói bài tadoveandrose đã viết: lời thầy quả thú vị . nhưng trong 10 người đọc đoạn code liệu đếm được bao nhiêu người hiểu tại sao xét j > DongHienTai trong khi code mẫu trên mạng về VBA và nhiều ngôn ngữ lập trình khác gặp trường hợp này hầu như ai cũng sử dụng thêm biến flag ? theo em đó là để tạo sự trong sáng dễ đọc để đủ 10 người code phổ thông có thể đọc hiểu được là vòng lặp trước đã bị break . Nhấp chuột vào đây để mở rộng...Chủ đề này có nói “hướng dẫn học viên về vòng lặp”. Nếu không có câu này thì nó chỉ là code viết chơi giải sầu, tôi chả buồn xía vào cho mệt xác. Tôi chỉ thừa dịp chỉ dẫn cho các bạn còn chưa thấu suốt về cách sử dụng vòng lặp. (nếu bạn cho rằng tôi ngạo mạn cũng không hẳn là sai. Tất cả những thành viên lão thành ở đây dều biết tôi có tánh ngạo mạn) 10 người không có mấy người hiểu là vì đây là trường hợp it gặp. Nhưng gặp mà nhận ra thì mới gọi là nhuyễn tay nghề. Tôi không thấy tận mắt những cái “code mẫu trên mạng” và “nhiều ngôn ngữ lập trình khác” kia nên không thể xét việc “hầu như ai cũng sử dụng thêm biến flag”. Nếu là học trò tôi thì xét biến duyệt vòng lặp là điều không thể thiếu sót. Riêng về vấn đề trong sáng: cái từ flag chính nó đâu có trong sáng? Tại bạn quen dùng nó cho nên nghĩ vậy thôi. Đối với tôi, i, j, flag đâu có trong sáng! Nếu muốn trong sáng thì phải đặt tên các biến duyệt vòng lặp theo đúng nhiệm vụ của chúng. Đáng lẽ phải gọi j là doTim, và flag là timThay chẳng hạn? Tối thiểu cũng nên tránh cặp i, j bởi vì theo thông lệ i và j là cặp dùng để duyệt dòng và cột. (trường hợp duyệt 2 mảng, người có kinh nghiệm sẽ dùng i1 và i2) Ở đây tôi muốn nhấn mạnh về kỹ thuật duyệt vòng lặp cho nên tôi chỉ nói sơ về sự “trong sáng” thế thôi, không thêm nữa.
Hau151978 đã viết: ... - Ngày trước học Pascal, các thầy có dạy tránh dùng Goto vì phá vỡ cấu trúc của chương trình, nhưng lại dùng exit thoải mái. Code ở dưới dùng Goto thay Exit for để không cần so sánh If j>m. Tuy vậy tốc độ cải thiện không đáng kể, vẫn là 10s với máy core i5 ram 4G; nguyên nhân tăng tốc ở code này ( còn 2s) do dữ liệu đề bài có thể đã sort nên tìm từ dưới lên sẽ nhanh thoát vòng lặp hơn. Mã: Sao chép. Sub FilterUnSortedRange() Dim ArrN(), ArrD(), i&, j&, DongHienTai&, n&, t t = Timer n = Range("A" & Columns(1).Rows.Count).End(xlUp).Row ArrN = Range("A2:A" & n).Value2 ReDim ArrD(1 To n - 1, 1 To 1) ArrD(1, 1) = ArrN(1, 1) DongHienTai = 1 For i = 2 To n - 1 For j = DongHienTai To 1 Step -1 If ArrN(i, 1) = ArrD(j, 1) Then GoTo NextI Next DongHienTai = DongHienTai + 1 ArrD(DongHienTai, 1) = ArrN(i, 1) NextI: Next Range("J2:J1000000").Clear Range("J2:J" & DongHienTai + 1) = ArrD MsgBox Timer - t End Sub Nhấp chuột vào đây để mở rộng...Tôi có từng viết bài nói về dùng Goto rồi. Biết cách dùng thì rất hiệu nghiệm mà chả có gì nguy hiểm cả. Tuy nhiên, Goto chỉ cải thiện được vài phần tỷ giây cho mỗi lần lặp, cho nên bạn không thấy đnags kể là phải rồi. Điểm này mới quan trọng: Code của bạn có một điểm mà tôi đã từng nhắc nhở chủ thớt “cho biết tại sao chủ thớt nghĩ rằng giải thuật của mình tối ưu”. Tuy nhiên chủ thớt cố tình lờ. Khi duyệt mảng kết quả từ dưới lên trên, code có thể cải thiện được tốc độ nếu dữ liệu thường hay dính cụm (hay đi liền nhau). Nếu ta có vài mã “ABC” đi liền nhau thì lúc tìm lần thứ 2 sẽ thấy ngay trong mảng kết quả, không cần phải đi sâu. Trên nguyên tắc, đo hiệu quả tốc độ của một giải thuật phải đi kèm với diều kiện dữ liệu. Giải thuật nào cũng có vùng mượt (sweet spot, vùng mà nó chạy êm nhất) của nó. Giải thuật tối ưu là giải thuật mà vùng mượt của nó bao được hầu hết các tình trạng thường gặp.
nmhung49 đã viết: Tôi nghĩ cách a.Phi không phải là không hay nhưng khi dùng dic ta quên mất nếu không dùng dic thì làm sao lấy duy nhất, có thể dùng công cụ có sẵn của Excel là AF, hoặc Remove dup vì 2 cách đó rất nhanh, ta cũng không nên ném đá quá nhiều với chủ đề này, ... Nhấp chuột vào đây để mở rộng...Ở đây không phải nói chuyện ném đá. Chủ thớt nói chuyện “hướng dẫn về vòng lặp”, và sẵn dịp đây là trường hợp đăc biệt của vòng lặp cho nên tôi thêm ý kiến. Lần chỉnh sửa cuối: 14/6/15 Upvote 0
Quang_Hải
Thành viên gạo cội



Tham gia 21/2/09 Bài viết 6,079 Được thích 8,019 Nghề nghiệp Làm đủ thứ Trước đây mình cũng có lần nghiên cứu cách viết lọc duy nhất không dùng Dic, cũng bị anh NDU đưa ra cái vụ 65000 dòng không có ông nào trùng nhau. Kết quả treo máy luôn. Từ đấy không dại gì đụng đầu vào tường nữa. Cái gì có sẵn thì dùng cho khỏe tấm thân tàn. Upvote 0 Bạn phải đăng nhập hoặc đăng ký để trả lời bài viết tại đây. Bài viết mới nhất
M Bảo mật code VBA autocad!- Michael Bit
- 9/2/26
- Hỏi đáp những vấn đề khác
- SA_DQ
- 3/11/25
- Chia sẻ
- thuctien
- Chủ nhật lúc 11:47
- Google Sheets
- Question Question
- AnhThu-1976
- 9/1/26
- Lập Trình với Excel
- phuongnam366377
- 31/1/26
- Excel và các ngôn ngữ lập trình khác
- SA_DQ
- Thứ sáu lúc 04:54
- Làm việc với ngày tháng và thời gian
- SA_DQ
- Thứ năm lúc 04:27
- Những góp ý với diễn đàn
- hoaiantrinh
- 10/2/26
- Hàm và công thức Excel
- Question Question
- ongke0711
- 6/10/24
- Lập Trình với Excel
- nguyendang95
- 6/7/25
- Excel và các ngôn ngữ lập trình khác
- Dán lên cao
- Suggestion Suggestion
- GPE-Trợ Lý
- 10/2/26
- Bài viết nổi bật và thông báo
- lehang0812
- 5/2/26
- TPHCM
- Đã giải quyết
- HeSanbi
- 18/4/21
- Lập Trình với Excel
- Đã giải quyết
- HeSanbi
- 5/3/21
- Lập Trình với Excel
- Dán lên cao
- Nguyễn Duy Tuân
- 13/9/24
- BLUESOFTS: A-Excel, A-Tools
- Excel my love_1
- 15/4/23
- Tin học mở rộng
- Question Question
- Quang_Hải
- 4/2/26
- Lập Trình với Excel
- HeSanbi
- 27/11/25
- Các Add-ins cho excel
- Question Question
- HeSanbi
- 2/2/26
- Lập Trình với Excel
- TranThanhPhong
- 30/4/14
- Dự án: Công thức & Hàm 97-2019
Thành viên có số lượng bài viết cao nhất tháng
- HeSanbi 14
- chothadiem 11
- Michael Bit 7
- YêuCN 6
- HieuCD 5
- Gà Công Nghệ 5
- DeTong 4
- Officexinh 4
- vietdang170 4
- pycckuu410 3
- chiendich 3
- hoanglocphat 3
- ptm0412 3
- SA_DQ 3
- LOGANWover 2
- VietHoangPhan 2
- Gà Con yêu VBA 2
- hoaiantrinh 2
- Quang_Hải 2
- thuctien 1
Thành viên có điểm tương tác cao nhất tháng
- HeSanbi 19
- GPE-Trợ Lý 11
- SA_DQ 7
- Quang_Hải 7
- HieuCD 6
- DeTong 5
- vietdang170 5
- Gà Con yêu VBA 4
- LOGANWover 3
- pycckuu410 3
- chiendich 3
- Phuocam 3
- Hai Lúa Miền Tây 3
- hungvinh1402 2
- HUONGHCKT 2
- huhumalu 2
- Officexinh 2
- ptm0412 2
- Michael Bit 2
- YêuCN 2
Thời gian đếm ngược.
000 Ngày 00 Giờ 00 phút 00 giây Thân mời tham dự sự kiện sinh nhật GPE 2025- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Website này sử dụng cookies. Tiếp tục sử dụng trang này, đồng nghĩa với việc bạn chấp nhận website sử dụng cookies. Chấp nhận Tìm hiểu thêm.…
Từ khóa » Xóa Vòng Lặp Trong Excel
-
Cách Sửa Lỗi Circular Reference Trong Excel đơn Giản Nhất
-
Cách Sửa Lỗi Circular References Trong Excel 100% Thành Công
-
Loại Bỏ Hoặc Cho Phép Tham Chiếu Vòng - Microsoft Support
-
Cách Sửa Lỗi Circular References Warning Trong Excel 2010, 2013 ...
-
Cách Xử Lý Khi Gặp Lỗi Vòng Lặp (Circular Reference) Trong Excel
-
Cách Sửa Lỗi Circular Reference Trong Excel
-
Circular Reference Warning | Cách Xử Lý Lỗi Vòng Lặp Trong Excel
-
Tìm Hiểu Về Vòng Tính Lặp Trong Excel Và Cách Xử Lý
-
Cách Khắc Phục Lỗi CIRCULAR REFERENCES WARNING Trên ...
-
Cách Xóa Dữ Liệu Trùng Lặp Trong Excel - HỖ TRỢ SINH VIÊN
-
Cách Loại Bỏ Tham Chiếu Vòng Trong Excel
-
Cách Sửa Lỗi Circular Reference Trong Excel 2007, 2010, 2013, 2016
-
Hướng Dẫn Khắc Phục Lỗi Circular References Trong Excel
-
2 Cách Xóa Dữ Liệu Trùng Lặp Trên Excel Mà Kế Toán Nên Biết