Code lọc nội lực VBA

Liên hệ QC

NguyenTai1003

Thành viên mới
Tham gia
30/6/18
Bài viết
5
Được thích
0
Em là sinh viên xây dựng và đang làm đồ án tốt nghiệp. Đến phần tính toán cốt thép cho dầm thì gặp chút xíu trở ngại. Anh (chị) nào có thể giúp em viết 1 đoạn code VBA để lọc nội lực của dầm được ko ạ, chứ lọc tay thì ngán quá, công trình 9 tầng, 7 nhịp, em làm khung phẳng. Mỗi phần tử dầm sẽ lọc nội lực tại 3 vị trí: Mmin (-) ở đầu dầm, Mmax (+) ở giữa dầm và Mmin (-) ở cuối dầm. Chỉ giữ lại những dòng thỏa mãn điều kiện, còn lại thì xóa đi. Em có file nội lực được xuất ra từ EATBS và 1 bảng mẫu đã được lọc sẵn. Mong anh (chị) trong diễn đàn giúp đỡ. Em cảm ơn nhiều ạ.
 

File đính kèm

  • Locnoilucdam.xls
    175.5 KB · Đọc: 26
Căn cứ vào đâu để biết: Đầu/ giữa/ cuối dầm?
Căn cứ vào đâu để xác định: M-min/ max?

--------
Bảng 2 kết quả đâu có đúng? Sao lại đổi vị trí cột vậy?
 
Upvote 0
Căn cứ vào đâu để biết: Đầu/ giữa/ cuối dầm?
Căn cứ vào đâu để xác định: M-min/ max?

--------
Bảng 2 kết quả đâu có đúng? Sao lại đổi vị trí cột vậy?
Anh xem lại file mới giúp em nhé! Em có lọc tay thử 2 phần tử là B2 với B3 của Story1. Với Mmax thì lọc moment dương lớn nhất (cột có tên M3), với Mmin thì lọc 2 chỗ trong Tổ hợp BAOMIN: Chỗ thứ nhất là moment âm ở vị trí Mặt cắt đầu tiên của phần tử dầm; Chỗ thứ 2 là moment âm ở vị trí Mặt cắt cuối cùng của phần tử dầm. Còn Lực Cắt V2 thì lấy giá trị tương ứng theo M3.
 

File đính kèm

  • Locnoilucdam.xls
    175.5 KB · Đọc: 26
Upvote 0
"Căn cứ vào đâu để biết: Đầu/ giữa/ cuối dầm?"????

Mình chỉ còn một bài nữa để diễn đạt cho đầy đủ thôi đó!!!!

----------
Trong file bài #1 nó như này này:

View attachment 198530
Do file này e xuất từ etabs ra nên vị trí mặt cắt không bắt đầu từ đầu dầm và cuối dầm, sau khi xem lại thắc mắc của a thì e thấy phương án lọc theo vị trí không thực hiện được nên e mới gửi file đính kèm thứ 2, ở câu trả lời trước e có giải thích lại cách lọc nội lực, phiền a xem lại giúp e, còn chổ V2 không khớp là do file thứ nhất bị sai rồi ạ, vì chỉ chú trọng lọc M3 thôi còn cái V2 thì nó chỉ cần tương ứng hàng với M3
 
Upvote 0
"Căn cứ vào đâu để biết: Đầu/ giữa/ cuối dầm?"????

Mình chỉ còn một bài nữa để diễn đạt cho đầy đủ thôi đó!!!!

----------
Trong file bài #1 nó như này này:

View attachment 198530
1530342596377.png
Chỗ lọc moment Mmin thì nó như này ạ. Lọc theo từng phần tử của Tổ Hợp BAO MIN, em ví dụ như phần tử B2 của Story1: lọc moment (M3) ở vị trí đầu tiên (0.275mét) và cuối cùng (5.45mét). Còn lực cắt V2 thì anh ko cần quan tâm, nó chỉ lấy tương ứng theo M3 thôi.
 
Upvote 0
Anh xem lại file mới giúp em nhé! Em có lọc tay thử 2 phần tử là B2 với B3 của Story1. Với Mmax thì lọc moment dương lớn nhất (cột có tên M3), với Mmin thì lọc 2 chỗ trong Tổ hợp BAOMIN: Chỗ thứ nhất là moment âm ở vị trí Mặt cắt đầu tiên của phần tử dầm; Chỗ thứ 2 là moment âm ở vị trí Mặt cắt cuối cùng của phần tử dầm. Còn Lực Cắt V2 thì lấy giá trị tương ứng theo M3.
Mã:
Sub MinMax()
  Dim sArr(), Res(), sRow As Long
  Dim i As Long, k As Long, k1 As Long, k2 As Long, j As Byte, mMax As Double
  Dim tmp As String
  Const iMax = -999999
  With Sheets("Sheet1")
    i = .Range("A65500").End(xlUp).Row
    If i < 6 Then Exit Sub
    .Range("A3:F" & i).Sort .[D3], 1, Header:=xlYes
    .Range("A3:F" & i).Sort .[A3], 1, .[B3], , 1, .[C3], , 1, Header:=xlYes
    sArr = .Range("A4:F" & i + 1).Value
    sRow = UBound(sArr)
    sArr(sRow, 3) = "BAO MAX"
  End With
 
  ReDim Res(1 To UBound(sArr), 1 To 7)
  k = 1
  mMax = iMax
  For i = 1 To UBound(sArr) - 1
    If sArr(i, 3) = "BAO MAX" Then
      If mMax < sArr(i, 6) Then mMax = sArr(i, 6): k2 = i
    Else
      If sArr(i - 1, 3) = "BAO MAX" Then k1 = i
      If sArr(i + 1, 3) = "BAO MAX" Then
        For j = 1 To 6
          Res(k, j) = sArr(k1, j)
          Res(k + 1, j) = sArr(k2, j)
          Res(k + 2, j) = sArr(i, j)
        Next j
        Res(k, 7) = "GT"
        Res(k + 1, 7) = "NH"
        Res(k + 2, 7) = "GP"
        k = k + 3
        mMax = iMax
      End If
    End If
  Next i
  With Sheets("Sheet2")
    i = .Range("A65500").End(xlUp).Row
    If i > 3 Then .Range("A4:G" & i).ClearContents
    .Range("A4:G4").Resize(k) = Res
  End With
End Sub
 

File đính kèm

  • Locnoilucdam.xls
    188 KB · Đọc: 91
Upvote 0
Mã:
Sub MinMax()
  Dim sArr(), Res(), sRow As Long
  Dim i As Long, k As Long, k1 As Long, k2 As Long, j As Byte, mMax As Double
  Dim tmp As String
  Const iMax = -999999
  With Sheets("Sheet1")
    i = .Range("A65500").End(xlUp).Row
    If i < 6 Then Exit Sub
    .Range("A3:F" & i).Sort .[D3], 1, Header:=xlYes
    .Range("A3:F" & i).Sort .[A3], 1, .[B3], , 1, .[C3], , 1, Header:=xlYes
    sArr = .Range("A4:F" & i + 1).Value
    sRow = UBound(sArr)
    sArr(sRow, 3) = "BAO MAX"
  End With

  ReDim Res(1 To UBound(sArr), 1 To 7)
  k = 1
  mMax = iMax
  For i = 1 To UBound(sArr) - 1
    If sArr(i, 3) = "BAO MAX" Then
      If mMax < sArr(i, 6) Then mMax = sArr(i, 6): k2 = i
    Else
      If sArr(i - 1, 3) = "BAO MAX" Then k1 = i
      If sArr(i + 1, 3) = "BAO MAX" Then
        For j = 1 To 6
          Res(k, j) = sArr(k1, j)
          Res(k + 1, j) = sArr(k2, j)
          Res(k + 2, j) = sArr(i, j)
        Next j
        Res(k, 7) = "GT"
        Res(k + 1, 7) = "NH"
        Res(k + 2, 7) = "GP"
        k = k + 3
        mMax = iMax
      End If
    End If
  Next i
  With Sheets("Sheet2")
    i = .Range("A65500").End(xlUp).Row
    If i > 3 Then .Range("A4:G" & i).ClearContents
    .Range("A4:G4").Resize(k) = Res
  End With
End Sub
Đúng thứ mà em cần rồi, cảm ơn a nhiều!
 
Upvote 0
Trước khi lên diễn đàn GPE nhờ trợ giúp, tự bản thân cũng đã tìm trên diễn đàn GPE cũng như nhiều diễn đàn khác liên quan đến chủ đề:
1. VBA lọc Min / Max
2. VBA Lọc nội lực
3. VBA Lọc theo phương pháp mảng
4. VBA thống kê Dictionary
5. Xem Clip hướng dẫn trên Youtube
Để tìm cách ghép nối vào file của mình ... / ... Nhưng quả thật là kết quả không được như mong muốn.
Nên chắc phải nhờ đến sự trợ giúp của các anh chị trên diễn đàn giúp với ạ.
Kể chi tiết như vậy để các anh chị thấy được không phải vì "lười biếng" mà lên nhờ diễn đàn. Mà vì ngôn ngữ VBA hơi khó đối với người mới bắt đầu.
Mong anh chị trên diễn đàn trợ giúp lọc giúp nội lực trong file excel đính kèm dưới đây với ạ.
File gồm (4 sheet, 2 sheet dữ liệu + 2 sheet kết quả)
Mong muốn đã được đề cập chi tiết bên trong file ạ.
 

File đính kèm

  • VBA - LOC NOI LUC.xlsm
    153.4 KB · Đọc: 10
Upvote 0
Trước khi lên diễn đàn GPE nhờ trợ giúp, tự bản thân cũng đã tìm trên diễn đàn GPE cũng như nhiều diễn đàn khác liên quan đến chủ đề:
1. VBA lọc Min / Max
2. VBA Lọc nội lực
3. VBA Lọc theo phương pháp mảng
4. VBA thống kê Dictionary
5. Xem Clip hướng dẫn trên Youtube
Để tìm cách ghép nối vào file của mình ... / ... Nhưng quả thật là kết quả không được như mong muốn.
Nên chắc phải nhờ đến sự trợ giúp của các anh chị trên diễn đàn giúp với ạ.
Kể chi tiết như vậy để các anh chị thấy được không phải vì "lười biếng" mà lên nhờ diễn đàn. Mà vì ngôn ngữ VBA hơi khó đối với người mới bắt đầu.
Mong anh chị trên diễn đàn trợ giúp lọc giúp nội lực trong file excel đính kèm dưới đây với ạ.
File gồm (4 sheet, 2 sheet dữ liệu + 2 sheet kết quả)
Mong muốn đã được đề cập chi tiết bên trong file ạ.
Bạn thử nêu trình tự từng bướcđiều kiện để thực hiện các bước đó nếu làm thủ công từng trường hợp được không. Mình không phải người làm công việc giống như bạn nên không hiểu các bước đó được thực hiện như thế nào.
 
Upvote 0
Mong muốn đã được đề cập chi tiết bên trong file ạ.
Với sức mạnh của máy tính ở hiện tại, cùng với việc tự động hóa tính toán, thì việc tìm chọn ra các điều kiện max min này gần như không có nhiều ý nghĩa, đôi khi bỏ sót vấn đề. Vị trí nguy hiểm có thể không phải tại nơi có cái gì đó max cả.
1725847257578.png1725847149793.png

Bạn cứ tính hết tất cả trường hợp.
 
Upvote 0
Về biểu đồ tương tác mình có xây dựng bảng tính để kiểm tra rồi.
Nhưng vấn đề là mình cần kiểm tra cặp nội lực nguy hiểm nhất.
Mặc dù xây dựng bảng tính... nhưng với chút kiến thúc excel ít ỏi mình không thể làm nó tự động hóa hoàn toàn.
Vẫn làm thủ công. vì vậy mình cần lọc cặp nội lực nguy hiểm để kiểm tra.
 
Lần chỉnh sửa cuối:
Upvote 0
Về biểu đồ tương tác mình có xây dựng bảng tính để kiểm tra rồi ạ.
Nhưng vấn đề là mình cần kiểm tra cặp nội lực nguy hiểm nhất.
Mặc dù xây dựng bảng tính... nhưng với chút kiến thúc excel ít ỏi mình không thể làm nó tự động hóa hoàn toàn.
Vẫn làm thủ công. vì vậy mình cần lọc cặp nội lực nguy hiểm để kiểm tra. Bạn giúp mình được không?
Dùng công thức cho nó nhức não :D
 

File đính kèm

  • VBA - LOC NOI LUC_GPE.xlsm
    158.5 KB · Đọc: 3
Upvote 0
Bạn thử nêu trình tự từng bướcđiều kiện để thực hiện các bước đó nếu làm thủ công từng trường hợp được không. Mình không phải người làm công việc giống như bạn nên không hiểu các bước đó được thực hiện như thế nào.
Nếu làm thủ công mình sẽ làm như sau:
 

File đính kèm

  • Screenshot_4.png
    Screenshot_4.png
    209.6 KB · Đọc: 6
Upvote 0
Bạn thử nêu trình tự từng bướcđiều kiện để thực hiện các bước đó nếu làm thủ công từng trường hợp được không. Mình không phải người làm công việc giống như bạn nên không hiểu các bước đó được thực hiện như thế nào.

Đúng vậy, hãy mô tả yêu cầu công việc cụ thể và chi tiết (coi như người làm chỉ biết vùng dữ liệu này chọn cái gì, lấy cái gì...), dù là cao thủ VBA trong kế toán thì đâu có am hiểu nội lực, mô men... cũng bó tay.
 
Upvote 0
Đúng vậy, hãy mô tả yêu cầu công việc cụ thể và chi tiết (coi như người làm chỉ biết vùng dữ liệu này chọn cái gì, lấy cái gì...), dù là cao thủ VBA trong kế toán thì đâu có am hiểu nội lực, mô men... cũng bó tay.
Bài #13 em có làm công thức rồi. Mà chưa thấy chủ thớt phản hồi :D
Chắc sinh viên đang làm đồ án.
 
Upvote 0
Với sức mạnh của máy tính ở hiện tại, cùng với việc tự động hóa tính toán, thì việc tìm chọn ra các điều kiện max min này gần như không có nhiều ý nghĩa, đôi khi bỏ sót vấn đề. Vị trí nguy hiểm có thể không phải tại nơi có cái gì đó max cả.
...
Hồi xưa, cách tính rất khó nên trpng các công trình xây dựng người ta chấp nhận 1, hoăc 2 vị trí nguy hiểm, và nổ lực vào đó. (nhất là khi xây cầu). Vái này tiếng chuyên gọi là single point failure.
Ngày nay, các phần mềm lớn tính một lần cả trăm điểm. Còn dùng probabilistic models để chạy hồi quy, đệ quy đủ thứ. Thiết kế bi giờ là multipoint failure.

Đúng vậy, hãy mô tả yêu cầu công việc cụ thể và chi tiết (coi như người làm chỉ biết vùng dữ liệu này chọn cái gì, lấy cái gì...), dù là cao thủ VBA trong kế toán thì đâu có am hiểu nội lực, mô men... cũng bó tay.
Tôi hiểu nội lực, moment nhưng tiêu chuẩn này không rõ rệt, không dám kham.
Nói chơi cho vui:
Mẽo mới dùng từ story, tôi đọc sợ lẫn lộn tiêu chuẩn Mẽo và Âu. Đúng tiếng Anh thì dùng storey.
 
Upvote 0
Hồi xưa, cách tính rất khó nên trpng các công trình xây dựng người ta chấp nhận 1, hoăc 2 vị trí nguy hiểm, và nổ lực vào đó. (nhất là khi xây cầu). Vái này tiếng chuyên gọi là single point failure.
Ngày nay, các phần mềm lớn tính một lần cả trăm điểm. Còn dùng probabilistic models để chạy hồi quy, đệ quy đủ thứ. Thiết kế bi giờ là multipoint failure.


Tôi hiểu nội lực, moment nhưng tiêu chuẩn này không rõ rệt, không dám kham.
Nói chơi cho vui:
Mẽo mới dùng từ story, tôi đọc sợ lẫn lộn tiêu chuẩn Mẽo và Âu. Đúng tiếng Anh thì dùng storey.
Trong phần mềm tính toán hiện hay, hoàn toàn có thể thiết kế cốt thép tự động mà không cần phải xuất nội lực ra file excel để tính theo tiêu chuẩn Việt Nam. Nhưng nếu không có file bảng tính excel để kiểm tra lại thì khó mà kiểm soát được số liệu. Do vậy mình muốn xây dựng bảnh tính để kiểm soát thôi ạ.
Bài đã được tự động gộp:

Đúng vậy, hãy mô tả yêu cầu công việc cụ thể và chi tiết (coi như người làm chỉ biết vùng dữ liệu này chọn cái gì, lấy cái gì...), dù là cao thủ VBA trong kế toán thì đâu có am hiểu nội lực, mô men... cũng bó tay.
Chào Thạc sĩ Phan Tự Hướng
Đã có đọc sách phần cơ bản VBA của Thạc sĩ nhưng không có nội dung trùng khớp nên chưa ứng dụng được.
Không biết làm như thế này đã rõ ràng hơn chưa ạ?
Bài đã được tự động gộp:

Bài #13 em có làm công thức rồi. Mà chưa thấy chủ thớt phản hồi :D
Chắc sinh viên đang làm đồ án.
Cảm ơn bạn rất nhiều. Nếu code VBA thì sẽ tiện hơn rất nhiều.
Vì mỗi lần thay đổi dữ liệu thì mình phải edit lại công thức.
 

File đính kèm

  • VBA - LOC NOI LUC - 2.xlsm
    58.8 KB · Đọc: 3
  • VBA - LOC NOI LUC -2.pdf
    543 KB · Đọc: 4
Upvote 0
...
Cảm ơn bạn rất nhiều. Nếu code VBA thì sẽ tiện hơn rất nhiều.
Vì mỗi lần thay đổi dữ liệu thì mình phải edit lại công thức.
Code VBA dễ ê-đít hơn công thức?
Cái này do file thiết kế dỏm. Nếu file đàng hoàng thì ngược lại, công thức dễ hơn.

Code VBA mà người nào viết được để dễ chỉnh sửa những chỗ thay đổi thông số đã chiến lắm rồi. Viết được để khỏi phải thay giải thuật khi có điều kiện thay đổi của dữ liệu là dân siêu đẳng. Dân này tôi tôn là bậc guru (tôn sư) chứ chỉ gọi "cao thủ" như các bạn vẫn gọi là còn dưới cấp.
 
Upvote 0
Code VBA dễ ê-đít hơn công thức?
Cái này do file thiết kế dỏm. Nếu file đàng hoàng thì ngược lại, công thức dễ hơn.

Code VBA mà người nào viết được để dễ chỉnh sửa những chỗ thay đổi thông số đã chiến lắm rồi. Viết được để khỏi phải thay giải thuật khi có điều kiện thay đổi của dữ liệu là dân siêu đẳng. Dân này tôi tôn là bậc guru (tôn sư) chứ chỉ gọi "cao thủ" như các bạn vẫn gọi là còn dưới cấp.
Cảm ơn bạn rất nhiều. Nếu code VBA thì sẽ tiện hơn rất nhiều.
Vì mỗi lần thay đổi dữ liệu thì mình phải edit lại công thức.
---


Cái này là vì lỗi văn bản. Đã xuống dòng rồi mà khi đọc lại vẫn bị hiểu lầm ạ.

Ý là code VBA sẽ tiện hơn. còn dùng công thức (hàm) thì khi dữ liệu thay đổi mình phải edit mảng công thức thì mới dùng hàm được ạ.
Do vậy mới cảm ơn huhumalu vì đã giúp công thức. Nhưng nếu code VBA thì sẽ tiện hơn ạ.

Văn bản dễ hiểu lầm quá ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom