ứng dụng vba và tổng hợp các chỉ tiêu cơ lý(ver

Liên hệ QC

trankhacvi

Thành viên mới
Tham gia
24/2/09
Bài viết
7
Được thích
6
ỨNG DỤNG VBA CHO VIỆC TỔNG HỢP CƠ LÝ ĐẤT ĐÁ
(VERSION 2)
Sau khi đưa ra phiên bản đầu tiên, đã có ý kiến cho rằng chưa đạt về mặt giao diện và khó hiểu. Sau đây tôi trình diện một phiên bản mới với giao diện tương đối tốt hơn, dễ hiểu hơn, và nhiều chức năng cung cấp thông tin hơn cho mỗi lớp đất. Không thể nói phiên bản này mạnh hơn phiên bản trước bởi vì mỗi phiên bản có ưu điểm riêng của nó. Sau đây xin giới thiệu:
Để hiển thị userform, các bạn nhấn tổ hợp phím ctrl + q
Phiên bản trước các bạn nhấn tổ hợp phím ctrl + a



Trước tiên các bạn mở tất cả các file cơ lý, thành phần hạt, cắt nén. Chú ý: muốn làm việc các bạn phải có file cơ lý còn file cắt nén, thành phần hạt có hay không cũng được. Nếu chúng cùng nằm trong 1 file thì các bạn cho biết nó ở sheet nào
Muốn làm được như vậy các bạn phải đặt mỗi file ở trạng thái hiện hành sau đó chọn tương ứng trong userform.
Sau khi gõ vào ký hiệu mẫu cần làm việc (nhập các giá trị cơ lý, hoặc chỉnh lý) các bạn tiếp tục thực hiện lệnh tìm kiếm, sau khi tìm kiếm được các bạn sẽ có thông tin cơ lý của mẫu đó trong userform.
Tiếp tục các bạn dựa vào thông tin loại đất để thực hiện việc xếp mẫu vào lớp mong muốn. (ghi ký hiệu lớp tương ứng và nhấn đồng ý)
Các bạn có thể trực tiếp chỉnh lý mẫu đó trên userform vì chương trình tự động truy cập vào các bảng con để chỉnh lý phù hợp với bảng cơ lý.
Chương trình này cũng đơn giản và dễ hiểu.Nếu các bạn đã thực hiện thành thạo phiên bản 1 thì phiên bản này các bạn có thể làm tốt. Nhưng chú ý phải thực hiện lệnh chọn cho đúng thì chương trình mới hiểu được file nào là bảng cơ lý, thành phần hạt, và cắt nén.
Tôi sắp cho ra dự án vẽ hình trụ và mặt cắt địa chất công trình dựa chủ yếu vào 2 phiên bản này. Chúc các bạn thành công vì một cộng đồng địa kỹ thuật phát triển.
Tải file add-in và bài để thử nghiệm
 

File đính kèm

  • CHUAN1.rar
    51.8 KB · Đọc: 338
  • phienban2.rar
    26 KB · Đọc: 313
Tôi xin có ý kiến với anh như thế này:
- Việc xử lý thống kê có thể thực hiện hoàn toàn rất đơn giản trong Bảng tổng hợp. Chỉ cần thao tác chọn vùng là xong, giá trị bị loại sẽ đánh dấu gạch ngang (hình và code ban đầu kèm theo).
- Riêng với chỉ tiêu sức kháng cắt, việc xử lý thống kê sẽ phức tạp vì đối tượng là tô chứ không phải C, phi.

Xulythongke1-1.jpg


Xulythongke2-1.jpg


Xulythongke3-1.jpg


Xulythongke4-1.jpg



Code để xử lý thống kê chỉ tiêu ngoài C, phi:

Mã:
'Tac gia Phan Tu Huong - Bo mon Dia ky thuat - Truong DH Kien Truc Ha Noi
'Yeu cau de ten Tac gia khi su dung
Public Const Title = "Thong ke ngoai C, phi"
Sub Thongke_ngoaiC()
    Dim V(300) As Single, t_anpha85(300) As Single, t_anpha95(300) As Single
    Dim Mang As Range, Conlai(300) As Single, SoO As Integer, Lamtron As Integer
    Dim TB_truoc As Single, Giatri_TC As Single
    Dim ChuyenviS As Single, Gioihan As Single
    Dim k As Integer, Biloai As String
    Dim Tong As Double, Dolech As Single, Hieu As Single, Hesobd As Single
    Dim Ro1 As Single, Ro2 As Single, Kd_1 As Single, Kd_2 As Single
    Dim Xtt_1 As Single, Xtt_2 As Single
    
    On Error GoTo Thoat
    
    Hieu = 0
    Tong = 0
    Biloai = ""
    k = 1
    
    'Khai bao mang v
    For i = 1 To 6
        V(i) = 2.07
    Next i
    V(7) = 2.18: V(8) = 2.27: V(9) = 2.35: V(10) = 2.41: V(11) = 2.47: V(12) = 2.52
    V(13) = 2.56: V(14) = 2.6: V(15) = 2.64: V(16) = 2.67: V(17) = 2.7: V(18) = 2.73
    V(19) = 2.75: V(20) = 2.78: V(21) = 2.8: V(22) = 2.82: V(23) = 2.84: V(24) = 2.86
    V(25) = 2.88: V(26) = 2.9: V(27) = 2.91: V(28) = 2.93: V(29) = 2.94: V(30) = 2.96
    V(31) = 2.97: V(32) = 2.98: V(33) = 3: V(34) = 3.01: V(35) = 3.02: V(36) = 3.03
    V(37) = 3.04: V(38) = 3.05: V(39) = 3.06: V(40) = 3.07: V(41) = 3.08: V(42) = 3.09
    V(43) = 3.1: V(44) = 3.11: V(45) = 3.12: V(46) = 3.13: V(47) = 3.14: V(48) = 3.14
    V(49) = 3.15: V(50) = 3.16
    For i = 51 To 300
        V(i) = 3.16
    Next i
    
    'Khai bao mang t_anpha voi xac suat tin cay P = 0.85
    For i = 1 To 5
        t_anpha85(i) = 1.16
    Next i
    t_anpha85(6) = 1.13: t_anpha85(7) = 1.12: t_anpha85(8) = 1.11: t_anpha85(9) = 1.1
    t_anpha85(10) = 1.1: t_anpha85(11) = 1.09: t_anpha85(12) = 1.08: t_anpha85(13) = 1.08
    t_anpha85(14) = 1.08: t_anpha85(15) = 1.07: t_anpha85(16) = 1.07: t_anpha85(17) = 1.07
    t_anpha85(18) = 1.07: t_anpha85(19) = 1.07: t_anpha85(20) = 1.06
    For i = 21 To 25
        t_anpha85(i) = 1.06
    Next i
    t_anpha85(26) = 1.058: t_anpha85(27) = 1.056: t_anpha85(28) = 1.054
    t_anpha85(29) = 1.052: t_anpha85(30) = 1.05
    For i = 31 To 300
        t_anpha85(i) = 1.05
    Next i
    
    'Khai bao mang t_anpha voi xac suat tin cay P = 0.85
    For i = 1 To 5
        t_anpha95(i) = 2.01
    Next i
    t_anpha95(6) = 1.94: t_anpha95(7) = 1.9: t_anpha95(8) = 1.86: t_anpha95(9) = 1.83
    t_anpha95(10) = 1.81: t_anpha95(11) = 1.8: t_anpha95(12) = 1.78: t_anpha95(13) = 1.77
    t_anpha95(14) = 1.76: t_anpha95(15) = 1.75: t_anpha95(16) = 1.75: t_anpha95(17) = 1.74
    t_anpha95(18) = 1.73: t_anpha95(19) = 1.73: t_anpha95(20) = 1.72: t_anpha95(21) = 1.718
    t_anpha95(22) = 1.716: t_anpha95(23) = 1.714: t_anpha95(24) = 1.712: t_anpha95(25) = 1.71
    t_anpha95(26) = 1.708: t_anpha95(27) = 1.706: t_anpha95(28) = 1.704: t_anpha95(29) = 1.702
    t_anpha95(30) = 1.7: t_anpha95(31) = 1.698: t_anpha95(32) = 1.696: t_anpha95(33) = 1.694
    t_anpha95(34) = 1.692: t_anpha95(35) = 1.69: t_anpha95(36) = 1.688: t_anpha95(37) = 1.686
    t_anpha95(38) = 1.684: t_anpha95(39) = 1.682: t_anpha95(40) = 1.68: t_anpha95(41) = 1.679
    t_anpha95(42) = 1.679: t_anpha95(43) = 1.678: t_anpha95(44) = 1.678: t_anpha95(45) = 1.677
    t_anpha95(46) = 1.677: t_anpha95(47) = 1.676: t_anpha95(48) = 1.676: t_anpha95(49) = 1.675
    t_anpha95(50) = 1.675: t_anpha95(51) = 1.674: t_anpha95(52) = 1.674: t_anpha95(53) = 1.673
    t_anpha95(54) = 1.673: t_anpha95(55) = 1.672: t_anpha95(56) = 1.672: t_anpha95(57) = 1.671
    t_anpha95(58) = 1.671: t_anpha95(59) = 1.67: t_anpha95(60) = 1.67
    For i = 61 To 300
        t_anpha95(i) = 1.67
    Next i
                
    'Chon vung du lieu
    Set Mang = Application.InputBox("Vao mang du lieu de thong ke." & Chr(13) & "CHU Y: Vung du lieu phai la cung mot cot va lien tuc!", Title, Type:=8)
        SoO = Mang.Cells.Count
        Mang.Font.Strikethrough = False
    
    'Lam tron
    Lamtron = InputBox("So ky tu sau dau thap phan (Vi du: 1,2,3):", Title, 2)
    
    'Xap sep lai tu nho den lon (bo chuc nang nay)
'    Mang.Sort Key1:=Mang.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
'        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
'        DataOption1:=xlSortNormal
    
    'Xac dinh gia tri trung binh
    TB_truoc = Round(Application.WorksheetFunction.Average(Mang), Lamtron)
    
    'Xac dinh gia tri chuyen vi cua Do lech binh phuong trung binh
    If SoO <= 25 Then
        ChuyenviS = Round(Application.WorksheetFunction.StDevP(Mang), Lamtron + 1)
    Else
        ChuyenviS = Round(Application.WorksheetFunction.StDev(Mang), Lamtron + 1)
    End If
    
    'Loai tru sai so tho
    Gioihan = V(SoO) * ChuyenviS
    For j = 1 To SoO
        If Abs(Mang.Cells(j) - TB_truoc) <= Gioihan Then
            Conlai(k) = Mang.Cells(j, 1).Value
            Tong = Tong + Conlai(k)
            k = k + 1
        Else
            Biloai = Biloai & Mang.Cells(j) & ","
            'Gia tri bi loai thi gach o giua
            Mang.Cells(j).Font.Strikethrough = True

        End If
    Next
    
    'Thong bao gia tri bi loai
    If Biloai = "" Then
        MsgBox "Khong gia tri nao bi loai!", vbInformation, Title
    Else
        MsgBox "Gia tri " & Biloai & " bi loai.", vbInformation, Title
    End If
    
    'Xac dinh gia tri tieu chuan
        Giatri_TC = Round(Tong / (k - 1), Lamtron)
    
    'Do lech binh phuong trung binh
        For j = 1 To k - 1
            Hieu = Hieu + (Giatri_TC - Conlai(j)) ^ 2
        Next
            Dolech = Round(Sqr(Hieu / (k - 2)), Lamtron + 1)
            
    'He so bien doi V
        Hesobd = Round((Dolech / Giatri_TC) * 100, Lamtron)
   
    'Xac dinh gia tri tinh toan I
    Ro1 = t_anpha95(k - 2) * Hesobd / Sqr(k - 1) / 100
    Xtt_1 = Round(Giatri_TC * (1 - Ro1), Lamtron)
    
    'Xac dinh gia tri tinh toan II
    Ro2 = t_anpha85(k - 2) * Hesobd / Sqr(k - 1) / 100
    Xtt_2 = Round(Giatri_TC * (1 - Ro2), Lamtron)
    
    'Hien thong bao cac thong so thong ke
        MsgBox "- Gia tri tieu chuan Xtc= " & Giatri_TC & Chr(13) & _
        "- Do lech binh phuong trung binh S= " & Dolech & Chr(13) & _
        "- He so bien doi V = " & Hesobd & " %" & Chr(13) & Chr(13) & _
        "- Gia tri tinh toan TTGH thu I X(tt) I =" & Xtt_1 & Chr(13) & _
        "- Gia tri tinh toan TTGH thu II X(tt) II =" & Xtt_2 & Chr(13), _
        vbInformation, Title
        
    '
    Mang.Cells(SoO + 1, 1) = Giatri_TC
    Mang.Cells(SoO + 2, 1) = Dolech
    Mang.Cells(SoO + 3, 1) = Hesobd
    Mang.Cells(SoO + 4, 1) = Xtt_1
    Mang.Cells(SoO + 5, 1) = Xtt_2
Thoat:
End Sub
 
Tính toán Phi, C

Trước tiên xin cảm ơn!
Làm như thầy cũng được, nhưng em có ý kiến sau:
1.Quá cồng kềnh, tại sao ta không kiểm tra điều kiện hệ số biến đổi trước, nếu thoả mãn điều kiện thì lấy kết quả trung bình cho mỗi chỉ tiêu. Còn không thoả mãn thì chỉ việc hiệu chỉnh lại số liệu thô một tí thì hệ số biến đổi sẽ ngay lập tức thoả mãn. (Em đã thử nhiều lần theo điều kiện của tiêu chuẩn 20TCN 74-87, rất nhanh và hiệu quả). code hệ số biến đổi:
Public Function V(MANG As Range) As String
Dim SO, T, k, dem As Variant
Dim I As Integer
For Each SO In MANG
T = T + Val(SO)
I = I + 1
Next
T = T / I
For Each SO In MANG
dem = T - Val(SO)
dem = dem ^ 2
k = k + dem
Next
dem = k / (I - 1)
k = dem ^ 0.5
k = k / T
V = Str(Round(k, 2))
End Function
===> chỉ cần giá trị hệ số biến đổi là được rồi
2.Không phù hợp với thực tiễn sản xuất. Khi báo cáo hồ sơ địa chất công trình không nên báo cáo kết quả thô, càng không thể loại bỏ chỉ tiêu của bất cứ mẫu đất nào==> phương pháp hữu hiệu là hiệu chỉnh nó sao cho thoả mãn điều kiện là được. Còn các giá trị tới hạn I, II thì để người thiết kế lựa chọn phương án móng tính toán.
3. Xin nêu đoạn code tính toán trị tiêu chuẩn của Phi, C ( đã kiểm tra hệ số biến đổi của Tô1, Tô2, Tô3)
Public Function TC(manga As Range, mangb As Range, mangc As Range) As String
Dim SO, I, N, tich, TONG, p, pa, DELTA, dem, nguyen, du, C As Variant
For Each SO In manga
tich = tich + 1 * Val(SO)
TONG = TONG + Val(SO)
pa = pa + 1 ^ 2
Next
For Each SO In mangb
tich = tich + 2 * Val(SO)
TONG = TONG + Val(SO)
pa = pa + 2 ^ 2
Next
For Each SO In mangc
tich = tich + 3 * Val(SO)
TONG = TONG + Val(SO)
I = I + 1
pa = pa + 3 ^ 2
Next
N = I * 3
p = I * 1 + I * 2 + I * 3
DELTA = N * pa - p ^ 2
dem = Round(Atn((N * tich - TONG * p) / DELTA) * 180 / 3.14159, 5)
' quy đổi ra độ và phút cho Phi
nguyen = dem \ 1
If dem < nguyen Then
nguyen = nguyen - 1
End If
du = dem - nguyen
du = Int(du * 60)
If du > 60 Then
nguyen = nguyen + du \ 60
du = du Mod 60
End If
' Lực dính kết
C = Round((TONG * pa - p * tich) / DELTA, 2)
TC = Str(nguyen) + "do" + Str(du) + " luc dinh ket" + Str(C)
End Function
===> như ngôn ngữ Pascal===> đơn giản
 
Bạn vẫn chưa hiểu hết công việc xử lý thống kê, nhiều đơn vị yêu cầu chi tiết nội dung xử lý thống kê từng công thức, giá trị để họ còn kiểm tra. Đã xử lý thống kê là phải chi tiết từ bảng tra, độ lệch,... và phải có giá trị bị loại,...

Thủ tục trên của tôi chỉ cần tiến hành 1 lần là được (loại bỏ bảng tra), không phụ thuộc nhiều bước như cách tính của bạn.
 
Có lẽ em phải đọc thêm phần thống kê số liệu, nhưng hiếm khi người ta yêu cầu phải chi tiết như thầy đã nói. Qua đây em cũng xin thầy chỉ cho em đoạn code nào trong vba tương đương với lệnh mvsetup trong autocad.
Chúc sức khỏe.!
(À quên!! chưa chắc là có giá trị bị loại đâu thầy nhe!!!!)
 
Có lẽ em phải đọc thêm phần thống kê số liệu, nhưng hiếm khi người ta yêu cầu phải chi tiết như thầy đã nói. Qua đây em cũng xin thầy chỉ cho em đoạn code nào trong vba tương đương với lệnh mvsetup trong autocad.
Chúc sức khỏe.!
(À quên!! chưa chắc là có giá trị bị loại đâu thầy nhe!!!!)

Lâu mới đọc lại. Thực sự là lĩnh vực xây dựng gần như bỏ qua phần xử lý thống kê. Nhưng bên lĩnh vực giao thông, thủy lợi vẫn làm rất bài bản. Tiêu chuẩn 2012 có chút thay đổi.
 
Web KT
Back
Top Bottom