QUẢNG CÁO ĐẦU TRANG

Collapse

Thông báo

Collapse
No announcement yet.

Mỗi tuần một hàm trong Excel!

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

  • DTH_HN
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Tôi đã kiểm tra lại rồi link vẫn OK. Tôi up lên cái host thuê của Nhân hòa.Ban Có cách nào khác up lên ổn hơn, tôi sẽ up lại

    Leave a comment:


  • shinichi
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    sao không down được bác nhẩy

    Leave a comment:


  • DTH_HN
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Mình có bộ sách hướng dẫn VBA Excel, thấy khá hay, có rất nhiều hàm ví dụ theo sách.Post lên dây mọi người thử xem
    Có thể load theo đường dẫn
    http://www.v-art.com.vn/vba.zip

    Leave a comment:


  • shinichi
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    hềy, các vị này viết sao mà dài thế nhỉ, nhìn đã chả muốn đọc rồi. Hàm của tôi chỉ bằng 1/2 các vị hehehe

    Leave a comment:


  • daoduy
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Hàm nội suy của anh DTH HN cũng hay đấy, tôi đã viết hàm nội suy hai chiều này rồi. Theo tôi nên khai báo để giá trị của hàm là Variant. Như vây trong trường hợp nội suy mà tham số dùng để nội suy không nằm trong vùng nội suy thì giá trị trả về có thể là một Text thông báo, như vậy theo tôi người dùng dễ xử lý hơn. Tiện đây tôi gửi hàm nội suy 2 chiều do tôi viết, mong các bạn góp ý:

    Public Function Trabang2chieu(ByVal Vungnoisuy As Range, ByVal Thamso1 As Double, ByVal Thamso2 As Double) As Variant
    Dim ChisodongMin, ChisodongMax, ChisocotMin, ChisocotMax, Sodong, Socot As Integer
    Dim Giatri11, Giatri12, Giatri21, Giatri22 As Double
    Dim Giatrinoisuy1, Giatrinoisuy2 As Double

    Sodong = Vungnoisuy.Rows.Count
    Socot = Vungnoisuy.Columns.Count

    'Lấy chỉ số dòng Min và Max

    If Vungnoisuy.Cells(2, 1) > Thamso1 Or Vungnoisuy.Cells(Sodong, 1) < Thamso1 Then
    Trabang2chieu = "Ha ha, tham số nội suy thứ nhất nằm ngoài vùng nội suy!"
    Exit Function
    Else
    For i = 2 To Sodong
    If Vungnoisuy.Cells(i, 1) = Thamso1 Then
    ChisodongMin = i
    ChisodongMax = i
    Exit For
    Else
    If Vungnoisuy.Cells(i, 1) > Thamso1 Then
    ChisodongMin = i - 1
    ChisodongMax = i
    Exit For
    End If
    End If
    Next
    End If

    'Lấy chỉ số cột Min và Max

    If Vungnoisuy.Cells(1, 2) > Thamso2 Or Vungnoisuy.Cells(1, Socot) < Thamso2 Then
    Trabang2chieu = "Ha ha, tham số nội suy thứ hai nằm ngoài vùng nội suy!"
    Exit Function
    Else
    For i = 2 To Socot
    If Vungnoisuy.Cells(1, i) = Thamso2 Then
    ChisocotMin = i
    ChisocotMax = i
    Exit For
    Else
    If Vungnoisuy.Cells(1, i) > Thamso2 Then
    ChisocotMin = i - 1
    ChisocotMax = i
    Exit For
    End If
    End If
    Next
    End If

    Giatri11 = Vungnoisuy.Cells(ChisodongMin, ChisocotMin)
    Giatri12 = Vungnoisuy.Cells(ChisodongMin, ChisocotMax)
    Giatri21 = Vungnoisuy.Cells(ChisodongMax, ChisocotMin)
    Giatri22 = Vungnoisuy.Cells(ChisodongMax, ChisocotMax)

    'Nội suy theo hàng

    If ChisodongMin = ChisodongMax Then
    Giatrinoisuy1 = Giatri11
    Giatrinoisuy2 = Giatri12
    Else
    Giatrinoisuy1 = Giatri11 + (Giatri21 - Giatri11) / (Vungnoisuy.Cells(ChisodongMax, 1) - Vungnoisuy.Cells(ChisodongMin, 1)) * (Thamso1 - Vungnoisuy.Cells(ChisodongMin, 1))
    Giatrinoisuy2 = Giatri12 + (Giatri22 - Giatri12) / (Vungnoisuy.Cells(ChisodongMax, 1) - Vungnoisuy.Cells(ChisodongMin, 1)) * (Thamso1 - Vungnoisuy.Cells(ChisodongMin, 1))
    End If

    'Trabang2chieu = Giatrinoisuy2

    'Nội suy theo cột

    If ChisocotMin = ChisocotMax Then
    Trabang2chieu = Giatrinoisuy1
    Else
    Trabang2chieu = Giatrinoisuy1 + (Giatrinoisuy2 - Giatrinoisuy1) / (Vungnoisuy.Cells(1, ChisocotMax) - Vungnoisuy.Cells(1, ChisocotMin)) * (Thamso2 - Vungnoisuy.Cells(1, ChisocotMin))
    End If
    End Function

    Leave a comment:


  • DTH_HN
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Vào được trang này hay quá. Tôi thấy lập trình trong Excel cũng hay hay, tiện cho nhiều công việc nên cũng lọ mọ được mấy tháng nay. Cũng có 1 hàm nội suy (tôi chỉ là dân KTS đánh quả nên chế nó để tra giá trị thiết kê..)
    ..ah mà cái hàm của cậu gì tên THANH tôi load về nhưng sao không chạy được vậy, không biết tại sao
    -------------------------------------------------------------
    Public Function noisuy(Yt, Xt, VungChon As Range) As Double
    Dim Ya As Double, Yb As Double, Xa As Double, Xb As Double
    Dim Thamso1 As Double, Thamso2 As Double
    Dim Sohang As Byte, Socot As Byte
    Dim ia As Byte, ib As Byte, ja As Byte, jb As Byte
    Dim Mxa_ya As Double, Mxa_yb As Double, Mxb_ya As Double, Mxb_yb As Double
    Dim Txy As Double, T1 As Double, T2 As Double
    ' Xa, Xb : can duoi, can tren cua phuong ngang
    ' Ya, Yb : can duoi, can tren cua phuong doc
    ' Mxa_ya, Mxa_yb, Mxb_ya, Mxb_yb : la gia tri tra bang tuong ung voi (Xa, Ya),(Xa,Yb), (Xb, Ya), (Xb,Yb)

    Sohang = VungChon.Rows.Count
    Socot = VungChon.Columns.Count
    'Noi suy theo phuong ngang
    For i = 2 To Socot
    Thamso1 = (Xt - VungChon(1, i)) * (Xt - VungChon(1, i + 1))
    If Thamso1 < 0 Then
    Xa = VungChon(1, i)
    Xb = VungChon(1, i + 1)
    ia = i
    ib = i + 1
    GoTo Noisuy_doc
    ElseIf Thamso1 = 0 Then
    If Xt = VungChon(1, i) Then
    Xa = Xt
    Xb = Xa
    ia = i
    ib = ia
    GoTo Noisuy_doc
    ElseIf Xt = VungChon(1, i + 1) Then
    Xa = Xt
    Xb = Xa
    ia = i + 1
    ib = ia
    GoTo Noisuy_doc
    End If
    ElseIf Thamso1 > 0 Then
    If Xt < VungChon(1, i) Then
    Xa = VungChon(1, i)
    Xb = Xa
    ia = i
    ib = ia
    GoTo Noisuy_doc
    ElseIf Xt > VungChon(1, Socot) Then
    Xa = VungChon(1, Socot)
    Xb = Xa
    ia = Socot
    ib = ia
    GoTo Noisuy_doc
    End If
    End If
    Next i

    Noisuy_doc: 'Noi suy theo phuong doc
    For j = 2 To Sohang
    Thamso2 = (Yt - VungChon(j, 1)) * (Yt - VungChon(j + 1, 1))
    If Thamso2 < 0 Then
    Ya = VungChon(j, 1)
    Yb = VungChon(j + 1, 1)
    ja = j
    jb = j + 1
    GoTo Tinh_noisuy
    ElseIf Thamso2 = 0 Then
    If Yt = VungChon(j, 1) Then
    Ya = Yt
    Yb = Ya
    ja = j
    jb = ja
    GoTo Tinh_noisuy
    ElseIf Yt = VungChon(j + 1, 1) Then
    Ya = Yt
    Yb = Ya
    ja = j + 1
    jb = ja
    GoTo Tinh_noisuy
    End If
    ElseIf Thamso2 > 0 Then
    If Yt < VungChon(j, 1) Then
    Ya = VungChon(j, 1)
    Yb = Ya
    ja = j
    jb = ja
    GoTo Tinh_noisuy
    ElseIf Yt > VungChon(Sohang, 1) Then
    Ya = VungChon(Sohang, 1)
    Yb = Ya
    ja = Sohang
    jb = ja
    GoTo Tinh_noisuy
    End If
    End If
    Next j
    Tinh_noisuy:
    Mxa_ya = VungChon(ja, ia)
    Mxa_yb = VungChon(jb, ia)
    Mxb_ya = VungChon(ja, ib)
    Mxb_yb = VungChon(jb, ib)
    If Xa = Xb Then
    T1 = Mxa_ya
    T2 = Mxa_yb
    If Ya = Yb Then
    Txy = T1
    Else
    Txy = noisuy2(T1, T2, Ya, Yb, Yt)
    End If
    Else
    T1 = noisuy2(Mxa_ya, Mxb_ya, Xa, Xb, Xt)
    T2 = noisuy2(Mxa_yb, Mxb_yb, Xa, Xb, Xt)
    If Ya = Yb Then
    Txy = T1
    Else
    Txy = noisuy2(T1, T2, Ya, Yb, Yt)
    End If
    End If
    noisuy = Txy
    End Function
    '-------Ham tinh noi suy.Cong thuc tinh: Nt = Na-(Na-Nb)*(Gt-Gb)/(Ga-Gb)
    Function noisuy2(Na, Nb, Ga, Gb, Gt)
    If Na = Nb Then
    noisuy2 = Nb
    Else
    noisuy2 = Nb - (Nb - Na) * (Gt - Gb) / (Ga - Gb)
    End If
    End Function

    Leave a comment:


  • daoduy
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Nguyên văn bởi truongxd
    Trước hết cảm ơn các bác vì đề tài thú vị này. Em mới học nên cũng bập bõm được 1 vài hàm đơn giản về tra bảng. Nhờ các bác chỉ cho em làm sao khóa được 1 vùng dữ liệu trong Excel tức là không cho phép người khác sửa chữa trong đó tránh người dùng không biết làm hỏng hết bảng tra. Xin cảm ơn trước!
    Có 2 vấn đề:
    Thứnhất nếu hàm tra bảng đã được tích hợp trong một file Add-Ins (*.xla) thì bạn chỉ cần bảo mật đoạn code VBA bằng cách: Trong cửa sổ lập trình VBA vào Tools\VBA project Propeties\Protection, đánh dấu vào Lock project for viewing rồi đặt password cho nó, Save dự án lại la xong.
    Thứ hai, nếu hàm tra bảng có vùng nội suy là động ( ví dụ như hàm nội suy 2 chiều ở trên diễn đàn ) thì phải bảo vệ vùng nội suy bằng cách chọn vùng cần bảo vệ, vào Format\cells\Protection, đánh dấu vào locked nếu muốn bảo vệ ô, đánh dấu vào hidden nếu muốn nó không hiện trên thanh Formula bar. Sau đó vào Tool\Protection đặt Pass là OK

    Leave a comment:


  • truongxd
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Trước hết cảm ơn các bác vì đề tài thú vị này. Em mới học nên cũng bập bõm được 1 vài hàm đơn giản về tra bảng. Nhờ các bác chỉ cho em làm sao khóa được 1 vùng dữ liệu trong Excel tức là không cho phép người khác sửa chữa trong đó tránh người dùng không biết làm hỏng hết bảng tra. Xin cảm ơn trước!

    Leave a comment:


  • Kidsmart1981
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Các thuật toán mã hòa thường rất phức tạp. Thường chia làm 2 loại chính: mã hóa bí mật và mã hóa công khai(dùng từ ko chuẩn lắm!). Các thuật toán mã hóa thường hay có hàm random(), nhưng trong ngông ngữ lập trình hay ngôn ngữ máy "không có cái gì thực sự là ngẫu nhiên, chúng ta chỉ cố tạo ra những thứ trông giống như ngẫu nhiên mà thôi"(cùng 1 hàm random() sẽ trả về những giá trị như nhau nếu đầu vào của chúng - các seed như nhau ==> điều này minh họa cho ý ko thể có đuọc yếu tố thực sự ngẫu nhiên trong ngông ngữ máy ). Do đó về nguyên tắc, mọi mã hóa đều có thể giải được. Cản trở duy nhất đó là...thời gian giải mã. Nên thay vì cố gắng giải mã hãy đi vô hiệu hóa đoạn mã kích họat mã đó(cái mà các *****er hay làm).
    Theo như đoạn code mà bạn đưa lên, thì mọi thứ đều rất tường minh....chỉ có điều có ai đó ngồi phân tích cặn kẽ xem thuật toan sử dụng ở đây cụ thể là như thế nào thôi!
    Khi ban chỉ có thông tin đại loại như:
    Function StrEncode(ByVal s As String, key As Long, salt As Boolean) As String

    Function StrDecode(ByVal s As String, key As Long, salt As Boolean) As String

    Và không biết các hàm đó đuọc định nghĩa tường minh như thế nào....Khi đó mới xuất hiện như cầu *****.

    Trên đây chỉ là ý kiến chủ quan của tôi.

    Leave a comment:


  • PMXD
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    '================================================
    Function Decrypt_chuongtrinh(key As Long, salt As Boolean, s As String) As String

    Decrypt_chuongtrinh = StrDecode(s, key, salt)

    End Function
    '================================================
    Đây là hàm giải mã một chuỗi ký tự, hàm này sẽ gọi hàm StrDecode

    '================================================
    Function StrDecode(ByVal s As String, key As Long, salt As Boolean) As String
    .....................
    .....................

    End Function
    '================================================
    Đây là hàm khôi phục chuỗi từ chuỗi gốc s đã mã hóa

    '================================================
    Function Encrypt_chuongtrinh(key As Long, salt As Boolean, s As String) As String

    Encrypt_chuongtrinh = StrEncode(s, key, salt)

    End Function
    '================================================
    Đây là hàm mã hóa một chuỗi ký tự, hàm này sẽ gọi hàm StrEncode

    '================================================
    Function StrEncode(ByVal s As String, key As Long, salt As Boolean) As String
    .................
    .................

    End Function
    '================================================
    Đây là hàm mã hóa chuỗi ban đầu s

    Các hàm này, theo tôi thì thường dùng để xây dựng tính năng bảo mật của một ứng dụng. Hiện nay cũng có khá nhiều ứng dụng bảo mật theo kiểu này. Chương trình sẽ cho phép người dùng nhập vào một chuỗi ký tự(thường gọi là mã sử dụng chương trình), chương trình sẽ mã hóa ký tự này và so sánh với mã chuẩn. Nếu hai mã khớp nhau thì chương trình chạy tiếp, nếu sai thì ngừng. Mã chuẩn sẽ được lưu giữ vào trong Registry của Windows hoặc đâu đó trên máy.
    Trên đây là nhận định của tôi(Vì tôi thường hay bảo mật theo cách này).Bạn nào có cao kiến gì khác không, tôi xin lĩnh giáo
    [/QUOTE]

    Leave a comment:


  • Kidsmart1981
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Nguyên văn bởi Mai Cuong
    Việc gì phải lập trình cho nó khổ thân hả bạn.!!!
    Copy bên Excel xong, vào Cad chọn Edit/Paste special/Autocad Entilies/OK là được thôi mà.

    Cám ơn bạn! Đúng là thế thật, từ trước đến giờ toàn dùng chuột phải trong copy n' paste nên ko để ý. Mà sao họ ko đưa paste special vào menu của chuột phải nhỉ?

    Leave a comment:


  • Mai Cuong
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Nguyên văn bởi Kidsmart1981
    Các anh cho hỏi, làm cách nào (lập trình) để xuất các bảng tính từ Excel sang môi trường AutoCad, tại đó các bảng tính này thực sự là những entities của Cad để có thể chỉnh sửa vô tư. Với việc copy n' paste thì chỉ dừng lại ở giới hạn của chuẩn OLE.
    Cám ơn các bác, các chú, các anh...
    Việc gì phải lập trình cho nó khổ thân hả bạn.!!!
    Copy bên Excel xong, vào Cad chọn Edit/Paste special/Autocad Entilies/OK là được thôi mà.

    Leave a comment:


  • Kidsmart1981
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Các anh cho hỏi, làm cách nào (lập trình) để xuất các bảng tính từ Excel sang môi trường AutoCad, tại đó các bảng tính này thực sự là những entities của Cad để có thể chỉnh sửa vô tư. Với việc copy n' paste thì chỉ dừng lại ở giới hạn của chuẩn OLE.
    Cám ơn các bác, các chú, các anh...

    Leave a comment:


  • minhbu
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    [QUOTE]Cái add in của bác Niceshot dùng như thế nào vậy? em add vào rồi mà khốnguwr dụng được. Bác chỉ giúp em với !!!!!!

    Leave a comment:


  • minhbu
    replied
    Ðề: Mỗi tuần một hàm trong Excel!

    Cảm ơn nhiều nhé

    Leave a comment:

Working...
X