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

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..)
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

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