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

  • #31
    to Việt Anh:
    anh cũng như chú, chẳng đẻ ý đến mấy cái sao vàng đó; chú nhắc anh mới tìm hiểu thì hoá ra nó dùng để̉ chấm điểm bài viết; Sau đó, anh chấm ngày thì thấy nó hiệṇ lên như hình vẽ đính kèm .
    Theo tôi, mọi người thấy bài nào hay thì có thể phê điểm cho bài viết .Càng nhiều người cho điểm thì số lượng sao vàng càng nhiều, điều đó sẽ làm cho các tác giả thấy vui hơn và nhiệt tình viết hơn .
    Nhân tiện đây, tôi cũng đề nghị mọi người sau khi download được những phần mềm hoặc đoạn code hay hay, tiện ích thì cũng nên có ý kiến phản hồi về sự hay, dở và cũng nên có lời CẢM ƠN tác giả hoặc người đã chia sẻ thông tin một chút . Nhiều khi cứ DOWNLOAD "bùm bụp" mà chẳng được lời cảm ơn cũng không được hay lắm !
    Attached Files
    Last edited by ketcaucdc; 07-12-2004, 10:11 AM.
    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ú


    • #32
      Ham Excel Thu 4 Va Thu 5

      Chào các anh em trong diễn đàn kết cấu! Hôm nay tôi xin giới thiệu đến các anh em hai hàm siêu nhỏ nhưng khả năng của nó thì không nhỏ chút nào, hơn nữa nó lại rất hay dùng trong khi lập trình. Cũng xin chú ý với mọi người, hai hàm này thuần túy là phục vụ lập trình chứ không dùng trong các bảng tính toán của Excel. Đó là hàm Timmax và hàm Timmin
      '=====================================================
      1- Ý nghĩa của hàm:Tìm giá trị lớn nhất(nhỏ nhất) của các số trong một mảng (mảng có thể có kích thước bất kỳ).
      2- Các tham số trong hàm: Thamso- Đây là mảng của các số thực hoặc số nguyên, số phần tử trong mảng là không giới hạn.
      3- Nội dung chính của hàm
      '====================Hàm Timmax
      Function TimMax(thamso As Variant)
      Dim i As Integer
      TimMax = 0
      For i = 0 To UBound(thamso)
      If thamso(i) > TimMax Then
      TimMax = thamso(i)
      End If
      Next
      End Function

      '=====================Hàm Timmin
      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

      '===========Ví dụ về việc sử dụng hàm Timmax và Timmin
      ' Khai bao cac bien
      Dim a as long, b as long, c as long
      Dim Max,Min
      ' Gan cac gia tri cho bien
      a=2:b=3:c=5

      Max=Timmax(array(a,b,c))
      Min=Timmin(array(a,b,c))
      '====================================================
      Đôi điều bình luận về 2 hàm trên:
      Trong quá trình tôi lập trình, hai hàm này xuất hiện với tần suất tương đối lớn, chắc chỉ sau mấy hàm toán học thông thường như +, -, x, : khai căn, lũy thừa, trị tuyệt đối....
      Đây cũng là một trong những kinh nghiệm căn bản nhất khi lập trình: Những vấn đề được xử lý thường xuyên thì nên xây dựng thành một hàm.
      Chúc các bạn thành công
      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ú


      • #33
        Cảm ơn bác PMXD nhiều, em ứng dụng các hàm của bác rất tốt. Nếu có thể bác viết cho anh em hàm tính cột lệch tâm xiên được không?

        Ghi chú


        • #34
          Bac PMXD ơi! Bác oải quá rồi à????

          Ghi chú


          • #35
            Tiếp tục post bài

            Chào các bạn!
            Sau một thời gian không đăng thêm hàm VBA nào trên diễn đàn, PMXD tôi thấy không khí có vẻ lại lắng xuống. Hôm nay, để hâm lại không khí trong những ngày đầu năm mới, PMXD tôi xin đăng hàm Tính thép cột theo TCVN để anh em cùng tham khảo.
            '=====================================================
            1- Tên hàm: Facot
            2- Các tham số chính
            M- Mô men (Kgm)
            N- Lực dọc (Kg)
            b- Bề rộng tiết diện (m)
            h- Chiều cao tiết diện (m)
            ao- Chiều dày lớp bảo vệ cốt thép
            l - Chiều dài (thực tế) cột
            Mdh- Thành phần momen dài hạn
            Ndh- Thành phần lực dọc dài hạn
            MBT- Mác bê tông (nếu ko nhập thì giá trị mặc định là 250)
            KieuCotThep- Loại cốt thép (nếu ko nhập thì giá trị mặc định là "AII")
            Kieulienket- Hình thức liên kết cua cột
            = 1 : hai đầu ngàm
            = 2 : hai đầu khớp
            = 3 : 1 đầu ngàm, một đầu khớp
            = 4 : 1 đầu ngàm, 1 đầu tự do
            3- Thuật toán tổng thể của hàm
            - Tính toán các thông số ban đầu
            - Giả thiết giá trị hàm lượng cốt thép (Muy) ban đầu
            - Tính toán giá trị Muy thực tế
            - So sánh, tính lặp cho đến khi Muy giả thiết xấp xỉ Muy tính toán
            - Tính diện tích cốt thép theo giá trị Muy cuối cùng
            - So sánh với diện tích thép tính theo bài toán kéo (nén) đúng tâm
            - Lấy giá trị Max của hai trường hợp

            4- Nội dung của hàm

            Function FaCot(ByVal M As Double, ByVal N As Double, ByVal b As Double, h As Double, _
            ByVal ao As Double, ByVal l As Double, Optional Mdh = 0, Optional Ndh = 0, Optional MBT = 250, Optional KieuCotThep = "AII", Optional KieuLienKet = 1)

            '============================Don vi tinh toan Kg,m
            Dim Lo As Double 'Chieu dai tinh toan cua cau kien(m)
            Dim ho As Double
            Dim Muy As Double, nuy As Double, MuyGt As Double, NuyMin As Double
            Dim Eo As Double, e As Double, eogh As Double, X As Double
            Dim s As Double, Nth As Double
            Dim Ja As Double, Jb As Double
            Dim Phi As Double
            Dim Kdh As Double
            Dim MuyMin As Double

            Dim Rn As Double, Rk As Double, Eb As Double, Ra As Double, Rad As Double, Ea As Double

            Dim Fat As Double, HamLuongCot As Double

            Dim Fadungtam As Double

            If M <> 0 Then Kdh = 1 + Mdh / M

            '==============================Xac dinh chieu dai tinh toan cua cot
            Select Case KieuLienKet
            Case 1 ' Hai dau ngam
            Lo = 0.7 * l
            Case 2 ' Hai dau khop

            Case 3 'Dau ngam dau khop

            Case 4 ' Dau ngam va Dau tu do

            End Select
            '==============================Xac dinh cac thong so cua be tong va thep

            BeTong MBT, Rn, Rk, Eb
            CotThep KieuCotThep, Ra, Rad, Ea

            ho = h - ao
            Phi = PhiUD(Lo, b, "R")
            FaCot = 0: Fat = 0

            '======================
            MuyMin = TimMax(Array(HamLuongCot * 100, MuyMinVa(Lo, b, h, 0)))
            If N = 0 Then
            FaCot = 0: Fat = 0
            ElseIf M = 0 And N < 0 Then
            '================================Tinh toan cau kien chiu nen trung tam tiet dien chu nhat
            N = Abs(N)
            FaCot = ((N / Phi - Rn * b * h)) / Ra
            Fat = ((N / Phi - Rn * b * h)) / Ra
            Muy = 100 * (FaCot + Fat) / (b * ho)
            '==========================================================================
            ElseIf M <> 0 And N < 0 Then
            '==================================Tinh toan cau kien chiu nen lech tam tiet dien chu nhat
            M = Abs(M)
            N = Abs(N)

            '===== Tinh cho truong hop bo qua Momen
            Fadungtam = ((N / Phi - Rn * b * h)) / Ra

            '===============================
            MuyGt = 2 * MuyMin
            Muy = MuyGt
            Do
            MuyGt = (MuyGt + Muy) / 2
            If MuyGt < 0 Then Exit Do
            Jb = b * h ^ 3 / 12
            Ja = 0.01 * MuyGt * b * (h - ao) * (0.5 * h - ao) * (0.5 * h - ao)

            '===================================Tinh toan do lech tam eo
            If b > 0.25 And h / 25 > 0.02 Then
            Eo = (M / N + h / 25)
            ElseIf b > 0.25 And h / 25 < 0.02 Then
            Eo = (M / N + 0.02)
            ElseIf b < 0.25 And h / 25 > 0.015 Then
            Eo = (M / N + h / 25)
            ElseIf b < 0.25 And h / 25 < 0.015 Then
            Eo = (M / N + 0.015)
            End If

            '================================ Tinh he so anh huong den do lech tam
            If Eo < 0.05 * h Then
            s = 0.84
            ElseIf 0.05 * h <= Eo < 5 * h Then
            s = 0.11 / (0.1 + Eo / h) + 0.1
            Else
            s = 0.122
            End If


            Nth = 6.4 * ((s * Jb * Eb / Kdh) + Ea * Ja) / (Lo * Lo)
            nuy = 1 / (1 - (N / Nth))
            If nuy < 0 Then FaCot = "ThiÕu thÐp": Exit Function
            eogh = 0.4 * (1.25 * h - Anpha(MBT) * ho)
            X = N / Rn / b
            If X < Anpha(MBT) * (h - ao) Then
            '====================================Tinh toan lech tam lon

            If X < 2 * ao Then
            FaCot = N * (nuy * Eo - 0.5 * h + ao) / Ra / (ho - ao)
            ElseIf X > 2 * ao And X < Anpha(MBT) * ho Then
            e = nuy * Eo + 0.5 * h - ao
            FaCot = N * (e - ho + 0.5 * X) / (Ra * ho - Ra * ao)
            Else
            GoTo TinhTheoLechTamBe
            End If
            Else
            TinhTheoLechTamBe:
            '=====================================Tinh toan lech tam be
            If nuy * Eo <= 0.2 * ho Then
            X = h - (1.8 + 0.5 * h / ho - 1.4 * Anpha(MBT)) * Eo
            Else
            X = 1.8 * (eogh - Eo) + Anpha(MBT) * ho
            End If
            e = 0.5 * h + nuy * Eo - ao 'Khoang cach tu luc doc den trong tam cot thep chiu keo

            FaCot = ((N * e - Rn * b * X * (ho - 0.5 * X)) / Ra / (ho - ao))
            End If
            '====================================Kiem tra ham luong cot thep
            Muy = 200 * FaCot / (b * ho)
            Loop Until Abs(Muy - MuyGt) < 0.05
            Fat = FaCot
            ElseIf M = 0 And N > 0 Then
            '===================================Tinh toan cau kien chiu keo trung tam
            M = Abs(M)
            N = Abs(N)
            FaCot = 0.5 * N / Ra
            Fat = 0.5 * N / Ra
            Muy = 100 * (FaCot + Fat) / (b * ho)
            ElseIf M <> 0 And N > 0 Then
            M = Abs(M)
            N = Abs(N)
            Eo = M / N
            If Eo <= 0.5 * h - ao Then
            '===================================Tinh toan cau kien chiu keo lech tam be
            Fat = N * (0.5 * h - Eo - ao) / Ra / (ho - ao)
            FaCot = N * (0.5 * h + Eo - ao) / Ra / (ho - ao)
            Fat = TimMax(Array(Fat, FaCot))
            FaCot = TimMax(Array(Fat, FaCot))
            Muy = 100 * (FaCot + Fat) / (b * ho)

            Else
            '==================================Tinh toan cau kien chiu keo lech tam lon
            X = Anpha(MBT) * ho
            Fat = (N * (Eo + 0.5 * h - ao) - Anpha(MBT) * (1 - 0.5 * Anpha(MBT)) * Rn * b * ho * ho) / Ra / (ho - ao)
            FaCot = (N + Anpha(MBT) * Rn * b * ho + Ra * Fat) / Ra
            Fat = TimMax(Array(Fat, FaCot))
            FaCot = TimMax(Array(Fat, FaCot))
            Muy = 100 * (FaCot + Fat) / (b * ho)
            End If
            End If
            FaCot = TimMax(Array(FaCot, Fadungtam))
            If Muy < 1 Then
            Muy = 1
            Fat = Muy * b * ho / 200
            FaCot = Muy * b * ho / 200
            Fat = Fat * 10 ^ 4
            FaCot = FaCot * 10 ^ 4
            Else
            FaCot = FaCot * 10 ^ 4
            Fat = Fat * 10 ^ 4
            End If
            End Function
            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ú


            • #36
              Đoạn code này không chạy được vì thiếu khai báo cho các trường hợp mác BT và mác thép.

              Ghi chú


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

                Nguyên văn bởi PMXD
                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
                Cho em hoi :
                3- Insert 1 Module trong môi trường VBA
                là sao? Em không hiểu lắm.Anh có thể chỉ cụ thề hơn. Em chưa biết gì về cái này lắm.

                Ghi chú


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

                  Cám ơn PMXD đã viêt nhiều hàm cho Excel. Nhưng thật lòng mà nói, mong PMXD đừng giận, các hàm viết bằng VB rất khó dùng. Mặt khác, các hàm này dễ bị các chương trình diệt virut như BKAV hiểu nhầm nên diệt nghéo luôn.
                  Cũng các hàm này có thể viết bằng các hàm chuẩn của Excel.
                  Như hàm tra bảng nội suy chỉ cần hàm VLOOKUP hoặc HLOOKUP là được.
                  Tôi sẽ dành thời gian viết lại các hàm của PMXD từ VB sang hàm chuẩn của Excel.

                  Ghi chú


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

                    Nguyên văn bởi ttkh
                    Cho em hoi :
                    3- Insert 1 Module trong môi trường VBA
                    là sao? Em không hiểu lắm.Anh có thể chỉ cụ thề hơn. Em chưa biết gì về cái này lắm.
                    Nếu bạn làm việc với VB rồi thì cái này dễ hiểu lắm.Về tham khảo qua VB là bạn sẽ làm được ngay thôi ,đừng ngại
                    Tuổi nhỏ làm việc nhỏ
                    Tùy theo sức của mình

                    Ghi chú


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

                      Những VBA của tôi khó dùng lắm sao
                      Tôi mở chủ đề này để thảo luận về lập trình trong Excel mà. Có thể một số bạn cho rằng các hàm tôi đã Upload lên có thể viết lại bằng các hàm huẩn của Excel, điều đó cũng đúng thôi. Đã có câu nói là "Mọi con đường đều dẫn đến thành Rome mà". Tuy nhiên, nếu có khi nào mà các bạn ko thể dùng hàm chuẩn của Excel đã lập ứng dụng của các bạn thì gọi tôi nhé
                      Các chương trình viết bằng VBA khi quét Virus bằng công cụ của anh Nguyễn Tử Quảng thường bị clean luôn. Cái đó muốn khắc phục, các bạn cứ Zip nó lại là ngon lành ngay à. Các chương trình Scan Virus mới hiện nay đều đã tránh được tình trạng này rồi.
                      Chúc các bạn một năm mới an khang tịnh vượng, chúc diễn đàn sang năm mới có nhiều phát triển.
                      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ú


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

                        Em dự định làm 1 cái combo box khai báo mác BT và liên kết nó với ô chứa cường độ chịu nén Rn, khi mình chọn mác BT, chẳng hạn M200, thì sẽ có Rn ngay. Ai chỉ giùm với!?!

                        Ghi chú


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

                          rất đơn giản, bạn có thể dùng validation trong menu data của excel để tạo 1 list sau đó dùng hàm vlookup để lấy giá trị Rn theo list đó.
                          nếu muốn dùng control như combobox hay dropdown ( tôi hay dùng cái này) thì msg lại cho mình. sorry vì mình không biết gửi kèm file thế nào cả.

                          Ghi chú


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

                            Nguyên văn bởi abasa
                            Em dự định làm 1 cái combo box khai báo mác BT và liên kết nó với ô chứa cường độ chịu nén Rn, khi mình chọn mác BT, chẳng hạn M200, thì sẽ có Rn ngay. Ai chỉ giùm với!?!
                            Abasa tải cái này về xem nhé. Không biết đã vừa ý bạn chưa !..
                            Attached Files

                            Ghi chú


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

                              Anh Nguyễn Việt Anh ơi ,anh mệt quá rồi chăng (hay là anh để dành để mở lớp vba) mà sao không thấy post thêm hàm excel nào nữa.Em định post lên đây các file excel -vba có mã nguồn ở trong ,anh xem và giải thích cá câu lệnh cho mọi người cùng tham khảo được.Nếu anh đồng ý thì em sẽ gửi liền.Đâu phải ai cũng có thể ra hà nội để được anh chỉ giáo

                              Ghi chú


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

                                Thật là buồn. . Chỉ có các bạn ở Hà Nội là được hoc..... Vậy còn các bạn ở nơi khác thì sao? Chắc chắn là không được học gồi đúng không? Có bạn nào buồn một chút với mình không nhỉ. Các anh ơi... rất nhiều người muốn học đó (trong đó có em). Hay là tại sao các anh trong BQT up bài lên cho chúng em với tham khảo với. Như vậy ai cũng được học mà phải không. Em tha thiết mong chờ ý kiến của các anh,. cùng tất cả

                                Ghi chú

                                Working...
                                X