QUẢNG CÁO ĐẦU TRANG

Collapse

Thông báo

Collapse
No announcement yet.

Thư viện các hàm tự lập bằng VB

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • morpheus
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    [QUOTE=minhtu]Em thấy đúng là hàm SapXepThuTuMang của bác PMXD là sắp xếp tăng dần đấy chứ (BubbleSort).
    Nếu viết theo cách của bác phu_ho (SelectionSort) thì lại là sắp xếp giảm dần.

    Tuy nhiên vòng lặp sau For j = 0 To UBound(Mang) thì hơi thừa, chỉ cần For j = 0 To i là được.

    QUOTE]

    Các bác không chuyên rồi. Thuật toán "sủi bọt" (bubble sort) này là thuật toán cơ bản nhất khi học tin. Ở đây ta nên dùng với phép lặp điều kiện thì đúng hơn là với phép lặp đếm. Điều này cho phép chủ động dừng vòng lặp khi thuật toán đã hoàn tất (chứ không nhất thiết phải thực hiện toàn bộ 2 phép lặp chồng nhau) và sẽ không sót trường hợp nào.

    Dim Mang() As Double
    Dim i As Integer
    Dim isNotYetSorted As Boolean
    Do
    isNotYetSorted = False
    For i = Lbound(Mang) to Ubound(Mang) - 1
    If Mang(i) > Mang(i + 1) Then
    HoanVi(Mang(i), Mang (i+1))
    isNotYetSorted = True
    End If
    Next
    Loop Until Not isNotYetSorted.

    Các bác check lại xem nhé.

    Leave a comment:


  • minhtu
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nguyên văn bởi alpha_cont
    Cho em hỏi mấy vấn đề về macro trong excel.
    1>Anh xem code VB(file kèm theo). E nhập data từ file access xuất ra từ sap 2000. Từ vùng data dung lệnh counta đếm được số hang. Anh cho e hỏi dủng lệnh gì để bảng tính chạy từ hang thứ 1 đền hang thứ counta chứ không phải đến hang thứ 10.000 (hay max 65534). Nếu chạy như vậy thì chương trình tính sẽ chậm vì nó tính cả những hàng không có phần tử?
    2>Do chạy từ hang đầu tiên đến hàng thứ 10.000 (or max 645534) nên khó quản lý trang in.
    3>Hạn chế của file này là chỉ cập nhật được file access trong thư mục mặc định khi viết macro, làm sao khắc phục trình trạng này?
    4>Làm sao mỗi khi mở file excel lên thì các macro “deldata”, “inputdata”, “tinhthep” sẽ tự động cập nhật chứ không phải chạy thủ cong từng macro?

    Em thấy mấy file người ta còn tạo mấy cái nút, để khi nhập liệu vào xong thì "bấm" cho no chạy trong excel, làm cái đó như thế nào nhi?
    1. MsgBox Application.WorksheetFunction.CountA(Worksheets("DAM").Range("A1:A65536"))
    Cách này cẩn thận khi có dòng dữ liệu trống xen giữa --> khi tính toán dễ gây lẫn
    Có nhiều cách để xác định dòng dưới cùng có dữ liệu.
    3. MsgBox Application.ActiveWorkbook.Path & "\"
    4. Thuộc tính của ThisWorkbook
    Private Sub Workbook_Open()
    DelData
    InputData
    TINHTHEP
    End Sub

    Muốn tạo nút:
    Phải chuột vào toolbar, customize...
    bên tab Commands mục Categories chọn New Menu, mục Commands lôi cái New Menu ra toolbar
    Phải chuột vào nút mới đó Assign Macro.
    OK
    Tuy nhiên nên xem phần tạo menu khi mở, xóa menu khi đóng
    Last edited by minhtu; 29-05-2006, 11:26 PM.

    Leave a comment:


  • alpha_cont
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Cho em hỏi mấy vấn đề về macro trong excel.
    1>Anh xem code VB(file kèm theo). E nhập data từ file access xuất ra từ sap 2000. Từ vùng data dung lệnh counta đếm được số hang. Anh cho e hỏi dủng lệnh gì để bảng tính chạy từ hang thứ 1 đền hang thứ counta chứ không phải đến hang thứ 10.000 (hay max 65534). Nếu chạy như vậy thì chương trình tính sẽ chậm vì nó tính cả những hàng không có phần tử?
    2>Do chạy từ hang đầu tiên đến hàng thứ 10.000 (or max 645534) nên khó quản lý trang in.
    3>Hạn chế của file này là chỉ cập nhật được file access trong thư mục mặc định khi viết macro, làm sao khắc phục trình trạng này?
    4>Làm sao mỗi khi mở file excel lên thì các macro “deldata”, “inputdata”, “tinhthep” sẽ tự động cập nhật chứ không phải chạy thủ cong từng macro?

    Em thấy mấy file người ta còn tạo mấy cái nút, để khi nhập liệu vào xong thì "bấm" cho no chạy trong excel, làm cái đó như thế nào nhi?
    Attached Files

    Leave a comment:


  • PMXD
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Xin cảm ơn bác phu_ho và minhtu đã đóng góp ý kiến. Do đây là hàm cũng nhỏ nên tôi vẫn dùng thuật toán chưa tối ưu. Nhân đây, tôi đề xuất ý kiến nên lập ra một Box chuyên trao đổi các thuật toán (dù là đơn giản nhất) để chia sẻ các thủ thuật lập trình.

    Leave a comment:


  • minhtu
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Em thấy đúng là hàm SapXepThuTuMang của bác PMXD là sắp xếp tăng dần đấy chứ (BubbleSort).
    Nếu viết theo cách của bác phu_ho (SelectionSort) thì lại là sắp xếp giảm dần.

    Tuy nhiên vòng lặp sau For j = 0 To UBound(Mang) thì hơi thừa, chỉ cần For j = 0 To i là được.

    Nếu ai quan tâm đến thuật toán sắp xếp, có 1 chương trình nhỏ có 1 số thuật toán sắp xếp và so sánh tốc độ giữa chúng.


    Đây là hàm sưu tầm, không phải em tự lập -> Em bị lạc đề mất rồi.
    Attached Files
    Last edited by minhtu; 23-05-2006, 07:06 PM.

    Leave a comment:


  • phu_ho
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    to bác PMXD: Tôi không biêt VB đâu, nhưng tôi thấy nếu sắp xếp mảng thì nên viết thế này chẳng hạn thì tính toán nó sẽ đơn giản hơn nhiều


    Sub SapXepThuTuMang(Mang)
    Dim i As Long, j As Long, N As Long

    N = UBound(Mang)
    For i = 0 To N-1
    For j = i+1 To N
    if Mang(i) < Mang(j) Then
    HoanVi Mang(i), Mang(j)
    End If
    Next j
    Next i
    End Sub

    Với lại đây là sắp xếp theo thứ tự giảm dần.

    Leave a comment:


  • PMXD
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Oh, do sơ suất nên quên không post hàm HoanVi, cám ơn anh Phan Tự Hướng nhiều.


    '=====================HAM HOAN VI 2 gia tri
    Sub HoanVi(GiaTri1, GiaTri2)
    Dim GiaTriTam
    GiaTriTam = GiaTri2
    GiaTri2 = GiaTri1
    GiaTri1 = GiaTriTam
    End Sub

    Leave a comment:


  • PMXD
    started a topic Thư viện các hàm tự lập bằng VB

    Thư viện các hàm tự lập bằng VB

    Chào các anh em!
    Lâu rồi không tạo chủ đề mới, tranh thủ hôm nay trời mưa, tôi post vài hàm trong VB để anh em cùng tham khảo. Cũng rất mong anh em, ai có hàm gì hay hay post lên đây thường xuyên để cũng tra đổi và học tập. Các hàm có thể đơn giản mà hiệu quả cao thì rất hoan nghênh.

    1- Hàm sắp xếp các tành phần trong mảng theo thứ tự ăng dần

    Sub SapXepThuTuMang(Mang)
    Dim i As Long, j As Long

    For i = 0 To UBound(Mang)
    For j = 0 To UBound(Mang)
    If i <> j And Mang(i) < Mang(j) Then
    HoanVi Mang(i), Mang(j)
    End If
    Next j
    Next i
    End Sub
    '=================================================


    2- Hàm tìm Max của nhiều thành phần

    Function TimMax(thamso As Variant)
    Dim i As Integer
    TimMax = -1E+50
    For i = 0 To UBound(thamso)
    If thamso(i) > TimMax Then
    TimMax = thamso(i)
    End If
    Next
    End Function

    '=============================================
    3- Hàm tìm Min của nhiều thành phần

    Function TimMin(thamso As Variant)
    Dim i As Integer
    TimMin = thamso(LBound(thamso))
    For i = LBound(thamso) To UBound(thamso)
    If thamso(i) < TimMin Then
    TimMin = thamso(i)
    End If
    Next
    End Function
Working...
X