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

  • Ðề: 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ỉ?

    Ghi chú


    • Ðề: 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]
      Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
      Email : cncc.jsc@gmail.com

      Ghi chú


      • Ðề: 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.

        Ghi chú


        • Ðề: 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!
          _________
          Amazing

          Ghi chú


          • Ðề: 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

            Ghi chú


            • Ðề: 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

              Ghi chú


              • Ðề: 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

                Ghi chú


                • Ðề: 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
                  Quất ngựa truy phong. Hẹn ngày tái ngộ.

                  Ghi chú


                  • Ðề: 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

                    Ghi chú


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

                      sao không down được bác nhẩy
                      Quất ngựa truy phong. Hẹn ngày tái ngộ.

                      Ghi chú


                      • Ðề: 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

                        Ghi chú


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

                          Tôi đã kiểm tra lại rồi link vẫn OK.Bạn thử dùng các chương trình như flashget xem. 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.

                          Ghi chú


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

                            À mà cái bác shinichi nầy, có cái hàm nội suy nào ngắn thì post lên cho a e xài cái.Tooi dùng mấy cái trên diễn đàn nhưng chạy vẫn ko ổn (hình như còn phụ thuộc cả vào ver của excel nữa thì phải), vì cái hàm của tôi viết trên 2003 ,chay trên 2003 kô dược.
                            Mà ngắn hay dài là do thuật toán chứ đâu phải nhiều chữ.

                            Ghi chú


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

                              Đồng ý thôi , đây là đoạn code của tôi mong được các bác hóp ý.Thanhks

                              -------------------------
                              Function NoiSuy1(ByVal x1, x2, a1, a2, x3)
                              NoiSuy1 = a1 + ((a2 - a1) * (x3 - x1)) / (x2 - x1)
                              End Function
                              -------
                              Function kp(ByVal x, y, bangtra As Range)

                              For i = 2 To UBound(bangtra.Value, 2)
                              For j = 2 To UBound(bangtra.Value, 1)

                              If (y = bangtra(1, i)) And (x = bangtra(j, 1)) Then
                              kp = bangtra(j, i)
                              End If

                              If (y = bangtra(1, i)) And (bangtra(j, 1) < x) And (x < bangtra(j + 1, 1)) Then
                              kp = NoiSuy1(bangtra(j, 1), bangtra(j + 1, 1), bangtra(j, i), bangtra(j + 1, i), x)
                              End If

                              If (x = bangtra(j, 1)) And (bangtra(1, i) < y) And (y < bangtra(1, i + 1)) Then
                              kp = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j, i), bangtra(j, i + 1), y)
                              End If

                              If (bangtra(j, 1) < x) And (x < bangtra(j + 1, 1)) And (bangtra(1, i) < y) And (y < bangtra(1, i + 1)) Then
                              a = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j, i), bangtra(j, i + 1), y)
                              b = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j + 1, i), bangtra(j + 1, i + 1), y)
                              kp = NoiSuy1(bangtra(j, 1), bangtra(j + 1, 1), a, b, x)
                              End If

                              Next
                              Next

                              End Function
                              ----------------
                              Quất ngựa truy phong. Hẹn ngày tái ngộ.

                              Ghi chú


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

                                hàm tính của bạn shinichi quá tuyệt , tôi phải công nhận là hàm của bạn là gọn nhất.
                                Tuy nhiên tùy mục đích sử dụng và người viết. ở đây bạn chỉ xét xho2 diều kiện theo mỗi phương của bảng nên tổ hợp lại bạn có 4 trường hợp cần xét.
                                Mọi người ở thường viết thêm cả 2 trường hợp miền nôij suy nằm ngoài bảng chọn về 2 phía , nên mỗi phương của bảng có 4 điều kiện , tổng các trường hợp cần xét là 16....the là dài ngoằng. Nói chung đều dựa vào bài toán "hàng điểm điều hòa" (vecter)hồi học cấp 2(xét quan hệ của 3 điểm thẳng hàng.
                                Dù sao với mục đích tra bảng thông thường thì tôi nghĩ là hàm nội suy cua ban quá tốt, các trường hợp kia cũng không nhất thiết đưa thêm vào bài toan
                                Tôi sẽ rút kinh nghiệm cho hàm nội suy của mình....
                                Xin 1 góp ý nhỏ: đối với bài toán nhỏ xíu này thi ko thành vấn đề, nhưng với bài toán lớn thi khác. Hàm của ban dung 2 hàm for ***g vào nhau như thế , theo tôi số lần tính toán khi máy chạy sẽ nhiều hơn rất nhièu so với cac thuật toan khác (tôi nhẩm tỷ lệ khoảng 8/50)
                                Last edited by DTH_HN; 04-08-2005, 11:51 AM.

                                Ghi chú

                                Working...
                                X