Dic (1 người xem)

Liên hệ QC

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

Status
Không mở trả lời sau này.

phihndhsp

Thành viên gạo cội
Tham gia
26/12/09
Bài viết
3,363
Được thích
2,488
Giới tính
Nam
Nghề nghiệp
Giáo Viên
Rảnh rỗi xin nông nổi nên ngồi phá code chơi, Viết Sub lấy duy nhất , Sub này áp dụng khoản 60000 dòng cũng gần tương đương với sử dụng DIC (chậm khoản 5s). Code chỉ dạng thô sơ chưa bẫy lỗi, lấy cột A làm giá trị thử
(mục đích là cho việc giảng dạy sử dụng thuật toán áp dụng vòng lặp để lấy duy nhất thay thằng DIC)

Mã:
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
 
Lần chỉnh sửa cuối:
đặt topic chỉ có 3 kí tự có vi phạm nội quy không ta ?
sao phải chạy 2 vòng lặp khổ sở vậy
check tồn tại có thể dùng hàm match mà ?

Mã:
Dim arr As Variant, dicArr As Variant, r As Long, n As Long
arr = Sheet1.Range("A2:A16").Value
ReDim dicArr(1 To UBound(arr))


For r = 1 To UBound(arr) Step 1
    If arr(r, 1) <> "" Then
        If TypeName(Application.Match(arr(r, 1), dicArr, 0)) = "Error" Then
            n = n + 1
            dicArr(n) = arr(r, 1)
        End If
    End If
Next


Sheet1.Range("D2:D" & (n + 1)).Value = WorksheetFunction.Transpose(dicArr)
 
Upvote 0
Bài này sai qui định
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 

File đính kèm

  • LaMuaThu0.jpg
    LaMuaThu0.jpg
    36 KB · Đọc: 49
Upvote 0
Chắc mod đi ngan qua xóa mất tiêu rồi hihi
 
Upvote 0
kiến nghị cần phải nghiêm trị thành viên có tổng số bài gởi tới 4 chữ số mà còn lập topic sai nội quy . lêu lêu
 
Upvote 0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 

File đính kèm

  • Cờ vua.JPG
    Cờ vua.JPG
    30.6 KB · Đọc: 47
Upvote 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 

File đính kèm

  • Má.JPG
    Má.JPG
    59.4 KB · Đọc: 47
Upvote 0
Mục đích của bài này là j vậy bạn? Đưa ra các dòng code cũng ko có file đính kèm. Đọc ko hiểu j? Smod vào khoá giùm
 
Upvote 0
Mục đích của bài này là j vậy bạn? Đưa ra các dòng code cũng ko có file đính kèm. Đọc ko hiểu j? Smod vào khoá giùm
mục đích là lấy duy nhất từ 1 dãy đó bạn. ở đây lấy duy nhất từ những giá trị có trong cột A, (mục đích là rèn luyện code thay thằng Dic) do đặt tên tiêu đề không rõ ràng nên có thể mod xóa thôi (nói chung là bài này dùm cho mục đích giảng dạy thực hành các vòng lặp thôi)
 
Lần chỉnh sửa cuối:
Upvote 0
Rảnh rỗi xin nông nổi nên ngồi phá code chơi, Viết Sub lấy duy nhất , Sub này áp dụng khoản 60000 dòng cũng gần tương đương với sử dụng DIC (chậm khoản 5s). Code chỉ dạng thô sơ chưa bẫy lỗi, lấy cột A làm giá trị thử
(mục đích là cho việc giảng dạy sử dụng thuật toán áp dụng vòng lặp để lấy duy nhất thay thằng DIC)

Phi mở lại topic khác (tiêu đề đàng hoàng) cho file + code lên luôn nhé
Bởi tôi không bao giờ tin với 60,000 dữ liệu mà code này có thể tương đương với dictionary đâu
 
Upvote 0
Status
Không mở trả lời sau này.

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

Back
Top Bottom