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!

    Chào các anh em trong diễn đàn!
    Từ ngày hôm nay, tôi sẽ cố gắng post mỗi tuần một hàm Excel mà tôi đã từng dùng để tính toán thiết kế. Ai ủng hộ tôi xin hãy lên tiếng cho diễn đàn them khí thế!

    '==================HÀM SỐ 1===========================
    ' NỘI SUY MỘT BẢNG THEO GIÁ TRỊ
    '====================================================

    Function TraBang2Chieu(ByVal Hang, ByVal Cot, VungChon As Range)
    Dim i As Long, j As Long
    Dim TangAnPha
    Dim NoiSuy1 As Double, NoiSuy2 As Double

    For i = 1 To UBound(VungChon.Value, 2) ' Theo phuong ngang
    If Hang = VungChon(1, i) Then
    For j = 1 To UBound(VungChon.Value, 1) - 1
    If (Cot - VungChon(j, 1)) * (Cot - VungChon(j + 1, 1)) <= 0 Then
    TangAnPha = (VungChon(j + 1, i) - VungChon(j, i)) / (VungChon(j + 1, 1) - VungChon(j, 1))
    TraBang2Chieu = VungChon(j, i) + (Cot - VungChon(j, 1)) * TangAnPha
    GoTo Thoat:
    End If
    Next j
    ElseIf (Hang - VungChon(1, i)) * (Hang - VungChon(1, i + 1)) < 0 Then
    For j = 1 To UBound(VungChon.Value, 1) - 1
    If (Cot - VungChon(j, 1)) * (Cot - VungChon(j + 1, 1)) < 0 Then
    TangAnPha = (VungChon(j, i + 1) - VungChon(j, i)) / (VungChon(1, i + 1) - VungChon(1, i))
    NoiSuy1 = VungChon(j, i) + (Hang - VungChon(1, i)) * TangAnPha

    TangAnPha = (VungChon(j + 1, i + 1) - VungChon(j + 1, i)) / (VungChon(1, i + 1) - VungChon(1, i))
    NoiSuy2 = VungChon(j + 1, i) + (Hang - VungChon(1, i)) * TangAnPha

    TangAnPha = (NoiSuy2 - NoiSuy1) / (VungChon(j + 1, 1) - VungChon(j, 1))
    TraBang2Chieu = NoiSuy1 + (Cot - VungChon(j, 1)) * TangAnPha
    GoTo Thoat:
    End If
    Next j
    End If
    Next i

    Thoat:
    'TraBang = UBound(VungChon.Value, 2)
    End Function

    '=====================================================

    Mời các bác Copy hàm này vào Excel và sử dụng theo từng bước như sau:

    1- Mở Excel
    2- Nhấn Ctrl+F11
    3- Insert 1 Module trong môi trường VBA
    4- Copy hàm bên trên vào
    5- Sử dụng như 1 hàm Excel thông thường với 3 tham số:

    + Giá trị của hàng
    + Giá trị của cột
    + Vùng giá trị của bảng

    Ghi chú: Bác nào vẫn còn lơ mơ thì cứ A lô nhé
    '===============================

    Nguyễn Việt Anh
    Phòng KCXD- IBST
    047544277
    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

  • #2
    Thì Mấy Anh Em đang Chờ Xem đây !!!

    Viết Nhiều Lên đi......ủng Hộ Cả Hai Tay Mà......ai Cũng Muốn Học Hỏi ở Bác Hết...vậy Nha
    Steel Design Solution Forum

    Ghi chú


    • #3
      Góp vui cùng PMXD

      Đây là bản nội suy của tui, Tuy nhiên nó chưa hoàn chỉnh !

      ==================================================
      Function Noisuy(Hang, Cot As Double, ByVal bangns As Range) As Double
      ' Ham sau cho phep noi suy ca bang mot chieu va hai chieu
      Dim Tg1, Tg2, Delta As Double
      Dim m As Long ' so hang
      Dim n As Long ' so cot
      Dim i, j As Long
      Dim Found As Boolean

      n = bangns.Columns.Count
      m = bangns.Rows.Count
      Found = False

      ' bay gio chung ta co mot mang hai chieu kich thuoc m x n

      For j = 2 To n - 1
      If (bangns(1, j) <= Cot) And (bangns(1, j + 1) >= Cot) Then
      Delta = (Cot - bangns(1, j)) / (bangns(1, j + 1) - bangns(1, j))
      Found = True

      Exit For
      End If
      Next j

      If Not Found Then
      MsgBox ("So noi suy nam ngoai Hang cua BangNS")
      End
      End If

      For i = 2 To m - 1
      If (bangns(i, 1) <= Hang) And (bangns(i + 1, 1) >= Hang) Then
      Tg1 = bangns(i, j) + (bangns(i, j + 1) - bangns(i, j)) * Delta
      Tg2 = bangns(i + 1, j) + (bangns(i + 1, j + 1) - bangns(i + 1, j)) * Delta
      Delta = (Hang - bangns(i, 1)) / (bangns(i + 1, 1) - bangns(i, 1))
      Noisuy = Tg1 + (Tg2 - Tg1) * Delta
      Found = True
      Exit For
      End If
      Next i

      If Not Found Then
      MsgBox ("So noi suy nam ngoai cot cua BangNS")
      End
      End If


      End Function

      ==================================================

      Nhưng đây chỉ là nội suy hai chiều, nếu là nội suy một chiều thì ta chỉ việc kiểm tra lai số hàng và số cột (bằng 2), và viết thêm code cho nội suy một cột.
      ------------------
      Tuy nhiên chúng ta có thể nghĩ ra cách khác như sau :


      Thông thường nếu bangns là kiểu array (kiểu mảng) ta thêm đoạn sau vào chương trình
      .......Phần bên trên của hàm .......
      n = bangns.Columns.Count
      m = bangns.Rows.Count
      Found = False

      For j = 1 To n
      Bangns(m + 1, j) = Bangns(m, j)
      Next j
      For i = 1 To m
      Bangns(i, n + 1) = Bangns(i, n)
      Next i

      ' bay gio chung ta co mot mang hai chieu kich thuoc m x n

      For j = 2 To n - 1

      ......Phần tiếp của hàm.......

      Có nghĩa là ta thêm một hàng và một cột vào sau cùng của mảng, hang cột mới thêm vào có giá trị bằng hàng cột sau cùng của mảng.
      Sau đó chạy bình thường, như thế là ta có thể nội suy được cả hai chiều lẫn một chiều. Tuy nhiên Bangns là kiểu range, do vậy ta không thể gán giá trị bangns được mà chỉ lấy được giá trị từ bangns mà thôi. Ai có cao kiến gì để có thể dùng thuật toán trên sửa nội suy hai chiều thành nội suy cả 1 chiều và hai chiều.
      ------------------------
      PMXD có ý kiến gì không.
      =================================================
      Last edited by CNPM; 17-11-2004, 12:38 AM.

      Ghi chú


      • #4
        Gửi CNPM

        Hàm của bạn và hàm của tôi bản chất là giống nhau, nhưng tôi xin góp ý về cách sử dụng để có thể dùng được cả 1 và 2 chiều cho cùng một hàm:
        1- Vòng lặp For của bạn cứ cho chạy từ 1 đến n(hoặc m)
        2- Giá trị đầu tiên của mỗi hàng và mỗi cột được lấy làm tiêu chí so sánh. Trường hợp hàng đầu tiên(Hoặc cột đầu tiên) không phải là số(Ví dụ là kí tự) thì ta c tự đánh số cho chúng.

        '=======================VÍ DỤ
        Sau đây là ví dụ về tra bảng Xác định Các hệ số A,B, D trong tính toán Sức chịu tải của nền đất

        Bảng số liệu như sau: (Xem file Đính kèm)

        Và trên địa chỉ hàm ta viết:

        =trabang([Hang],[Cot],Data!$A$25:$D$49)

        Ở ví dụ này, vì tra bảng 1 chiều nên [Hàng]=1 hoặc 2 hoặc 3 tương ứng với việc tìm A,B,D.
        Như vậy hàm sẽ tra được cả 1 chiều lẫn 2 chiều
        Attached Files
        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ú


        • #5
          Nhiệt liệt ủng hộ PMXD mỗi tuần viết một bài VBA

          >>> Vẫn không hiểu ý bác PMXD như thế nào. Bác code lại gửi lên cho anh em tham khảo đi.

          >>> Thực chất thuật toán của hai hàm PMXDCNPM Viết đều như nhau. Nhưng hai cách viết khác nhau, gửi lên để mọi người tham khảo thôi.

          >>> Rất nhiệt liệt hưởng việc bác PMXD mỗi tuần gửi một bài. Nhưng xin góp ý là bác gửi bài dễ thôi (Ví dụ như bài vừa rồi), chứ khó quá thì mọi người đọc chẳng hiểu gì đâu. Mục đích là để giới thiệu với mọi người cách truy xuất, trích dữ liệu trong excel và biết cách sử dụng các hàm VB cũng như hàm trong excel. Ngày trước CNPM cũng làm một ít nhưng không may bị bác Nguyễn Tử Quảng lấy hết lúc nào không biết , Nên giờ chẳng còn file nào cả. Hôm qua thấy bác gửi Function nội suy nên góp vui với bác thế thôi.
          ---------------------------------------------------------------
          ---------------------------------------------------------------
          Đây là chương trình cắt ảnh từ màn hình, dùng rất hay. Mọi người download về mà dùng.
          =================================================
          CNPM

          Ghi chú


          • #6
            Tôi sẽ cố gắng để mỗi tuần gửi một hàm trong Excel do tôi viết. Những hàm này tôi sẽ Open code và hướng dẫn mọi người cùng sử dụng hàm. Nếu ai biết sâu về VBA thì tham khảo thêm, còn ai biết ít thì cứ dùng thôi, không cần đọc hiểu.
            Những dòng mã trong VBA cần chú ý khi quét Virus bằng BKAV của bác Quảng sẽ bị tiêu hết, hãy nén các file này lại rồi Scan là Ok thôi.
            Gửi CNPM:
            bạn cứ thử dùng hàm trabang của tôi sẽ thấy ngay được việc nội suy 1 hay 2 chiều đều được, chúc vui vẻ nhé.
            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ú


            • #7
              Cho em hỏi là có phần mềm nào phóng to 1 vùng màn hình lên fullscreen ko ah? Chẳng hạn như khi đang chiếu PowerPoint muốn phóng một vùng lên nhìn cho rõ.

              Xin lỗi, em không biết pót bài này vào đâu cả nên pót vào đây, các anh thông cảm.
              Cầu xây xong đã lâu không thấy tôi về đưa dâu....

              Ghi chú


              • #8
                Gửi GK:
                Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này


                Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải
                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ú


                • #9
                  Nguyên văn bởi PMXD
                  Gửi GK:
                  Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này


                  Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải
                  Ko fải đâu anh, rất nhiều người quan tâm đến, mỗi tội là khả năng kiến thức về VBA có hạn nên chỉ dừng ở mức đọc, tham khảo, học tập, hỏi .... chứ chưa đủ trình để pót bài (like me ). Mong các anh tiếp tục phát triển thêm chủ đề này. Hàng tuần vẫn ngóng các hàm excel mới
                  Cầu xây xong đã lâu không thấy tôi về đưa dâu....

                  Ghi chú


                  • #10
                    Thay mặt diễn đàn, xin cảm ơn các chú PMXD, CNPM và các thành viên khác đã, đang và sẽ chia sẻ các hàm VBA lên cho các anh em còn chưa biết học tập .
                    Mỗi tuần được một hàm của PMXD thì quý hoá quá! Còn chú CNPM thì mấy tuần một hàm đấy ?
                    ThS.KS.Phạm Như Huy - Trưởng ban quản trị ketcau.com - Cty CP Tư vấn đầu tư và TKXD Việt Nam (CDC). Tel. 04.2.216.217.1; - Email: huycdc@gmail.com

                    Ghi chú


                    • #11
                      Cảm ơn anh Huy đã khích lệ động viên để PMXD tôi phấn khích để tiếp tục công việc post bài, hy vọng anh duy trì chủ đề này trong mỗi tuần.
                      Sau khi đưa ra hàm nội suy đầu tiên, tôi thấy anh em trong diễn đàn có vài người vẫn thắc mắc về cách sử dụng. Hôm nay, tôi sẽ gửi cho anh em một bảng Excel ví dụ cụ thể để mọi người cùng tham khảo và sử dụng. Mong anh em sử dụng và đóng góp ý kiến.
                      Attached Files
                      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ú


                      • #12
                        To Anh Huy

                        Anh hỏi khó quá, em sẽ cố gắng nhưng kiếm cho em ít việc làm tạm kiếm sống đã, hihi. Có PMXD rồi, em chuyển sang VBA trong CAD vậy
                        Có ai cần Sap 9.03 thì liên hệ với tôi nhé, lấy rẻ 2 cốc cafe thôi. Hoặc đến chõ anh Huy lấy cũng được, anh Huy nhểy.

                        Ghi chú


                        • #13
                          To CNPM:
                          Anh thấy chú cũng hiểu nhiều về VBA đấy, chú cứ post VBA cho AutoCad đi, mảng đó cũng nhiều cái hay lắm. Hiện nay các công việc vẽ vời anh cũng đã viết được khá nhiều bằng VBA for Cad rồi. Nếu có điều kiện chúng ta sẽ trao đổi thêm nhé.
                          Nhân đây, tôi cũng xin kể một câu chuyện ngoài lề về quá trình tôi tiếp cận với VBA for CAd để anh em Relax.
                          Ngày đó, khi mới ra trường, trong tay chỉ có chút ít kiến thức cơ bản của trường đào tạo cộng thêm vài kỹ năng lập trình VB. Tôi thiết nghĩ phải làm thế nào tạo cho mình một thế mạnh riêng trong công việc. Và cuối cùng, tôi đã quyết định nghiên cứu về lĩnh vực tự: động thiết kế với AutoCad. Nói như vậy nghe có vẻ ghê gớm chứ thực ra là lập trình để vẽ với AutoCad. Với cách nghĩ như vậy, tôi đã cất công tìm hiểu các phương pháp để thực hiện và tổng kết lại gồm các phương pháp sau:
                          1. Viết bằng ngôn Lisp: Phương pháp này đơn giản, dùng được cho mọi Version của Cad, dễ học và cũng thuận tiện. Tuy nhiên nó không thể lập được những ứng dụng lớn và còn nhiều hạn chế khác. Do vậy tôi cũng không đi sâu tiếp để nghiên cứu nó.
                          2. Viết bằng ngôn ngữ C++ để tạo ra các file *.arx: Đây là cách chuyên nghiệp nhất(theo ý kiến của riêng tôi) để viết một ứng dụng chạy trong Cad. Nó cho phép người lập trình can thiệp rất sâu vào các đối tượng của Cad, tốc độ chạy chương trình thì miễn chê. Cũng chính vì vậy, việc học nó cũng như sử dụng thành thạo là rất khó khăn. Tôi đã từng đổ mồ hôi viết một đoạn Arx để vẽ một đường thẳng trong CAd, nghĩ lại vẫn thấy khiếp.
                          3. Viết bằng VBA(Visual Basic for Application): Cuối cùng thì tôi cũng lựa chọn phương án này vì dù sao VB cũng là công cụ ruột của tôi. Đọc các tài liệu về VBA trong AutoCad tôi đã thấy việc sử dụng nó tương đối thuận tiện, cho phép lập các ứng dụng lớn, tốc độ cũng không đến nỗi nào.
                          Tuy nhiên, mọi chuyện không chỉ đơn giản như vậy, lí do chính vì thời đó vẫn đang thịnh hành Cad14. Mà phiên bản này chưa được hỗ trợ VBA nhiều, đặc biệt là môi trường lập trình. Do đó, khi tôi lập VBA cho Cad14 tôi phải lập từ bên ngoài và "Điều khiển" Cad chạy từ xa. Tôi đã mất 1 năm(không hề nói sai) để dùng VB điều khiển Cad vẽ một đoạn thẳng có tọa độ từ (0,0,0) đến tọa độ (100,0,0). Nghĩ lại thấy cũng tội nghiệp cho bản thân, giá như ngày đó có Cad2000 thì chắc không mất nhiều thời gian đến vậy(Các bác nên biết rằng VBA chỉ support cho Cad2000 trở lên). Tuy nhiên, đó cũng là bước đánh dấu thời điểm tôi đến với VBA, và cũng chẳng có gì đáng tiếc khi ta bỏ công sức cho sự hiểu biết phải không các bác.
                          Thôi đến giờ cơm rồi, để lúc khác tiếp tục nhé, ở Viện tôi xuống chậm chân là hết cơm, đói bụng=> Kết cấu không thể bền vững được.
                          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ú


                          • #14
                            Chào các bác

                            Sao cái font tiếng việt nó lỗi quá, Dùng IE thì lúc đánh được tiếng việt lúc lại không đánh được. Dùng các trình duyệt khác như My IE, Mozoilla Fireox thì bó tay vì không đánh được tiếng việt.

                            Em cũng rất muốn học VBA nhưng trình độ còn hạn chế quá. Em kể cho các bác nghe chuyện em tiếp cận với VBA trong Excel như thế nào nhé. Ngày xưa khi em còn học đại học. Em thường lên thư viện trường mình (ĐHXD) kiếm quyển PC world, trong đó có những ví dụ như hai bác CNPM và PMXD viết, ngày đó tôi đem nó vào góc phòng, rồi quay đi quay lại không thấy ai là xé lấy tờ đó, đút vô túi áo, mang về nhà đánh vô excel và chạy thử. Và dần dần tui cũng học được một ít. Nay thấy trên diễn đàn có mục này hay quá, cảm ơn máy bro đã san sẻ kiến thức của mình cho mọi người.

                            Thực ra trong diễn đàn có rất ít người post bài, vì những người vừa mới ra trường kinh nghiệm không có nhiều, mặc dù rất thích trang Web nhưng biết post gì bây giờ, chỉ còn biết lẳng lặng chờ các bài viết của bro, đọc và suy ngẫm. Một cách đánh giá "số người quan tâm đến chủ một đề" một cách rất đơn giản đó là đọc số lần truy cập đến chủ đề, số lần tải các file đính kèm. Chứ không phải không có ai nói gì thì đồng nghĩa với việc chủ đề này ít người quan tâm bác PMXD ạ.

                            Tôi rất thích chuyên mục này và mong các bro post nhiều hơn nữa. Nếu có thế PMXD và CNPM cho em biết tên một số sách viết về VBA trong CAD cũng như trong Excel, có tiếng việt thì tốt quá, còn không thì TA cũng được. Cảm ơn các bác nhiều.
                            -----------------------
                            Chúc mọi người vui vẻ.
                            -----------------------

                            Ghi chú


                            • #15
                              Tôi có mỗi quyển Programming VBA with AutoCAD không có sách tiếng việt.

                              Ghi chú

                              Working...
                              X