(Xin giúp) Cải thiện bảng tính sử dụng VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

comeonnow

Thành viên chính thức
Tham gia
26/3/13
Bài viết
52
Được thích
4
Chào các bác,

Em lập bảng tính chọn dây theo các bảng tra khác nhau.
File excel có sheet "Bang tinh" dùng để nhập thông số đầu vào, còn lại là bảng tra.
Cách tra thì dựa vào giá trị dòng điện "Current" theo đúng trường hợp đã khai báo, lựa chọn bảng tra, cột cần tra
theo như hình dưới dòng điện là 22A thì kết quả trả ra là 2.5
upload_2017-12-2_16-25-13.png
Phần VBA em viết thì hoàn toàn dùng For, If..else, Case... em muốn nhờ các bác góp ý cải thiện code VBA này giúp (sử dụng hàm sẵn có của Excel... để code dễ hiểu hơn, ngắn gọn hơn..)


Mã:
Public Function sizingX(C_1 As Range, C_2 As Range, C_3 As Range, C_4 As Range, C_5 As Range, C_6 As Range) As Variant
Dim sName As String, cData(), sArr(), i As Long, j As Long


'<----- C_1 - Conductor (CU - AL)                                        [B2]
'<----- C_2 - Insulator (PVC - XLPE/EPR)                                 [B3]
'<----- C_3 - Num. of conductor (2 or 3)                                 [B4]
'<----- C_4 - Installation (A1...G)                                      [B5]
'<----- C_5 - Current after correction                                   [B10]
'<----- C_6 - Array to select Current-carrying capacities sheet (->sArr)

'<-- sArr() - Data to select sheet
'<- sName() - name of selected sheet

'<- cData() - Data to select conductor
'<- tData() - Data to select temperature
'<- rData() - Data to select reduction

'<------ i - row
'<------ j - column

'<------Chon Sheet------>'

sArr = C_6.Value

For i = 1 To UBound(sArr, 1)                         '<----------Select sheet by Installation
    If sArr(i, 1) = C_4.Value Then
        For j = 1 To UBound(sArr, 2)                  '<----------Select sheet by Insulator
            If sArr(1, j) = C_2.Value Then
                sName = sArr(i, j)
            End If
        Next j
    End If
Next i



'<------Chon Bang tra------>'
With Sheets(sName)
    Select Case C_4.Value
       Case "A1", "A2", "B1", "B2", "C", "D1", "D2"     '<------Bang 2-3-4-5
            If C_1.Value = "CU" Then                    '<------Bang CU
                Select Case C_3.Value
                    Case 2
                        cData = .Range("A4:H20").Value   '<------Bang CU-2day
                    Case 3
                        cData = .Range("K4:R20").Value   '<------Bang CU-3day
                End Select
            Else                                        '<------Bang AL
                Select Case C_3.Value
                    Case 2
                        cData = .Range("A21:H36").Value   '<------Bang AL-2day
                    Case 3
                        cData = .Range("K21:R36").Value   '<------Bang AL-3day
                End Select
            End If
        Case "E1", "E2", "F1", "F2", "F3", "G1", "G2"                                       '<------Bang 10-11-12-13
           If C_1.Value = "CU" Then
               cData = .Range("A8:H27").Value           '<------Bang CU
           Else
               cData = .Range("A28:H46").Value          '<------Bang AL
           End If
       End Select
End With


'<------Chon Tiet dien day dan------>'
For j = 2 To UBound(cData, 2)
    If cData(1, j) = C_4.Value Then
        For i = 2 To UBound(cData)
            If cData(i, j) >= C_5.Value Then
                sizingX = cData(i, 1)
                Exit For
                Exit For
            End If
        Next i
    End If
Next j
End Function
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom