PDA

View Full Version : Mỗi tuần một hàm trong Excel!


Pages : [1] 2

PMXD
16-11-2004, 01:50 PM
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

reivietnam
16-11-2004, 05:03 PM
Viết Nhiều Lên đi......ủng Hộ Cả Hai Tay Mà......ai Cũng Muốn Học Hỏi ở Bác Hết...vậy Nha

CNPM
16-11-2004, 11:19 PM
Đây là bản nội suy của tui, Tuy nhiên nó chưa hoàn chỉnh !

==================================================
Function Noisuy(Hang, Cot As Double, ByVal bangns As Range) As Double
' Ham sau cho phep noi suy ca bang mot chieu va hai chieu
Dim Tg1, Tg2, Delta As Double
Dim m As Long ' so hang
Dim n As Long ' so cot
Dim i, j As Long
Dim Found As Boolean

n = bangns.Columns.Count
m = bangns.Rows.Count
Found = False

' bay gio chung ta co mot mang hai chieu kich thuoc m x n

For j = 2 To n - 1
If (bangns(1, j) <= Cot) And (bangns(1, j + 1) >= Cot) Then
Delta = (Cot - bangns(1, j)) / (bangns(1, j + 1) - bangns(1, j))
Found = True

Exit For
End If
Next j

If Not Found Then
MsgBox ("So noi suy nam ngoai Hang cua BangNS")
End
End If

For i = 2 To m - 1
If (bangns(i, 1) <= Hang) And (bangns(i + 1, 1) >= Hang) Then
Tg1 = bangns(i, j) + (bangns(i, j + 1) - bangns(i, j)) * Delta
Tg2 = bangns(i + 1, j) + (bangns(i + 1, j + 1) - bangns(i + 1, j)) * Delta
Delta = (Hang - bangns(i, 1)) / (bangns(i + 1, 1) - bangns(i, 1))
Noisuy = Tg1 + (Tg2 - Tg1) * Delta
Found = True
Exit For
End If
Next i

If Not Found Then
MsgBox ("So noi suy nam ngoai cot cua BangNS")
End
End If


End Function

==================================================

Nhưng đây chỉ là nội suy hai chiều, nếu là nội suy một chiều thì ta chỉ việc kiểm tra lai số hàng và số cột (bằng 2), và viết thêm code cho nội suy một cột.
------------------
Tuy nhiên chúng ta có thể nghĩ ra cách khác như sau :


Thông thường nếu bangns là kiểu array (kiểu mảng) ta thêm đoạn sau vào chương trình
.......Phần bên trên của hàm .......
n = bangns.Columns.Count
m = bangns.Rows.Count
Found = False

For j = 1 To n
Bangns(m + 1, j) = Bangns(m, j)
Next j
For i = 1 To m
Bangns(i, n + 1) = Bangns(i, n)
Next i
' bay gio chung ta co mot mang hai chieu kich thuoc m x n

For j = 2 To n - 1

......Phần tiếp của hàm.......

Có nghĩa là ta thêm một hàng và một cột vào sau cùng của mảng, hang cột mới thêm vào có giá trị bằng hàng cột sau cùng của mảng.
Sau đó chạy bình thường, như thế là ta có thể nội suy được cả hai chiều lẫn một chiều. Tuy nhiên Bangns là kiểu range, do vậy ta không thể gán giá trị bangns được mà chỉ lấy được giá trị từ bangns mà thôi. Ai có cao kiến gì để có thể dùng thuật toán trên sửa nội suy hai chiều thành nội suy cả 1 chiều và hai chiều.
------------------------
PMXD có ý kiến gì không.
=================================================

PMXD
17-11-2004, 11:21 AM
Hàm của bạn và hàm của tôi bản chất là giống nhau, nhưng tôi xin góp ý về cách sử dụng để có thể dùng được cả 1 và 2 chiều cho cùng một hàm:
1- Vòng lặp For của bạn cứ cho chạy từ 1 đến n(hoặc m)
2- Giá trị đầu tiên của mỗi hàng và mỗi cột được lấy làm tiêu chí so sánh. Trường hợp hàng đầu tiên(Hoặc cột đầu tiên) không phải là số(Ví dụ là kí tự) thì ta c tự đánh số cho chúng.

'=======================VÍ DỤ
Sau đây là ví dụ về tra bảng Xác định Các hệ số A,B, D trong tính toán Sức chịu tải của nền đất

Bảng số liệu như sau: (Xem file Đính kèm)

Và trên địa chỉ hàm ta viết:

=trabang([Hang],[Cot],Data!$A$25:$D$49)

Ở ví dụ này, vì tra bảng 1 chiều nên [Hàng]=1 hoặc 2 hoặc 3 tương ứng với việc tìm A,B,D.
Như vậy hàm sẽ tra được cả 1 chiều lẫn 2 chiều

CNPM
17-11-2004, 01:37 PM
>>> Vẫn không hiểu ý bác PMXD như thế nào. Bác code lại gửi lên cho anh em tham khảo đi.

>>> Thực chất thuật toán của hai hàm PMXD và CNPM Viết đều như nhau. Nhưng hai cách viết khác nhau, gửi lên để mọi người tham khảo thôi.

>>> Rất nhiệt liệt hưởng việc bác PMXD mỗi tuần gửi một bài. Nhưng xin góp ý là bác gửi bài dễ thôi (Ví dụ như bài vừa rồi), chứ khó quá thì mọi người đọc chẳng hiểu gì đâu. Mục đích là để giới thiệu với mọi người cách truy xuất, trích dữ liệu trong excel và biết cách sử dụng các hàm VB cũng như hàm trong excel. Ngày trước CNPM cũng làm một ít nhưng không may bị bác Nguyễn Tử Quảng lấy hết lúc nào không biết :D , Nên giờ chẳng còn file nào cả. ;) Hôm qua thấy bác gửi Function nội suy nên góp vui với bác thế thôi. :p
---------------------------------------------------------------
---------------------------------------------------------------
Đây là chương trình cắt ảnh từ màn hình, dùng rất hay. Mọi người download về mà dùng.
=================================================
CNPM

PMXD
17-11-2004, 02:13 PM
Tôi sẽ cố gắng để mỗi tuần gửi một hàm trong Excel do tôi viết. Những hàm này tôi sẽ Open code và hướng dẫn mọi người cùng sử dụng hàm. Nếu ai biết sâu về VBA thì tham khảo thêm, còn ai biết ít thì cứ dùng thôi, không cần đọc hiểu.
Những dòng mã trong VBA cần chú ý khi quét Virus bằng BKAV của bác Quảng sẽ bị tiêu hết, hãy nén các file này lại rồi Scan là Ok thôi.
Gửi CNPM:
bạn cứ thử dùng hàm trabang của tôi sẽ thấy ngay được việc nội suy 1 hay 2 chiều đều được, chúc vui vẻ nhé.

Gary killer
17-11-2004, 08:01 PM
Cho em hỏi là có phần mềm nào phóng to 1 vùng màn hình lên fullscreen ko ah? Chẳng hạn như khi đang chiếu PowerPoint muốn phóng một vùng lên nhìn cho rõ.

Xin lỗi, em không biết pót bài này vào đâu cả nên pót vào đây, các anh thông cảm.

PMXD
18-11-2004, 11:16 AM
Gửi GK:
Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này


Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải :confused:

Gary killer
18-11-2004, 07:53 PM
Gửi GK:
Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này


Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải :confused:
Ko fải đâu anh, rất nhiều người quan tâm đến, mỗi tội là khả năng kiến thức về VBA có hạn nên chỉ dừng ở mức đọc, tham khảo, học tập, hỏi .... chứ chưa đủ trình để pót bài (like me :D ). Mong các anh tiếp tục phát triển thêm chủ đề này. Hàng tuần vẫn ngóng các hàm excel mới :)

huycdc
19-11-2004, 08:25 AM
Thay mặt diễn đàn, xin cảm ơn các chú PMXD, CNPM và các thành viên khác đã, đang và sẽ chia sẻ các hàm VBA lên cho các anh em còn chưa biết học tập .
Mỗi tuần được một hàm của PMXD thì quý hoá quá! Còn chú CNPM thì mấy tuần một hàm đấy ? :D

PMXD
19-11-2004, 09:00 AM
Cảm ơn anh Huy đã khích lệ động viên để PMXD tôi phấn khích để tiếp tục công việc post bài, hy vọng anh duy trì chủ đề này trong mỗi tuần.
Sau khi đưa ra hàm nội suy đầu tiên, tôi thấy anh em trong diễn đàn có vài người vẫn thắc mắc về cách sử dụng. Hôm nay, tôi sẽ gửi cho anh em một bảng Excel ví dụ cụ thể để mọi người cùng tham khảo và sử dụng. Mong anh em sử dụng và đóng góp ý kiến.

CNPM
19-11-2004, 10:04 AM
Anh hỏi khó quá, em sẽ cố gắng nhưng kiếm cho em ít việc làm tạm kiếm sống đã, hihi. Có PMXD rồi, em chuyển sang VBA trong CAD vậy :D
Có ai cần Sap 9.03 thì liên hệ với tôi nhé, lấy rẻ 2 cốc cafe thôi. Hoặc đến chõ anh Huy lấy cũng được, anh Huy nhểy. ;)

PMXD
19-11-2004, 11:29 AM
To CNPM:
Anh thấy chú cũng hiểu nhiều về VBA đấy, chú cứ post VBA cho AutoCad đi, mảng đó cũng nhiều cái hay lắm. Hiện nay các công việc vẽ vời anh cũng đã viết được khá nhiều bằng VBA for Cad rồi. Nếu có điều kiện chúng ta sẽ trao đổi thêm nhé.
Nhân đây, tôi cũng xin kể một câu chuyện ngoài lề về quá trình tôi tiếp cận với VBA for CAd để anh em Relax.
Ngày đó, khi mới ra trường, trong tay chỉ có chút ít kiến thức cơ bản của trường đào tạo cộng thêm vài kỹ năng lập trình VB. Tôi thiết nghĩ phải làm thế nào tạo cho mình một thế mạnh riêng trong công việc. Và cuối cùng, tôi đã quyết định nghiên cứu về lĩnh vực tự: động thiết kế với AutoCad. Nói như vậy nghe có vẻ ghê gớm chứ thực ra là lập trình để vẽ với AutoCad. Với cách nghĩ như vậy, tôi đã cất công tìm hiểu các phương pháp để thực hiện và tổng kết lại gồm các phương pháp sau:
1. Viết bằng ngôn Lisp: Phương pháp này đơn giản, dùng được cho mọi Version của Cad, dễ học và cũng thuận tiện. Tuy nhiên nó không thể lập được những ứng dụng lớn và còn nhiều hạn chế khác. Do vậy tôi cũng không đi sâu tiếp để nghiên cứu nó.
2. Viết bằng ngôn ngữ C++ để tạo ra các file *.arx: Đây là cách chuyên nghiệp nhất(theo ý kiến của riêng tôi) để viết một ứng dụng chạy trong Cad. Nó cho phép người lập trình can thiệp rất sâu vào các đối tượng của Cad, tốc độ chạy chương trình thì miễn chê. Cũng chính vì vậy, việc học nó cũng như sử dụng thành thạo là rất khó khăn. Tôi đã từng đổ mồ hôi viết một đoạn Arx để vẽ một đường thẳng trong CAd, nghĩ lại vẫn thấy khiếp.
3. Viết bằng VBA(Visual Basic for Application): Cuối cùng thì tôi cũng lựa chọn phương án này vì dù sao VB cũng là công cụ ruột của tôi. Đọc các tài liệu về VBA trong AutoCad tôi đã thấy việc sử dụng nó tương đối thuận tiện, cho phép lập các ứng dụng lớn, tốc độ cũng không đến nỗi nào.
Tuy nhiên, mọi chuyện không chỉ đơn giản như vậy, lí do chính vì thời đó vẫn đang thịnh hành Cad14. Mà phiên bản này chưa được hỗ trợ VBA nhiều, đặc biệt là môi trường lập trình. Do đó, khi tôi lập VBA cho Cad14 tôi phải lập từ bên ngoài và "Điều khiển" Cad chạy từ xa. Tôi đã mất 1 năm(không hề nói sai) để dùng VB điều khiển Cad vẽ một đoạn thẳng có tọa độ từ (0,0,0) đến tọa độ (100,0,0). Nghĩ lại thấy cũng tội nghiệp cho bản thân, giá như ngày đó có Cad2000 thì chắc không mất nhiều thời gian đến vậy(Các bác nên biết rằng VBA chỉ support cho Cad2000 trở lên). Tuy nhiên, đó cũng là bước đánh dấu thời điểm tôi đến với VBA, và cũng chẳng có gì đáng tiếc khi ta bỏ công sức cho sự hiểu biết phải không các bác.
Thôi đến giờ cơm rồi, để lúc khác tiếp tục nhé, ở Viện tôi xuống chậm chân là hết cơm, đói bụng=> Kết cấu không thể bền vững được.

ButKim
19-11-2004, 01:09 PM
Sao cái font tiếng việt nó lỗi quá, Dùng IE thì lúc đánh được tiếng việt lúc lại không đánh được. Dùng các trình duyệt khác như My IE, Mozoilla Fireox thì bó tay vì không đánh được tiếng việt.

Em cũng rất muốn học VBA nhưng trình độ còn hạn chế quá. Em kể cho các bác nghe chuyện em tiếp cận với VBA trong Excel như thế nào nhé. Ngày xưa khi em còn học đại học. Em thường lên thư viện trường mình (ĐHXD) kiếm quyển PC world, trong đó có những ví dụ như hai bác CNPM và PMXD viết, ngày đó tôi đem nó vào góc phòng, rồi quay đi quay lại không thấy ai là xé lấy tờ đó, đút vô túi áo, mang về nhà đánh vô excel và chạy thử. Và dần dần tui cũng học được một ít. Nay thấy trên diễn đàn có mục này hay quá, cảm ơn máy bro đã san sẻ kiến thức của mình cho mọi người.

Thực ra trong diễn đàn có rất ít người post bài, vì những người vừa mới ra trường kinh nghiệm không có nhiều, mặc dù rất thích trang Web nhưng biết post gì bây giờ, chỉ còn biết lẳng lặng chờ các bài viết của bro, đọc và suy ngẫm. Một cách đánh giá "số người quan tâm đến chủ một đề" một cách rất đơn giản đó là đọc số lần truy cập đến chủ đề, số lần tải các file đính kèm. Chứ không phải không có ai nói gì thì đồng nghĩa với việc chủ đề này ít người quan tâm bác PMXD ạ.

Tôi rất thích chuyên mục này và mong các bro post nhiều hơn nữa. Nếu có thế PMXD và CNPM cho em biết tên một số sách viết về VBA trong CAD cũng như trong Excel, có tiếng việt thì tốt quá, còn không thì TA cũng được. Cảm ơn các bác nhiều.
-----------------------
Chúc mọi người vui vẻ.
-----------------------

CNPM
23-11-2004, 03:02 PM
Tôi có mỗi quyển Programming VBA with AutoCAD không có sách tiếng việt.

PMXD
23-11-2004, 04:00 PM
Sorry mọi người!
Hôm nay đáng ra là ngày tôi Post hàm thứ 2 của VBA trong Excel, nhưng từ sáng đến giờ đi hội thảo Kết cấu thép ở Melia Hotel nên chưa Post được. Sáng ngày mai tôi sẽ Post lên một hàm mới, anh em cố gắng chờ đợi nhé.
Mà mọi người trong diễn đàn sao không có câu hỏi gì cho vấn đề này nhỉ, cả cái bảng Excel tôi Post lên hôm trước anh em có dùng được không? Nếu có ai quan tâm thì lên tiếng nhé, tất cả vì sự phát triển chung thôi mà.

Gary killer
23-11-2004, 07:54 PM
Sorry mọi người!
Hôm nay đáng ra là ngày tôi Post hàm thứ 2 của VBA trong Excel, nhưng từ sáng đến giờ đi hội thảo Kết cấu thép ở Melia Hotel nên chưa Post được. Sáng ngày mai tôi sẽ Post lên một hàm mới, anh em cố gắng chờ đợi nhé.
Mà mọi người trong diễn đàn sao không có câu hỏi gì cho vấn đề này nhỉ, cả cái bảng Excel tôi Post lên hôm trước anh em có dùng được không? Nếu có ai quan tâm thì lên tiếng nhé, tất cả vì sự phát triển chung thôi mà.
Em đã dùng thử để làm bảng tra Ktd, kết quả thật mỹ mãn. Cảm ơn anh PMXD nhiều. Ah cho em hỏi hàm "UBound" để làm gì ah? Em có mở file help đọc nhưng trình độ TA hạn hẹp quá nên chưa hiểu hi`hi`...:d

PMXD
24-11-2004, 09:05 AM
Hi every body!
Từ hôm Post hàm Excel Nội suy đến bây giờ mới có một người phản hồi kết quả, Dù sao PMXD tôi cũng thấy hài lóng rồi. Hôm nay, như đã hứa, tôi xin đăng một hàm Excel mới phục vụ cho việc tính toán nội lực bản (theo giáo trình BTCT).
'==========================Giải thích các thông số
Tên hàm:
Mban
Các tham số:
P: Lực phân bố trên bản sàn (T/m2)
L1: Chiều dài cạnh 1 (m)
L2: Chiều dài cạnh 2 (m)
Mtrave: Loại Mô men được trả về
Mtrave=1 => M11
Mtrave=2 => M12
Mtrave=3 => M21
Mtrave=4 => M22
Mtrave=5 => M1
Mtrave=6 => M2
(Các giá tri M1, M2, M11, M12, M21, M22 xin xem ở hình vẽ kèm theo)

Thanh1,Thanh2,Thanh3,Thanh4: Thuộc tính dùng để kiểm tra xem có dầm ở các cạnh của bản hay không.Nếu người dùng không vào các tham số này thì hàm sẽ tự hiểu là có dầm.
'===========================Nội dung hàm
Enum Mtrave
TV_M11 = 1
TV_M12 = 2
TV_M21 = 3
TV_M22 = 4
TV_M1 = 5
TV_M2 = 6
End Enum

Function Mban(ByVal P As Double, ByVal L1 As Double, L2 As Double, ByVal Mtrave As Mtrave, Optional Thanh1 = True, Optional Thanh2 = True, Optional Thanh3 = True, Optional Thanh4 = True)


Dim r As Double
Dim TeTa As Double
Dim A1 As Double, B1 As Double, A2 As Double, B2 As Double
Dim M1 As Double, M11 As Double, M12 As Double
Dim M2 As Double, M21 As Double, M22 As Double

Dim MauSo As Double

If L1 > L2 Then
r = L1 / L2

If r >= 1 And r < 1.5 Then
TeTa = 1 + (r - 1) * (0.5 - 1) / (1.5 - 1)
A1 = IIf(Thanh1 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)
B1 = IIf(Thanh3 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)

A2 = IIf(Thanh4 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
B2 = IIf(Thanh2 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
ElseIf r >= 1.5 And r < 2 Then
TeTa = 0.6 + (r - 1.5) * (0.3 - 0.6) / (2 - 0.5)
A1 = IIf(Thanh1 = True, 1, 0)
B1 = IIf(Thanh3 = True, 1, 0)

A2 = IIf(Thanh4 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
B2 = IIf(Thanh2 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
End If
MauSo = (2 + A1 + B1) * L1 + (2 * TeTa + A2 + B2) * L2
M2 = P * L1 ^ 2 * (3 * L1 - L1) / 12 / MauSo 'He Don vi la Kg-m
M1 = TeTa * M2

M11 = A2 * M2
M12 = B2 * M2
M21 = A1 * M2
M22 = B1 * M2
Else
r = L2 / L1

If r >= 1 And r < 1.5 Then
TeTa = 1 + (r - 1) * (0.5 - 1) / (1.5 - 1)
A1 = IIf(Thanh2 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)
B1 = IIf(Thanh4 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)

A2 = IIf(Thanh1 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
B2 = IIf(Thanh3 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
ElseIf r >= 1.5 And r < 2 Then
TeTa = 0.6 + (r - 1.5) * (0.3 - 0.6) / (2 - 0.5)
A1 = IIf(Thanh2 = True, 1, 0)
B1 = IIf(Thanh4 = True, 1, 0)

A2 = IIf(Thanh1 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
B2 = IIf(Thanh3 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
End If
MauSo = (2 + A1 + B1) * L2 + (2 * TeTa + A2 + B2) * L1
M1 = P * L1 ^ 2 * (3 * L2 - L1) / 12 / MauSo 'He Don vi la Kg-m
M2 = TeTa * M1
M11 = A1 * M1
M12 = B1 * M1
M21 = A2 * M1
M22 = B2 * M1
End If
Select Case Mtrave
Case TV_M1
Mban = M1
Case TV_M11
Mban = M11
Case TV_M12
Mban = M12
Case TV_M2
Mban = M2
Case TV_M21
Mban = M21
Case TV_M22
Mban = M22
End Select
End Function

'===========================Chúc vui vẻ

To Garry Killer:

Em hỏi anh hàm Ubound nghĩa là gì phải không? Hàm Ubound là hàm trả về số thứ tự của phần tử cuối cùng trong mảng.
Ví dụ, khi ta khai báo mảng Vietanh(0 to 5) thì Ubound(VietAnh)=5
Cũng cần chú ý nếu ta khai báo VietAnh(2 to 5) thì Ubound(VietAnh) cũng =5.

niceshot
24-11-2004, 12:52 PM
Cũng đú làm một hàm tính toán thép cột chịu nén lệch tâm viết từ hồi còn sinh viên.
Giải thích các biến:
momen1 là momen tính toán (tm)
momen2 là momen dài hạn (tm)
axial1 là lực dọc tính toán (t)
axial2 là lực dọc dài hạn (t)
chieurong là bề rộng cột (cm)
chieucao là chiều cao cột (cm)
lopbaove là lớp bảo vệ thép (cm)
chieudai là độ dài của cột dùng để tính lệch tâm (cm)
macbt là mác bêtông 200, 250, 350, 400
macthep là mác thép AI, AII, AIII
muigt là hàm lượng cốt thép giả thiết (%)
Bác nào thử chạy xem. Tôi hỗi xưa test trên cuốn tính toán nhà công nghiệp BTCT thấy cũng đúng.

-----------------------------------------------------------------


Function thepcot(momen1 As Double, momen2 As Double, axial1 As Double, axial2 As Double, chieurong As Double, chieucao As Double, lopbv As Double, chieudai As Double, macbt As Integer, macthep As String, muigt As Double) As Double

Dim hzero, lzero, Ja, Jb, ezero, S, Kdh, Nth, neta, ezerogh, dolechtam, giatri_x, giatri_x_p As Double

If macbt = 200 Then
Rn = 90
anfa = 0.62
Azero = anfa * (1 - 0.5 * anfa)
Eb = 240000
ElseIf macbt = 250 Then
Rn = 110
anfa = 0.58
Azero = anfa * (1 - 0.5 * anfa)
Eb = 265000
ElseIf macbt = 300 Then
Rn = 130
anfa = 0.58
Azero = anfa * (1 - 0.5 * anfa)
Eb = 290000
ElseIf macbt = 350 Then
Rn = 150
anfa = 0.55
Azero = anfa * (1 - 0.5 * anfa)
Eb = 310000
Else
Rn = 200
anfa = 0.62
Azero = anfa * (1 - 0.5 * anfa)
Eb = 240000
End If
Ea = 2100000
If macthep = "AI" Then
Ra = 2100
ElseIf macthep = "AII" Then
Ra = 2700
ElseIf macthep = "AIII" Then
Ra = 3600
Else
Ra = 2700
End If

'Than chuong trinh
hzero = chieucao - lopbv
lzero = chieudai * 0.7
Ja = muigt / 100 * chieurong * hzero * (0.5 * chieucao - lopbv) ^ 2
Jb = chieurong * chieucao ^ 3 / 12
If chieucao / 25 < 2 Then
ezero = 100 * Abs(momen1) / axial1 + 2
Else
ezero = 100 * Abs(momen1) / axial1 + chieucao / 25
End If

If ezero / chieucao < 0.05 Then
S = 0.84
ElseIf ezero / chieucao > 5 Then
S = 0.122
Else
S = 0.11 / (0.1 + ezero / chieucao) + 0.1
End If

If momen1 * momen2 < 0 Then
Kdh = 1 + (-Abs(momen2) * 100 + axial2 * (0.5 * chieucao - lopbv)) / (Abs(momen1) * 100 + axial1 * (0.5 * chieucao - lopbv))
Else
Kdh = 1 + (Abs(momen2) * 100 + axial2 * (0.5 * chieucao - lopbv)) / (Abs(momen1) * 100 + axial1 * (0.5 * chieucao - lopbv))
End If
If Kdh < 1 Then
Kdh = 1
End If

Nth = 6.4 / lzero ^ 2 * (S * Eb * Jb / Kdh + Ea * Ja) / 1000
neta = 1 / (1 - axial1 / Nth)
dolechtam = neta * ezero + 0.5 * chieucao - lopbv

ezerogh = 0.4 * (1.25 * chieucao - anfa * hzero)

giatri_x = axial1 * 1000 / chieurong / Rn

If giatri_x > 2 * lopbv And giatri_x <= anfa * hzero Then
thepcot = axial1 * 1000 * (dolechtam - hzero + 0.5 * giatri_x) / Ra / (hzero - lopbv)

ElseIf giatri_x < 2 * lopbv Then

dolechtam_p = dolechtam - hzero + lopbv
thepcot = axial1 * 1000 * dolechtam_p / Ra / (hzero - lopbv)
Else
If ezero > ezerogh Then
giatri_x = anfa * hzero
thepcot = (axial1 * 1000 * dolechtam - Azero * Rn * chieurong * hzero ^ 2) / Ra / (hzero - lopbv)
Else
giatri_x = 1.8 * (ezerogh - ezero) + anfa * hzero
thepcot = (axial1 * 1000 * dolechtam - Rn * chieurong * giatri_x * (hzero - 0.5 * giatri_x)) / Ra / (hzero - lopbv)

End If
End If
End Function

Gary killer
24-11-2004, 04:38 PM
các anh có thể post luôn cả file excel ko? tải về dùng cho đỡ lằng nhằng :D

niceshot
24-11-2004, 05:50 PM
các anh có thể post luôn cả file excel ko? tải về dùng cho đỡ lằng nhằng :D

Load ca'i addin nay vao excel là ok!

PMXD
25-11-2004, 08:47 AM
To NiceShot
Rất vui khi có NiceShot tham gia Post bài cùng, nhưng tôi có vài ý kiến về hàm tính cột của bạn như thế này:
1- Bạn chưa đưa thép loại C vào trong tính toán
2- Giá trị muygt không được gán giá trị ban đầu
3- Thường thì người ta giả thiết giá trị muygt ban đầu rồi tính toán, sau đó tính lặp đến khi thỏa mãn điều kiện muytt xấp xỉ muygt thì dừng lại. Tuy nhiên trong hàm của bạn chẳng thấy một vòng lặp Do, While hay For gì cả.
Tuy nhiên, tôi cũng rất mong muốn các bạn tiếp tục hưởng ứng và post bài cùng tôi trong chủ đề này.

niceshot
25-11-2004, 10:14 AM
To NiceShot
Rất vui khi có NiceShot tham gia Post bài cùng, nhưng tôi có vài ý kiến về hàm tính cột của bạn như thế này:
1- Bạn chưa đưa thép loại C vào trong tính toán
2- Giá trị muygt không được gán giá trị ban đầu
3- Thường thì người ta giả thiết giá trị muygt ban đầu rồi tính toán, sau đó tính lặp đến khi thỏa mãn điều kiện muytt xấp xỉ muygt thì dừng lại. Tuy nhiên trong hàm của bạn chẳng thấy một vòng lặp Do, While hay For gì cả.
Tuy nhiên, tôi cũng rất mong muốn các bạn tiếp tục hưởng ứng và post bài cùng tôi trong chủ đề này.

Ngày xưa SV viết, đem mấy cái ví dụ trong tính toán nhà công nghiệp (bêtông 2) vào thấy cũng đúng đúng nên thấy không tính toán vòng lặp cho muigt. Thực ra mình chả học cái VBA này tử tế nên toàn lấy ví dụ của bọn nó ra rồi thay theo ý mình. Không có cơ bản nó thế đấy!

PMXD
03-12-2004, 09:48 AM
Chào các bạn!
Tôi đã viết một hàm mới trong Excel gửi cho các bạn từ hôm thứ 4, sau khi gởi, tôi quê không kiểm tra lại, vậy mà không hiểu sao chẳng thấy show lên đây. Anh Huy xem giúp lại nhé!

Hôm nay tôi sẽ gởi cho các bạn hàm tính cốt thép trong dầm BTCT tiết diện chữ nhật

1- Tên hàm: Fadam
2- Các tham số trong hàm
b :Bề rộng tiết diện (m)
h :Chiều cao tiết diện (m)
M : Mô men uốn (Kgm)
MBT: Mác bê tông (măc định là 300)
LCT :Loại cốt thép (mặc định là AII)
3- Các hàm phụ trợ
Hàm BeTong: Tính toán các thông số của bê tông
Hàm CotThep: Tính toán các thông số của cốt thép
4- Nôi dung chính của hàm
'=====================================================
Function FaDam(ByVal b As Double, ByVal h As Double, ByVal M As Double, Optional MBT = 300, Optional LCT = "AII")
Dim Rn As Double, Rk As Double, Eb As Double
Dim Ra As Double, Rad As Double, Ea As Double

Dim i As Long, X As Double, ho As Double, Delta As Double, x1 As Double, x2 As Double
Dim Anpha_o As Double, A1 As Double
Dim a As Double

BeTong MBT, Rn, Rk, Eb
CotThep LCT, Ra, Rad, Ea
'Doi don vi
Rn = Rn / 10 ^ 4: Rk = Rk / 10 ^ 2
Ra = Ra / 10 ^ 4: Rad = Rad / 10 ^ 2

Anpha_o = 0.62

b = b * 100
h = h * 100 ho = h - a

ho = h - a
M = Abs(M * 100)
If M <= 1 Then FaDam = "CÊu t¹o": Exit Function
TinhLaiThepDuong:
Delta = (Rn * b * ho) ^ 2 - 2 * Rn * b * M
If Delta < 0 Then
FaDam = "CÊu t¹o"
Exit Function
End If
x1 = (-Rn * b * ho + Sqr(Delta)) / (-Rn * b)
x2 = (-Rn * b * ho - Sqr(Delta)) / (-Rn * b)
If x1 > 0 And x2 > 0 Then
If x2 < Anpha_o * ho Then
X = x2
ElseIf x1 < Anpha_o * ho Then
X = x1
End If
End If


FaDam = Rn * b * X / Ra

End Function
'=====================================================
2 hàm phụ trợ

'=====================================================
Private Sub BeTong(ByVal MBT As Long, Rn As Double, Rk As Double, Eb As Double)
' ===========================Don vi tinh toan la Kg-m====================
If MBT = 0 Then MBT = 250
Select Case MBT
Case 100
Eb = 1.7 * 10 ^ 9
Case 150
Rn = 650000
Rk = 60000
Eb = 2.1 * 10 ^ 9
Case 200
Rn = 900000
Rk = 75000
Eb = 2.4 * 10 ^ 9
Case 250
Rn = 1100000
Rk = 83000
Eb = 2.65 * 10 ^ 9
Case 300
Rn = 1300000
Rk = 100000
Eb = 2.9 * 10 ^ 9
Case 350
Rn = 1550000
Rk = 110000
Eb = 3.1 * 10 ^ 9
Case 400
Eb = 3.3 * 10 ^ 9
Case 500
Eb = 3.6 * 10 ^ 9
Case 600
Eb = 3.8 * 10 ^ 9
End Select
End Sub


Private Sub CotThep(ByVal LoaiCotThep As String, Ra As Double, Rad As Double, Ea As Double)
'don vi kg,m
Select Case LoaiCotThep

Case "CI"
Ra = 2 * 10 ^ 7
Rad = 1.6 * 10 ^ 7
Ea = 2.1 * 10 ^ 6
Case "CII"
Ra = 2.6 * 10 ^ 7
Rad = 2.1 * 10 ^ 7
Ea = 2.1 * 10 ^ 6
Case "AI"
Ra = 2.1 * 10 ^ 7
Rad = 1.7 * 10 ^ 7
Ea = 2.1 * 10 ^ 6
Case "AII"
Ra = 2.7 * 10 ^ 7
Rad = 2.15 * 10 ^ 7
Ea = 2.1 * 10 ^ 6
Case "AIII"
Ra = 3.6 * 10 ^ 7
Rad = 2.8 * 10 ^ 7
Ea = 2.1 * 10 ^ 6
End Select

If Ra = 0 Then Ra = 2.7 * 10 ^ 7: Rad = 2.15 * 10 ^ 7: Ea = 2.1 * 10 ^ 6
End Sub
'=====================================================
Chúc các bạn thành công

Thuatdv
03-12-2004, 03:30 PM
Bạn PMXD và cả CNPM mỗi tuần duy trì post được một hàm trong Excel cho anh em sử dụng như vậy thì quá tốt còn gì! Tôi nghĩ nhiều người đang học và sử dụng nó sẽ thấy rất có ích? Chỉ mất vài phút copy mà có được luôn cả code và hướng dẫn sử dụng thì còn gì tốt bằng! Tôi thì thú thực là cũng chưa có nhu cầu để sử dụng VBA, nhưng hy vọng khi nào cần đến sẽ cậy nhờ đến các bạn!!!

Hồi ở VN tôi lại hay dùng Fortran, mà lúc mới bắt đầu học thì cũng phải "cơm nắm" đi theo Thầy Hoà để học đấy! Theo tôi được biết thì hồi đó Thầy Hòa là người rất siêu về cái món này! Không biết tình hình sức khoẻ của Thầy bây giờ như thế nào rồi? Nói chung cũng mất khá nhiều công sức... để thuê máy vi tính đen trắng của trung tâm tin học và mua một đống ổ đĩa A để lưu dữ liệu (vì máy hồi đó không có ổ cứng)!!! Nhiều hôm khi bước chân vào phòng máy thì trời vẫn còn nắng chang chang, nhưng khi chui ra khỏi phòng thì trời đã tối om, thấy hoa hết cả mắt mũi! Lọ mọ như vậy sau khỏang một thời gian cũng làm xong được cái chương trình tính toán nội lực cho kết cấu khung phẳng bằng phương pháp PTHH, run được ra kết quả hẳn hoi đấy! Nghĩ lại hồi còn trẻ thấy làm việc hăng thế, chẳng kể gì đến công sức bỏ ra gì cả!!!

Tôi nghĩ là chúng ta nên khuyến khích để mọi người share cho nhau sử dụng những mã nguồn sources của những chương trình tính toán cơ bản. Làm được như vậy sẽ tiết kiệm được khá nhiều thời gian, vì những người đi sau nếu có ý tưởng gì mới thì chỉ cần viết thêm một chút là được, thay vì phải viết lại toàn bộ chương trình? Ở nước ngoài họ cũng đang phổ biến làm như vậy. Nhưng có điều là nếu người nào sử dụng phần mã nguồn mở nào thì phải ghi rõ ràng nguồn gốc của nó là từ đâu và phần mình làm được là gi, chứ không nên để xảy ra tình trạng kiện cáo như thế này mệt lắm!!!
http://www.petitiononline.com/01122004/petition.html

CNPM
03-12-2004, 11:55 PM
Cuộc thi TTVN đã có rất nhiều bài viết các bạn có thể đọc tại đây để biết thêm chi tiết.

Vấn đề này thật bức thiết đố với những nhà lập trình tin học. Mời kích vào mục sau để xim thêm chi tiết.
>>> mục 1 (http://www.petitiononline.com/01122004/petition.html)
>>> Mục 2 (http://free.hostdepartment.com/v/vn1505/)
>>> Mục 3 (http://www.diendantinhoc.com/showthread.htm?t=55459&page=24&pp=15)
kích vào đây (http://www.vnn.vn/cntt/xalo/2004/12/352505/) để đọc bài trả lời


Cám ơn bác Thuật đã quan tâm. Tôi nghĩ các bạn muốn biết nhiều về VBA trong Excel và trong Autocad thì việc đầu tiên các bạn phải có kiến thức cơ bản về "toán học rời rạc". Một môn cực kỳ khô khan nhưng tất có ích cho việc lập trình. thứ hai, Vì là VBA nên muốn học nó bạn phải biết sơ qua về lập trình VB, nếu biết sâu thì càng tốt. Biết được hai thứ đó thì việc lập trình của bạn đối với VBA thật là đơn giản. Bạn chỉ cần đọc help trong một tuần là có thể làm được những gì bạn muốn. Bạn có thể down bản mã nguồn mở TCVN3.0 do thầy Hoàng Chính Nhân - bộ môn công nghệ phần mềm - trường ĐHXD cùng với một số học trò của thầy viết do đồng nghiệp của tôi post lên trong mục BTCT của ketcau.com để tham khảo. khi đọc tất cả những thứ đó cộng với việc đọc các bài viết trong mục này, làm vài ba hàm nhỏ là bạn sẽ vững tay ngay thôi. Công việc thật là đơn giản.

Nhân đây cũng thay mặt thầy Hòa cảm ơn bác Thuật đã hỏi thăm sức khoẻ thầy Hòa. Thầy hiện nay vẫn khoẻ và rất nhàn, cuộc sống cực kỳ thanh bạch. Thầy thường xuyên lên bộ môn chơi với các bạn trẻ. Có bài nào hay trong diễn đàn tôi đều đọc cho thầy nghe. Tôi sẽ chuyển lời hỏi thăm của bác đến Thầy.

Góp ý cùng PMXD.
CNPM sắp tới không thể tham gia diễn đàn thường xuyên được, có lẽ phải hai tháng nữa. Do vậy xin góp ý cùng PMXD về mục "Mỗi tuần post một hàm excel" như sau :

1. Nhiều bạn đọc sẽ không hiểu được ý nghĩa của các hàm mình post. đơn cử như hàm UBound và LBound, và hàm cuont (của tôi). Tôi dám chắc rằng ít ai hiểu hết ít nghĩa và mối liên quan gữa 3 hàm này. Do vậy sau mỗi hàm bác nên có vài dòng giải thích về Hàm trong bài post của mình. Mà theo tôi cái này cực kỳ quan trọng.

2. Nhìn mấy bài bác post tôi cũng thấy hoa mắt. Vậy nên chăng có cách nào đó giúp người đọc dễ tiếp cận hơn. Cái này tùy bác thôi. Tôi bé tuổi nên không dám góp ý (hê hê).

Chúc vui vẻ.
__________________
CNPM

CNPM
04-12-2004, 12:10 AM
Về vụ TTVN hiện tôi có rất nhiều bài viết về vụ này. Xin các bạn đừng phán xét vội, hãy chờ các tin khác từ www.vnn.vn hoăc www.vnexpress.net. Nếu các bài viết có tính chính trị. Xin anh Huy hãy xóa bó đi. Thanks.

PMXD
06-12-2004, 09:12 AM
To CNPM:
Rất cảm ơn CNPM đã góp ý xây dựng cho bài viết của tôi. Tôi sẽ cố gắng giải thích ý nghĩa của các dòng lệnh trong hàm khi post bài để anh em trong diễn đàn dễ dàng tiếp nhận hơn.
Nhân dây, tôi cũng rất mong anh em nào quan tâm đến VBA, khi đọc các hàm của tôi nếu có chỗ nào khó hiểu thì cứ Post bài để hỏi, tôi sẽ trả lời trong phạm vị kahr năng của tôi.
Chúc các bạn thành công

phu_ho
06-12-2004, 03:06 PM
Xin hoan nghênh nhiệt liệt các bác mỗi tuần lại ủng hộ một chương trình :) Tôi sẽ thử, lúc nào không hiểu gì sẽ nhờ các bác giải thich dùm nhé :)

Xin góp ý một chút : cho phần chú thích, ngoài việc giải thích tên biến, các bác nên cho thêm một dòng giải thích cái hàm các bác đang tính (tức là gõ nguyên cái công thức hoặc reference của nó), thì có lẽ dễ theo dõi hơn.

PMXD
06-12-2004, 03:46 PM
Hôm nay vào Ketcau.com mới để ý kỹ, một số bài trên diễn đàn có mấy ông sao vàng vàng đẹp ghê trên dòng tiêu đề. Nhìn lại bài của mình chẳng thấy ông sao nào, lạ ghê. Anh Huy trả lời giúp em cái nhẩy :D

huycdc
07-12-2004, 09:08 AM
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 ! :D

PMXD
07-12-2004, 03:23 PM
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

dnl
15-12-2004, 09:18 AM
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?

dnl
19-12-2004, 10:35 AM
Bac PMXD ơi! Bác oải quá rồi à???? :confused:

PMXD
05-01-2005, 09:03 AM
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

maituan
22-01-2005, 12:18 PM
Đ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.

ttkh
08-02-2005, 05:35 PM
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. :)

daucuchuoi
10-02-2005, 12:10 AM
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.

tdhtkcd
11-02-2005, 02:03 PM
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

PMXD
12-02-2005, 02:55 PM
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.

abasa
25-02-2005, 12:22 PM
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!?! :rolleyes:

tuanla
25-02-2005, 02:34 PM
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ả.

CNPM
25-02-2005, 11:31 PM
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!?! :rolleyes:
Abasa tải cái này về xem nhé. Không biết đã vừa ý bạn chưa !..

angel911
28-02-2005, 10:45 AM
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

ttkh
28-02-2005, 02:57 PM
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ả :(

abasa
28-02-2005, 06:27 PM
Cám ơn anh CNPM,, chúc anh thành công, thành công, đại thành công
:D

trungkhoi
01-03-2005, 10:59 PM
toi cung rat ung ho :-)

angel911
04-03-2005, 08:59 PM
Anh Nguyễn Việt Anh : anh giải thích cho em cách điền tung độ đah vào các cell nhé.,giải thích cách dùng hàm range,làm sao mà lại điền các tung độ đah vào range như thế được.Anh giải thích căn kẽ nhé,chỉ rõ những hàm trong vba luôn

Thầy ngthai : thầy cho em địa chỉ yahoo nhé em sẽ gửcho thầy nhiều file vba rất hay.thầy dùng nó viết thành 1 quyển sách cho sinh viên tham khảo thầy nhé.em ở Đà nẵng nên không thể tìm gặp Thầy trực tiếp được

Quả thật mò mãi không ra. Cái cell nhập số Number of Spans ( <=10 ): không hiểu nó làm cái list đổ xuống đó kiểu gì. Đã ai tìm ra cách làm cái cell này chưa.???? Anh Việt Anh thấy nó thế nào :confused: :confused:

ngthai
05-03-2005, 11:37 PM
Tôi xin góp vui bằng 1 file Excel có ứng dụng VBA:
FTP
69.93.141.90
login: pmxd
password: pmxd12345
Thư mục Thai/Excel-VBA
Nếu có sai sót, rất mong được góp ý để sửa chữa.


Hoặc:
http://plaza.ufl.edu/ngthai/Excel-VBA

Nhân tiện nói về VBA, hồi tôi dạy lớp tin học K41, 42 hay 43 gì đó (không nhớ nữa, cách đây 2 hay 3 năm), tôi cho lớp 1 file Excel có VBA, có cả password protect sheet và password protect VBA, thế mà sinh viên nó phá được password ngay (cái nick name của cậu này trong forum của SVXD hình như là kirimaru gì gì đó).

Hiện nay, tôi có 1 file Word rất quan trọng, tôi để password, mà lại quên mất password, hỏi cao thủ kirimaru (hay gì gì đó) hay các cao thủ khác, có chương trình phá password của Word thì gửi cho tôi qua ngthai@ufl.edu
Cảm ơn nhiều.

angel911
06-03-2005, 08:46 AM
Tôi xin góp vui bằng 1 file Excel có ứng dụng VBA:
FTP
69.93.141.90
login: pmxd
password: pmxd12345
Thư mục Thai/Excel-VBA
Nếu có sai sót, rất mong được góp ý để sửa chữa.


Hoặc:
http://plaza.ufl.edu/ngthai/Excel-VBA

Nhân tiện nói về VBA, hồi tôi dạy lớp tin học K41, 42 hay 43 gì đó (không nhớ nữa, cách đây 2 hay 3 năm), tôi cho lớp 1 file Excel có VBA, có cả password protect sheet và password protect VBA, thế mà sinh viên nó phá được password ngay (cái nick name của cậu này trong forum của SVXD hình như là kirimaru gì gì đó).

Hiện nay, tôi có 1 file Word rất quan trọng, tôi để password, mà lại quên mất password, hỏi cao thủ kirimaru (hay gì gì đó) hay các cao thủ khác, có chương trình phá password của Word thì gửi cho tôi qua ngthai@ufl.edu
Cảm ơn nhiều.




rất đơn giản anh a, nhưng mà anh phải mât 45 $ để mua phần mềm.có bán tại địa chỉ sau :http://www.lostpassword.com/word.htm

ngthai
06-03-2005, 10:34 PM
tiết kiệm được $45 cũng tốt chứ. Nên ai có freeware gỡ password của Word thì gửi cho tôi nhé.
Tôi mới post lên 69.93.141.90 thêm 2 file Excel có ứng dụng VBA, và 1 số file pdf ở thư mục Documents

ngthai
07-03-2005, 12:16 AM
Khà, không biết có ẩn sỹ nào đã post cái password recovery program vào trong Thư mục Thái cách đây 2 h rồi. Tôi đã copy rồi, nên nếu ẩn sỹ muốn xóa chương trình đấy đi cũng được.

Cảm ơn ẩn sỹ nhiều nhé !

XuanThuy
07-03-2005, 09:34 AM
Tôi xin góp vui bằng 1 file Excel có ứng dụng VBA:
FTP
69.93.141.90
login: pmxd
password: pmxd12345
Thư mục Thai/Excel-VBA
Nếu có sai sót, rất mong được góp ý để sửa chữa.


Hoặc:
http://plaza.ufl.edu/ngthai/Excel-VBA

Nhân tiện nói về VBA, hồi tôi dạy lớp tin học K41, 42 hay 43 gì đó (không nhớ nữa, cách đây 2 hay 3 năm), tôi cho lớp 1 file Excel có VBA, có cả password protect sheet và password protect VBA, thế mà sinh viên nó phá được password ngay (cái nick name của cậu này trong forum của SVXD hình như là kirimaru gì gì đó).

Hiện nay, tôi có 1 file Word rất quan trọng, tôi để password, mà lại quên mất password, hỏi cao thủ kirimaru (hay gì gì đó) hay các cao thủ khác, có chương trình phá password của Word thì gửi cho tôi qua ngthai@ufl.edu
Cảm ơn nhiều.
Tôi không biết ở HN thì mua ở đâu nhưng ở TPHCM thì ra Tôn Thất Tùng có đầy các phần mềm để ***** password. Tôi đang dùng Passware (www.LostPassword.com), có thể ***** được bộ MS Office, Acrobat....

abasa
07-03-2005, 02:25 PM
Tôi không biết ở HN thì mua ở đâu nhưng ở TPHCM thì ra Tôn Thất Tùng có đầy các phần mềm để ***** password. Tôi đang dùng Passware (www.LostPassword.com), có thể ***** được bộ MS Office, Acrobat....

Bác giúp em ***** cái passware VBA key 7.0 với

ngthai
09-03-2005, 05:49 AM
Tôi không biết ở HN thì mua ở đâu nhưng ở TPHCM thì ra Tôn Thất Tùng có đầy các phần mềm để ***** password. Tôi đang dùng Passware (www.LostPassword.com), có thể ***** được bộ MS Office, Acrobat....
Khổ nỗi, tôi ở Mỹ tho, vùng quê hẻo lánh. Chạy máy bay ra TPHCM non-stop chắc cũng mất 1 ngày nên không ra Tôn Thất Tùng được.
Dạo này vợ con tôi ra thăm thành phố, thành ra ở quê tôi có nhiều thời gian rỗi vào ketcau.com hơn. 2 tuần nữa, tôi lại bận bịu với vợ con rồi, chắc ít có dịp vào ketcau.com được.

Trong ftp://69.93.141.90/Thai, tôi có post thêm 1 số video về thí nghiệm đất hiện trường, 1 số file pdf về nền móng.

binhcd
09-03-2005, 11:03 AM
Anh ngthai ở mỹ tho hả, quê em cũng ở mỹ tho tiền giang nè anh đang làm ở công ty nào vậy, có gì hôm nào về quê em mang dùm cho ,em đang học xdbk,có gi gởi mail cho em ,em mua dùm cho dc mail của emlop_a8@yahoo.com

ttkh
09-03-2005, 12:20 PM
Bác giúp em ***** cái passware VBA key 7.0 với
Bạn gửi VBA vào mail mình đi. Mình xem có thể giúp bạn được không? Sẳn đây bạn nào có nhu cầu ***** VBA của EXCEL thì liên hệ với mình nha. Hôm rồi mình mới làm được một cái. Thành công mỹ mãn.... Nhưng mục đích chung là học hỏi thôi nha.... :) Địa chỉ của mình : thanhxd97@yahoo.com

abasa
09-03-2005, 05:18 PM
Bạn gửi VBA vào mail mình đi. Mình xem có thể giúp bạn được không? Sẳn đây bạn nào có nhu cầu ***** VBA của EXCEL thì liên hệ với mình nha. Hôm rồi mình mới làm được một cái. Thành công mỹ mãn.... Nhưng mục đích chung là học hỏi thôi nha.... :) Địa chỉ của mình : thanhxd97@yahoo.com


mình để ở ftp://63.93.141.90/abasa geostudio rồi đó, bạn gửi cho mình file ***** nhé, cám ơn trước :D
vào đó với name: pmxd
pass: pmxd12345

hoahuce
09-03-2005, 05:51 PM
HI, anh PMXD đi đau mất rùi vây, em thấy im hơi lặng tiếng quá đó. Bọn em đang đợi hàm VBA mới của anh đây.chúc anh mạnh khoẻ, thành công....

XuanThuy
09-03-2005, 08:39 PM
Bác giúp em ***** cái passware VBA key 7.0 với
Tôi chỉ có bản này thôi, bác dùng tạm vậy.

CNPM
10-03-2005, 12:29 AM
Quả thật mò mãi không ra. Cái cell nhập số Number of Spans ( <=10 ): không hiểu nó làm cái list đổ xuống đó kiểu gì. Đã ai tìm ra cách làm cái cell này chưa.???? Anh Việt Anh thấy nó thế nào :confused: :confused:

Không hiểu cái ô Number of Spans ( <=10 ) trong file InfluenceLines.xls nó làm list đổ xuống ntn ấy nhỉ. Bó tay. Anh Việt Anh Thấy thế nào??? :confused: :confused: Chỉ cho em với !

angel911
10-03-2005, 06:10 PM
[QUOTE=CNPM]Không hiểu cái ô Number of Spans ( <=10 ) trong file InfluenceLines.xls nó làm list đổ xuống ntn ấy nhỉ. !


Anh vào INSERT >NAME >DIFINE xem sao. Hình như Họ sử dụng menu Data để làm ấy.em cũng chẵng biết nữa.

Nhân tiện nói về EXCel.Ngày nay excel đã trở nên rất mạnh mẽ với với các Chương trình fụ trợ (dạng như cái TKXD của anh NGLAM cho autocad ấy).Dùng các chương trình ấy bạn có thể thêm 1 hàm vào trong excel rất dễ dàng ,không fải dùng vba.Nói chung là có thể giúp ta được rất nhiều việc. xin giới thiệu trang web để các bạn tham khảo
http://www.beyondtechnology.com/home.shtml
http://www.j-walk.com/ss/pup/pup6/trial.htm


còn mấy trang nữa em quên mất bữa sau em sẽ gửi lên.Các anh dùng tạm cái này

tuanla
23-03-2005, 09:43 AM
to hung01x3a
QUOTE=CNPM]Không hiểu cái ô Number of Spans ( <=10 ) trong file InfluenceLines.xls nó làm list đổ xuống ntn ấy nhỉ. !
Cái này rất đơn giản bạn vào menu data chọn validation , trong phần allow bạn chọn list rồi lựa chọn danh sách trong phần source để đưa vào list là OK.

hoahuce
26-03-2005, 05:33 PM
hom nay làm bài tập về nhà VBA, khi tính toán thép chịu mô men uốn thì vướng phải công thức tra bảng của phi, A, phụ thuộc vào anpha0, và anpha0 phụ thuộc vào 2 điều kiện là Mac Betong và Loại thép CI,CII... em không biết là nên dể bảng cần tra dùng file dữ liệu loại nào?? (nên dùng access,sql hay excel??? ). Em định dùng access để làm ,tuy nhiên làm mãi rùi mà vẫn ko được vì khi đưa access vào biến DATA trong DATA CONTROL thì nó báo là không hiểu định dạng của file(). AI BIẾT thì chỉ cho em cách nhúng acess vào VB nha(hoặc các loại cơ sở dữ liệu khác ). Xin cảm ơn.
---------------------
ps: không biết mọi người đã làm xong bài tập chưa nhỉ ? :D :D
ai cần active skin thì thứ 7 mang usb để copy nha.

Hanh
26-03-2005, 07:23 PM
Dùng excel, dùng hàm vlookup, hlookup chắc là được ngay (chẳng cần dùng đến VBA)

hoahuce
28-03-2005, 05:29 PM
Dùng excel, dùng hàm vlookup, hlookup chắc là được ngay (chẳng cần dùng đến VBA)
dùng các hàm Vlookup hoặc hlookup thì cũng được , tuy nhiên nếu bạn dùng các hàm như match, hoặc index thì sẽ hay hơn rất nhiều đó.
nếu cần thì tôi sẽ gửi cho vậy :D :D

ttkh
02-04-2005, 11:40 AM
Các hàm Excel khi thực hiện xong, có cách nào để không cho nó hiển thị? Ví dụ đơn giản khi ta thực if(......) ở ô B2 xong. Bây giờ không muốn thấy lệnh (giấu lệnh) ô B2 nữa thì làm cách nào? Nhưng kết quả ở B2 sẽ vẫn thay đổi nếu ta thay đổi các phần tương ứng trong lệnh if(.....)

ducxd
03-04-2005, 03:09 PM
bác khoá password ô đó là xong thôi chẳng cách nào thấy lệnh cả.

linhcn
04-04-2005, 03:30 PM
Co bac nao biet cach pha hoac khoi phuc lai cac file excel co dat password?Vi truoc day e co lam may file tinh toan nhung lai quen mat password ma bay gio e muon sua lai doi chut

nguyen trong thang
08-04-2005, 05:17 PM
em rat ung ho
cac bac nao co phan men tinh nen lun khong.cho tai ve tham kha
em cam on

nguyen trong thang
09-04-2005, 10:47 AM
Cac Bac Kinh Men
Bay Gio Em Muon Lam Ben Vba,de Tra Bang Ben Exel Thi Phai Lam The Nao
Chuc Cac Bac Khoe

dnl
09-04-2005, 03:37 PM
Các bác chỉ giúp em cách sẻ và ghép file được không? Em vừa nhận được một file sẻ bằng total commander . Em đã dơwn phần mềm này về nhưng không ghép được. Bác nào biết có thể hướng dẫn được không?Thanhks!

nguyenduc_cdcc
13-04-2005, 04:47 PM
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

Hàm này có một lỗi nhỏ.

Đèn_Đỏ
14-04-2005, 03:49 PM
Vấn đề đặt ra là nội suy trong cơ sở dữ liệu cơ chứ không phải trong Exceel. Bác nào đã viết hay là có code thì post lên nhé !

PMXD
15-04-2005, 03:25 PM
Vấn đề đặt ra là nội suy trong cơ sở dữ liệu cơ chứ không phải trong Exceel. Bác nào đã viết hay là có code thì post lên nhé !
Nội suy trong cơ sở dữ liệu? Bạn có thể nói rõ ý muốn của bạn không? Hàm này tôi làm để phục vụ riêng cho các bảng trong Excel.

Phùng Hoàng Anh
17-04-2005, 08:20 PM
PMXD có thể sửa lại những lỗi nhỏ này trong hàm "Facot" được không?
Phi=PhiUD(Lo,b,"R")?
Alpha(MBT)?
MuyMin = TimMax(Array(HamLuongCot * 100, MuyMinVa(Lo, b, h, 0)))

Le Viet Thanh
17-04-2005, 10:03 PM
Tôi xin chia sẽ sự quan tâm đến VBA với các bạn, cũng là người chuyên lập trình về phần mềm xây dựng bằng VB6.0 và VBA (for Excel, Project), tôi xin trình bày vài ý kiến về VBA:
Một phần mềm ứng dụng bao giờ cũng phải có 3 phần: giao diện (để nhập, xem và in kết quả,..). phần lõi tính toán và phần lưu trữ, truy xuất dữ liệu trên đĩa cứng. VB là ngôn ngữ lập trình có thể làm việc tốt cả 3 phần này một cách chuyên nghiệp.
Khi chúng ta dùng VBA for Excel, thực ra chúng ta đã dùng Excel để làm giao diện và lưu trữ dữ liệu của ứng dụng (rất tiện cho việc nhập liệu, xem và in kết quả), chỉ viết code để truy xuất dữ liệu trong các sheet và thực hiện tính toán.
Vì vậy, muốn trở thành một người viết VBA, chúng ta cần biết nhiều về chuyên môn và thuật toán, biết về ngôn ngữ VB và mốt số hàm truy xuất dữ liệu từ các sheet (các đối tượng của Excel)
Để việc trao đổi kinh nghiệm về VBA sôi nổi hơn, có thể bác PMXD nêu chủ đề viết Code trong từng tuần để chúng ta cùng post lên mạng cho vui

Le Viet Thanh
17-04-2005, 10:43 PM
Tôi cũng xin post một hàm dùng để tính dầm CN chịu M, Q và M-xoắn

Public Sub Uphang_xoan_cnhat(M As Single, Q As Single, MX As Single, b As Single, h As Single, a As Single, Fk As Single, Fn As Single, Fk1 As Single, Fn1 As Single, Ra As Single, Rad As Single, Rn As Single, Rk As Single, anfa0 As Single, fd As Single, u As Single, u_min As Single, ktraDam As Boolean)
'Thu tuc tinh Fk, Fn, Fk1, Fn1 de chong xoan (voi fd va u chon truoc)
Dim h0 As Single, b0 As Single, delta_Fk As Single, kq As Boolean
Dim C(1 To 100) As Single, MM As Single, MM_min As Single, tam As Single
Dim m0 As Single, m_d As Single, v As Single, qd As Single, Qdb As Single
Dim Fk_max As Single, Fk_min As Single, Fk1_max As Single, Fk1_min As Single
Dim x As Single, i As Long
'**************************************************************
'Kiem tra dk han che cua Mx:
If MX > (0.1 * Rn * h * b ^ 2) Then
ktraDam = False 'Mx qua lon, khong thoa dk han che.
Exit Sub 'Khong the tke dam voi kich thuoc da chon
End If
'Neu thoa man dk han che, ta kiem tra cac gia tri tai trong
If MX = 0 Then MX = 1 'de tranh loi chia cho 0
If MX < 0 Then MX = -MX 'Chi tinh toan voi cac gia tri duong
If Q < 0 Then Q = -Q 'Chi tinh toan voi cac gia tri duong
If Q = 0 Then Q = 1 'de tranh loi chia cho 0
If M < 0 Then M = -M 'Chi tinh toan voi cac gia tri duong
v = M / MX
If v >= 10 Then v = 10 'can thiet de dam bao mo khong qua nho
'neu khong ctrinh se lam tang Fk de thoa dk m_d<3*m0
u = mdl01.min2so(u_min, h / 3)
'Ngay tu dau, chon luon u nho nhat de chong xoan.
If Fk < 1.57 * 0.0001 Then Fk = 1.57 * 0.0001 'Toi thieu 2fi10
If Fn < 1.57 * 0.0001 Then Fn = 1.57 * 0.0001 'Toi thieu 2fi10
If Fk1 < 1.57 * 0.0001 Then Fk1 = 1.57 * 0.0001 'Toi thieu 2fi10
If Fn1 < 1.57 * 0.0001 Then Fn1 = 1.57 * 0.0001 'Toi thieu 2fi10
delta_Fk = 0.1: h0 = h - a: b0 = b - a
'**************************************************************
'TINH TOAN KIEM TRA THEO M VA MX:
m0 = 1 / ((2 + 4 * v * Sqr(b / (2 * h + b))) * (2 * h + b) * b)
Fk_min = (Rad * fd) / (3 * Ra * (2 * h + b) * u * m0) ':Fk_max = 3 * Fk_min
If Fk < Fk_min Then Fk = Fk_min
kq = False
Do
x = (Ra * (Fk - Fn)) / (Rn * b)
If x > anfa0 * h0 Then 'Qua nhieu thep, dam bi nut
Fk = -1: Fn = -1: ktraDam = False: Exit Sub
End If
m_d = Rad * fd / (Ra * Fk * (2 * h + b) * u)
'Tinh MM_min (Kha nang chong xoan nho nhat):
C(1) = (2 * h + b) / 100
MM_min = (Ra * Fk * (h0 - 0.5 * x) * (1 + m_d * C(1) * C(1)) * b) / (C(1) + v * b)
For i = 2 To 100
C(i) = i * C(1)
tam = (Ra * Fk * (h0 - 0.5 * x) * (1 + m_d * C(i) * C(i)) * b) / (C(i) + v * b)
If MM_min >= tam Then MM_min = tam
Next
If MX <= 0.95 * MM_min Then
kq = True
Else
If Fk < (0.02 * b * h0) Then
Fk = Fk + delta_Fk
Else 'Khong the tke dam voi kich thuoc, fd, u da chon
ktraDam = False
Fk = -1: Fn = -1
Exit Sub
End If
End If
Loop Until kq = True
'**************************************************************
'TINH TOAN KIEM TRA THEO MX VA Q:
'Kiem tra dk:
If MX <= 0.5 * Q * b Then
qd = Rad * fd / u 'Voi u=u_min
Qdb = Sqr(8 * Rk * b * h0 * h0 * qd)
If (Q + 3 * MX / h) <= Qdb Then
Exit Sub 'Khong can kiem tra tiep nua.
End If
End If
'm0 = 1 / ((2 + 4 * v * Sqr(h / (2 * b + h))) * (2 * b + h) * h)
'Fk1_min = (Rad * fd) / (3 * Ra * (2 * b + h) * u * m0) ':Fk1_max = 3 * Fk1_min
'If Fk1 < Fk1_min Then Fk1 = Fk1_min '(Khong can dung cac lenh nay)
kq = False
Do
x = (Ra * (Fk1 - Fn1)) / (Rn * h)
If x > anfa0 * h0 Then 'Qua nhieu thep, dam bi nut
Fk = -1: Fn = -1: ktraDam = False: Exit Sub
End If
m_d = (Rad * fd) / (Ra * Fk1 * (2 * b + h) * u)
'Tinh MM_min (Kha nang chong xoan nho nhat):
C(1) = (2 * b + h) / 100
MM_min = (Ra * Fk1 * (b0 - 0.5 * x) * (1 + m_d * C(1) ^ 2) * h) / (C(1) * (1 + Q * b / (2 * MX)))
For i = 2 To 100
C(i) = i * C(1)
tam = (Ra * Fk1 * (b0 - 0.5 * x) * (1 + m_d * C(i) ^ 2) * h) / (C(i) * (1 + Q * b / (2 * MX)))
If MM_min >= tam Then MM_min = tam
Next
If MX <= 0.95 * MM_min Then
kq = True
Else
If Fk1 < (0.01 * b0 * h) Then
Fk1 = Fk1 + delta_Fk
Else 'Khong the tke dam voi kich thuoc, fd, u da chon
ktraDam = False
Fk1 = -1: Fn1 = -1
Exit Sub
End If
End If
Loop Until kq = True
'Ket qua ta duoc Fk, Fn, Fk1, Fn1, u=u_min, fd
End Sub

Le Viet Thanh
17-04-2005, 10:52 PM
Bạn muốn nối suy dữ liệu chứa trong file CSDL ACCESS phải không. Theo tôi, giả sử dữ liệu của bạn chứa trong một bảng (hay nhiều bảng) của một cơ sở dữ liệu.MDB.
Trước tiên, bạn dùng một câu lệnh SQL để gom các dữ liệu cần truy cứu vào một dối tượng DAO.Recordset (mở ở dạng DBOpendynaset).
- Dùng các phương thức tìm kiểm của đối tượng Recordset như MoveFirst, MoveNext.. để định vị con trỏ đọc mẫu tin ở record cần tìm.
- Dùng các phương thức Movenext, MovePrevious.. để đọc các giá trị "xung quanh" giá trị cần nội suy và lưu vào các biến (vd: X_tr, X_d, Y_tr, Y_d)
- Dùng công thức nội suy để xác định giá trị cần tìm.

nhaiben
18-04-2005, 05:06 AM
nhân có các hàm "Ễch xeo" em hỏi các bác 1 câu hơi thô thiển tý là tính căn bậc ba thế nào ạ? hic

Le Viet Thanh
18-04-2005, 09:53 AM
goi Nhaiben
Private Function Can_bac_n(Byval x as Single, byval n as long) as single
Can_bac_n=x^(1/n)
End function

Sau do goi ham bang cách:
y=(12032,3)

Le Viet Thanh
18-04-2005, 09:54 AM
goi Nhaiben
Public Function Can_bac_n(Byval x as Single, byval n as long) as single
Can_bac_n=x^(1/n)
End function

Sau do goi ham bang cách:
y=(12032,3)

Le Viet Thanh
18-04-2005, 09:56 AM
goi Nhaiben

Public Function Can_bac_n(Byval x as Single, byval n as long) as single
Can_bac_n=x^(1/n)
End function

Sau do goi ham bang cách:
y=Can_bac_n(12032,3)

nguyen trong thang
18-04-2005, 10:02 AM
chào bác PMXD
Ham tra bang cua bac co tra ve k=0,khi gia tri m=gia tri trong bang tra,con a/b khac gia tri trongbang tra
chao than ai

Le Viet Thanh
18-04-2005, 12:52 PM
Thấy vấn đề tra bảng trong EXCEL sôi nổi quá, tôi cũng gởi một hàm lên để các bạn tham khảo cho vui.

-----

Public Function Tra_Bang(gtri_h_tim As Single, gtri_c_tim As Single, Vung_data As Excel.Range) As Single
'Trong do:
'Vung_data la toan bo vung bang chua du lieu, ke ca vung chua tieu de cua hang va cot
'Gtri_h_tim la gia tri de xac dinh chi so cua Hang can tim,
'Khi Vung_data chi co mot Cot, tuc la : n_c=1 thi phai nhap gtri_h_tim=1
'Gtri_c_tim la gia tri de xac dinh chi so cua Cot can tim
'Khi Vung_data chi co mot hang, tuc la : n_h=1 thi phai nhap gtri_c_tim=1
Dim Bang_2C() As Single 'La mang chua cac du lieu cua bang
Dim n_h As Integer, n_c As Integer 'So hang va cot cua bang du lieu
Dim gtri_h() As Single 'La mang 1 chieu chua gia tri cua tieu de hang cua bang du lieu
Dim gtri_c() As Single 'La mang 1 chieu chua gia tri cua tieu de cot cua bang du lieu
Dim cso_h1 As Integer, cso_h2 As Integer, cso_c1 As Integer, cso_c2 As Integer
Dim X_h1c1 As Single, X_h1c2 As Single, X_h2c1 As Single, X_h2c2 As Single
Dim X_H1 As Single, X_H2 As Single, X_tim As Single
Dim Delta_cot As Single, Delta_hang As Single
Dim i As Integer, j As Integer
'=========================================================================
'DOC DU LIEU VAO BANG
Vung_data.Select

n_c = Selection.Columns.Count - 1
n_h = Selection.Rows.Count - 1
Selection.Cells(1).Activate 'Chon o dau tien cua bang lam hien hanh
ReDim Bang_2C(1 To n_h, 1 To n_c)
ReDim gtri_h(1 To n_h)
ReDim gtri_c(1 To n_c)
For i = 1 To n_c
gtri_c(i) = ActiveCell.Offset(0, i).Value
Next
For i = 1 To n_h
gtri_h(i) = ActiveCell.Offset(i, 0).Value
Next
For i = 1 To n_h
For j = 1 To n_c
Bang_2C(i, j) = ActiveCell.Offset(i, j).Value
Next
Next
'BAT DAU NOI SUY
'Xac dinh chi so hang tren va duoi so voi gtri_h_tim
If n_h > 1 Then
For i = 1 To (n_h - 1)
If (gtri_h(i) <= gtri_h_tim And gtri_h(i + 1) >= gtri_h_tim) Or (gtri_h(i) >= gtri_h_tim And gtri_h(i + 1) <= gtri_h_tim) Then
cso_h1 = i
cso_h2 = i + 1
Delta_hang = gtri_h(i + 1) - gtri_h(i)
Exit For
End If
Next
ElseIf n_h = 1 Then 'Bang du lieu chi gom mot hang chua du lieu
cso_h1 = 1: cso_h2 = 1
Delta_hang = 1
Else
MsgBox "Du lieu khong hop ly"
GoTo thoat
End If
'Xac dinh chi so cot ben trai va ben phai so voi gtri_c_tim
If n_c > 1 Then
For i = 1 To (n_c - 1)
If (gtri_c(i) <= gtri_c_tim And gtri_c(i + 1) >= gtri_c_tim) Or (gtri_c(i) >= gtri_c_tim And gtri_c(i + 1) <= gtri_c_tim) Then
cso_c1 = i
cso_c2 = i + 1
Delta_cot = gtri_c(i + 1) - gtri_c(i)
Exit For
End If
Next
ElseIf n_c = 1 Then 'Bang du lieu chi gom Cot hang chua du lieu
cso_c1 = 1: cso_c2 = 1: Delta_cot = 1
Else
MsgBox "Du lieu khong hop ly"
GoTo thoat
End If
'Dua gia tri trong bang tra vao cac bien tam
X_h1c1 = Bang_2C(cso_h1, cso_c1)
X_h1c2 = Bang_2C(cso_h1, cso_c2)
X_h2c1 = Bang_2C(cso_h2, cso_c1)
X_h2c2 = Bang_2C(cso_h2, cso_c2)
'Bat dau noi suy dot 1:
X_H1 = X_h1c1 + (X_h1c2 - X_h1c1) * (gtri_c_tim - gtri_c(cso_c1)) / Delta_cot
X_H2 = X_h2c1 + (X_h2c2 - X_h2c1) * (gtri_c_tim - gtri_c(cso_c1)) / Delta_cot
'Noi suy dot 2
X_tim = X_H1 + (X_H2 - X_H1) * (gtri_h_tim - gtri_h(cso_h1)) / Delta_hang

'=========================================================================
ReDim Bang_2C(0): ReDim gtri_h(0): ReDim gtri_c(0)
'Ghi ket qua noi suy:
Tra_Bang = X_tim
thoat:
End Function

PMXD
18-04-2005, 02:34 PM
PMXD có thể sửa lại những lỗi nhỏ này trong hàm "Facot" được không?
Phi=PhiUD(Lo,b,"R")?
Alpha(MBT)?
MuyMin = TimMax(Array(HamLuongCot * 100, MuyMinVa(Lo, b, h, 0)))

Các hàm này tôi đã post trong hàm tính toán Fadam, bạn xem lại nhé

Le Viet Thanh
18-04-2005, 06:06 PM
Xin lỗi anh PMXD vì chưa đọc kỹ các hàm anh viết.
Trong phân tích động lực học công trình, vấn đề xác định các tần số dao động riêng là vấn đề cần thiết. và đây cũng là vấn đề rất nan giải về thuật toán và lập trình. để các bạn đang nghiên cứu về động lực học công trình tham khảo, tôi xin gởi các bạn hàm tính tần số dao động riêng của công trình. hàm này tôi đã mất 1 tháng để viết đó.
'DOAN CHUONG TRINH TINH TOAN CAC GIA TRI RIENG CUA MTRAN
'HOAN THANH NGAY 05/03/2003. Trong ham nay khong xet den phan ao cua cac gia tri rieng
Private Sub Balanc(A() As Double, ByVal n As Integer)
Const RADIX = 2
Dim last As Integer, i As Integer, j As Integer
Dim s As Double, r As Double, g As Double
Dim f As Double, c As Double, sqrdx As Double
DoEvents: If mdl01.tiep_tuc = False Then Exit Sub
frmSTATUS.lblstatus01(1).Caption = mdl01.StrTbao & Chr(10) & "(Transform to Balanc matric)"
frmSTATUS.ProgressBar1.max = n
frmSTATUS.ProgressBar1.Value = 0
frmSTATUS.lblstatus01(1).Refresh
sqrdx = RADIX * RADIX
last = 0
While last = 0
frmSTATUS.ProgressBar1.Value = frmSTATUS.ProgressBar1.Value + 1
last = 1
For i = 1 To n
r = 0
c = 0
For j = 1 To n
If Not (i = j) Then
c = c + Abs(A(j, i))
r = r + Abs(A(i, j))
End If
Next
If (c And r) Then
g = r / RADIX
f = 1
s = c + r
Do While c < g
f = f * RADIX
c = c * sqrdx
Loop
g = r * RADIX
While c > g
f = f / RADIX
c = c / sqrdx
Wend
If ((c + r) / f < 0.95 * s) Then
last = 0
g = 1 / f
For j = 1 To n
A(i, j) = A(i, j) * g
Next
For j = 1 To n
A(j, i) = A(j, i) * f
Next
End If
End If
Next
Wend
frmSTATUS.ProgressBar1.Value = frmSTATUS.ProgressBar1.max
End Sub

Private Sub Hessenberg(A() As Double, ByVal n As Integer)
Dim m As Integer, i As Integer, j As Integer
Dim x As Double, y As Double, tg As Double
frmSTATUS.lblstatus01(1).Caption = mdl01.StrTbao & Chr(10) & "(Transforming to Hessenberg matric form)"
frmSTATUS.ProgressBar1.max = n - 3
frmSTATUS.ProgressBar1.Value = 0
frmSTATUS.lblstatus01(1).Refresh
For m = 2 To n - 1
DoEvents
If mdl01.tiep_tuc = False Then Exit Sub
x = 0
i = m
For j = m To n
If Abs(A(j, m - 1)) > Abs(x) Then
x = A(j, m - 1)
i = j
End If
Next
If Not (i = m) Then
For j = m - 1 To n
tg = A(i, j)
A(i, j) = A(m, j)
A(m, j) = tg
Next
For j = 1 To n
tg = A(j, i)
A(j, i) = A(j, m)
A(j, m) = tg
Next
End If
If Not (x = 0) Then
For i = m + 1 To n
y = A(i, m - 1) / x
For j = m To n
A(i, j) = A(i, j) - y * A(m, j)
Next
For j = 1 To n
A(j, m) = A(j, m) + y * A(j, i)
Next
Next
End If
frmSTATUS.ProgressBar1.Value = m - 2
Next
End Sub

Private Function Sign(ByVal A As Double, ByVal B As Double) As Double
If B > 0 Then
Sign = Abs(A)
Else
Sign = -Abs(A)
End If
End Function

Public Function Eig(A() As Double, ByVal n As Integer) As Double()
Dim nn As Integer, m As Integer, l As Integer
Dim k As Integer, j As Integer, its As Integer
Dim i As Integer, mmin As Integer, status As Integer
Dim z As Double, y As Double, x As Double
Dim w As Double, v As Double, u As Double
Dim t As Double, s As Double, r As Double
Dim p As Double, q As Double, anorm As Double
Dim wr() As Double
'========================================
Balanc A, n
Hessenberg A, n
'========================================
'BAT DAU TINH CAC GIA TRI RIENG:
'========================================
ReDim wr(1 To n) As Double
frmSTATUS.lblstatus01(1).Caption = mdl01.StrTbao & Chr(10) & "(Computing EigValues)"
frmSTATUS.ProgressBar1.max = n
frmSTATUS.ProgressBar1.Value = 0
frmSTATUS.lblstatus01(1).Refresh
anorm = Abs(A(1, 1))
For i = 2 To n
For j = (i - 1) To n
anorm = anorm + Abs(A(i, j))
Next
Next
status = 0
nn = n
t = 0
While nn >= 1
DoEvents
If mdl01.tiep_tuc = False Then Exit Function
its = 0
Do
For l = nn To 2 Step -1
s = Abs(A(l - 1, l - 1)) + Abs(A(l, l))
If s = 0 Then s = anorm
If Abs(A(l, l - 1)) + s = s Then Exit For
Next
x = A(nn, nn)
If l = nn Then
wr(nn) = x + t
nn = nn - 1
status = status + 1
frmSTATUS.ProgressBar1.Value = status
Else
y = A(nn - 1, nn - 1)
w = A(nn, nn - 1) * A(nn - 1, nn)
If l = (nn - 1) Then
p = 0.5 * (y - x)
q = p * p + w
z = Sqr(Abs(q))
x = x + t
If q >= 0 Then
z = p + Sign(z, p)
wr(nn - 1) = x + z
wr(nn) = x + z
If Not (z = 0) Then wr(nn) = x - w / z
Else
wr(nn - 1) = x + p
wr(nn) = x + p
End If
nn = nn - 2
status = status + 2
frmSTATUS.ProgressBar1.Value = status
Else
If (its = 10) Or (its = 20) Then
t = t + x
For i = 1 To nn
A(i, i) = A(i, i) - x
Next
s = Abs(A(nn, nn - 1)) + Abs(A(nn - 1, nn - 2))
y = 0.75 * s
x = 0.75 * s
w = -0.4375 * s * s
End If
its = its + 1
For m = (nn - 2) To l Step -1
z = A(m, m)
r = x - z
s = y - z
p = (r * s - w) / A(m + 1, m) + A(m, m + 1)
q = A(m + 1, m + 1) - z - r - s
r = A(m + 2, m + 1)
s = Abs(p) + Abs(q) + Abs(r)
p = p / s
q = q / s
r = r / s
If m = l Then Exit For
u = Abs(A(m, m - 1)) * (Abs(q) + Abs(r))
v = Abs(p) * (Abs(A(m - 1, m - 1)) + Abs(z) + Abs(A(m + 1, m + 1)))
If u + v = v Then Exit For
Next
For i = m + 2 To nn
A(i, i - 2) = 0
If Not (i = (m + 2)) Then A(i, i - 3) = 0
Next
For k = m To nn - 1
If Not (k = m) Then
p = A(k, k - 1)
q = A(k + 1, k - 1)
r = 0
If Not (k = (nn - 1)) Then r = A(k + 2, k - 1)
x = Abs(p) + Abs(q) + Abs(r)
If Not (x = 0) Then
p = p / x
q = q / x
r = r / x
End If
End If
s = Sign(Sqr(p * p + q * q + r * r), p)
If Not (s = 0) Then
If k = m Then
If Not (l = m) Then
A(k, k - 1) = -A(k, k - 1)
End If
Else
A(k, k - 1) = -s * x
End If
p = p + s
x = p / s
y = q / s
z = r / s
q = q / p
r = r / p
For j = k To nn
p = A(k, j) + q * A(k + 1, j)
If Not (k = (nn - 1)) Then
p = p + r * A(k + 2, j)
A(k + 2, j) = A(k + 2, j) - p * z
End If
A(k + 1, j) = A(k + 1, j) - p * y
A(k, j) = A(k, j) - p * x
Next
If nn < k + 3 Then
mmin = nn
Else
mmin = k + 3
End If
For i = l To mmin
p = x * A(i, k) + y * A(i, k + 1)
If Not (k = (nn - 1)) Then
p = p + z * A(i, k + 2)
A(i, k + 2) = A(i, k + 2) - p * r
End If
A(i, k + 1) = A(i, k + 1) - p * q
A(i, k) = A(i, k) - p
Next
End If
Next
End If
End If
Loop While l < (nn - 1)
Wend
Eig = wr
End Function

luan2005
18-04-2005, 06:48 PM
Tôi rất muốn nghiên cứu về VBA, thực tế cũng đã hiểu cơ bản, nhưng tài liệu về VBA rất ít (tiếng Việt), các đồng nghiệp giúp tôi với, cảm ơn trước. :D

Le Viet Thanh
23-04-2005, 01:33 PM
Để nghiên cứu về VBA (for Excel) bạn nên:
- Mua quyển "Giải pháp VB 4 cho người lập trình chuyên nghiệp" và "VB6 & Lập trình cơ sở dử liệu" để đọc hiểu được ngôn ngữ Visual Basic.
- Mở Excel và dùng bộ thu Macro để thu lại các thao tác của bạn, Excel lập tức chuyển các thao tác trong các ổ của bảng tính thành ngôn ngữ Visual Basic, bạn sẽ học được cách truy xuất các đối tượng của bảng tính (đối tượng Range, Cell,..)
- Dùng công cụ Object Browser để tìm hiểu thêm các đối tượng, phương thức, thuộc tinh.. của Excel.
(Có thể bạn tìm quyển sách "Visual Basic for Excel 5.0", đã cũ rồi)
Chúc bạn sớm làm chủ được công cụ VBA (for Excel)

luan2005
23-04-2005, 04:48 PM
Cảm ơn bạn Le Viet Thanh, sao bạn có PP học VBA giống tôi vậy, kể cả quyển sách Visual Basic for Excel 5.0 cũng vậy, tôi đã mua nó lâu lắm rồi, nhưng chưa thỏa chí bạn à. Thân.

xdbien
23-04-2005, 05:34 PM
các anh có thể cho em cụ thể địa chỉ để mua sách này được không.em đang bí tài liệu quá.cám ơn nhiều.

luan2005
23-04-2005, 05:38 PM
Tôi nghĩ sách đó chỉ còn trong hiệu sác cũ, sách nhỏ thôi khoẳng trăm trang gì đó, bìa trắng, bạn xdbien chịu khó tìm vậy, chúc may mắn.

xdbien
23-04-2005, 05:46 PM
nhân tiện đây hỏi anh luôn về hàm split.em co chuỗi:sắp tới là "ngay" 30-4.em muon tách rieng từ ngày ra và cả số ra nữa thì làm như thế nào?

Le Viet Thanh
26-04-2005, 11:32 AM
Hãy nhập chuổi của bạn vào biến strXem
dấu nháy (") của bạn vào biến str_dau

Public Sub tam()
Dim strXem as string, str_dau as string, i As Long
Dim VarArray As Variant, strkq1 As String, strkq2 As String
VarArray = Split(strXem, " ")
For i = 0 To (UBound(VarArray) - 1)
If Left(CStr(VarArray(i)), 1) = str_dau And Right(CStr(VarArray(i)), 1) = str_dau Then
strkq1 = Mid(CStr(VarArray(i)), 1, 4)
strkq2 = CStr(VarArray(i + 1))
End If
Exit For
Next
End Sub

xdbien
27-04-2005, 05:23 PM
cảm ơn anh thanh nhiều.em về và đã split được rồi.nếu lần sau có gì khó em lại xin hỏi anh tiếp

Miss_VJ
29-04-2005, 06:43 PM
Em thử viết hàm split theo cách này các bác coi đc không nha. Ý định : chia chuỗi bởi các dấu " rồi lấy theo vị trí. Phải nói trước thế vì em hay viết sai lệnh :D.
Public Sub chiaham() ' bắt chước Le-viet-thanh đấy vì em không biết dùng cái này
Dim chuoichia, chuoilay1, chuoilay2 As String
Dim mang() As String
' gắn giá trị cho chuoichia
mang = Split(chuoichia, Chr(34))
chuoilay1 = mang(2)
chuoilay2 = mang(1)
...
End sub

Phương án em đưa ra ở đây chỉ có tính hú hoạ . Chắc chắn là chẳng ai dại dột đi viết từng này câu lệnh để split chỉ mỗi 1 cái dòng string ngắn tũn thế kia. hihi

Mylove
04-05-2005, 12:09 AM
Các bác toằn là siêu sao về VBA trong Excel, các bác cho em hỏi làm cách nào viết được file như file Dutoan.exe của chương trình dutoan2002 với

tuan sa
19-05-2005, 09:11 AM
các bác cho em hỏi làm thế nào để biết được các công thức bị ẩn trong các ô ẼCH XÀO vậy.Chả là khi click vào các ô có chứa các công thức thì chẳng thấy nó hiện ra gì cả.

Mong các bác chỉ dùm.
Thanks a lot!

loisude
20-05-2005, 01:35 PM
Trình tự để ân công thức trong excel như sau:
- Chon các ô cần
-...-> Format cell -> protect -----> có 2 tùy chọn (tùy bạn)
- Protect sheet trong menu chính cùa chương trịnh
Nếu muốn show lại thì dùng unprotect sheet (chú ý nếu có đặt pasword thì phải nhập vố đó)

ducxd
08-06-2005, 11:22 AM
Anh Việt Anh ơi , hàm tra bảng nó có lỗi ấy , có một số giá trị nội suy nó cho bằng 0 đấy.

ducxd
08-06-2005, 11:27 AM
Ah Em muốn hỏi mấy cao thủ em có chương trình DT2002 nhưng chỉnh mãi magbox chẳng chịu hiện tiếng việt(menu thì chỉnh được rồi ), bác nào biết font gì chỉ em với , ah mà anh Việt Anh có cách nào dò mã xem trong lúc lập trình VBA người ta đánh font gì không ( mấy cái form ấy em nghĩ có cách này là được nếu không biết font gì )

Vũ Đức Lượng
08-06-2005, 04:04 PM
Bạn chỉ cần cài font ABC 2.1 cho Win NT( Cài xong thi khởi động lại máy). Vào controlpanel\fonts\files\add.., chỉ đến đường dẫn của bộ chạy chương trình DT là được.
Nhưng bây giờ ct đó có hợp với cách tính mới đâu

PMXD
09-06-2005, 04:48 PM
ah mà anh Việt Anh có cách nào dò mã xem trong lúc lập trình VBA người ta đánh font gì không ( mấy cái form ấy em nghĩ có cách này là được nếu không biết font gì )

Đức thử dùng chức năng Spy của bộ Visual Studio xem.

daoduy
28-06-2005, 04:41 PM
Cam ơn anh Nguyễn Việt Anh nhiều, em đã đọc các bài của anh, cũng học được nhiều, em la một fan lập trình VBA. Lập trình trên Excel và AutoCad thì em cung đã lập. Xin chia xẻ kinh nghiệp của em trong lĩnh vực viết VBA như sau với anh em trong diễn đàn
Tôi tiếp xúc với VBA khi đã biết VB và làm quen Excel, tôi thấy dễ nhất là dùng chức năng Record Macro của Excel, sau đó thực hiện một vài tác vụ, stop chức năng record macro roi mở cửa sổ Visual Basic Editor để xem mã lệnh thực hiện các tác vụ trên như thế nào. Cách học như vậy là dễ nhất.
Tôi cũng đã nghiên cứu VBA đời 2x và cũng đã tìm tòi, tôi đã download được một Tool tích hợp vào AutoCad 2i bản demo để record mã lệnh như trong Excel, nhân tiện trên diễn đàn gửi để anh em dùng thử.
Rất mong được học hỏi trao đổi với anh em trên diễn đàn.

daoduy
28-06-2005, 04:58 PM
Tôi là dân giao thông, đã viết một số hàm tra bảng phục vụ trong công tác thiết kế về cầu đường. Tôi đang nâng cấp lên phiên bản mới. Bạn nào học giao thông về cầu chắc biết về vấn đề tra tải trọng tương đương của các đoàn xe tiêu chuẩn. Bây giờ vấn đề này chỉ cần gọi hàm trong Excel: Ví dụ như =TraH30(L,anfa) là OK, trong đó L là chiều dài xếp tải, anfa là tỷ số cạnh ngắn / chiều dài đường ảnh hưởng như trong quy trình. Bên cạnh đó có một số hàm đổi số thành chữ =thanhtien(socandoi), ví dụ như =thanhtien(5), kết quả trả về là Năm đồng chẵn . Tất cả đã được gói gọn trong một file (.xla). Có bác nào quan tâm không, tôi post bài lên vây.

daoduy
28-06-2005, 05:09 PM
Thằng em đang có ý định gửi mỗi ngày một hàm cho diễn đàn tham khảo và góp ý. Cạnh tranh với bác PMXD vậy

daoduy
28-06-2005, 05:16 PM
Trong khi lướt trên mạng tôi có down được một chú matrix.xla tuyệt hay chứa khoảng 200 ham tuyệt hay về ma trận, sử dụng được trong Excel, ma nguồn mở. Các bác copy về tham khảo nhé. Biết viết VBA anh em thiết kế mình có thể làm được đủ trò bác PMXD nhỉ. Do trình độ còn có hạn mong được sự chỉ giáo của các anh em trên diễn đàn.

daoduy
28-06-2005, 05:17 PM
Ngày hôm nay trong lúc phê phê rượu tôi post nhiều bài quá,không biêt ngày mai còn post được bài gì nữa, mong anh em thông cảm.

vutuyen
28-06-2005, 05:35 PM
Ok.BAi viet cua cac bac hay quạ Toi cung co ham noi suy mot chieu va hai chieu, da tao thanh bo cai dat day dụ Toi se up len de cac bac tham khao sạu

bachma
28-06-2005, 05:40 PM
Gửi GK:
Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này


Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải :confused:
có nhiều người quan tâm đấy chứ, các bác cứ tiếp tục để anh em học hỏi!

vutuyen
28-06-2005, 05:40 PM
Ok, cam on DAO DUY nhiẹu Em co phai DUY BEO TB Khong?

daoduy
28-06-2005, 05:54 PM
Nếu anh em trên diến đàn thắc mắc về chuyện vị cái anh ban BKAV phi tiêu mất các hàm viết bằng VB trong Excel thi chịu rồi.
Bản chất của chương trình VBA cũng là một Virus nhưng nó lại có lợi, các bác thấy lợi thì dùng
Nhân tiện đây hỏi anh Việt Anh (PMXD) xem bác đã nghiên cứu đến công nghệ COM-Add Ins chưa, với công nghệ này thì không viết hàm nữa nhưng sẽ viết được hẳn ứng dụng tích hợp trong Excel ma khong sợ chu BKAV diệt. Chúng ta chỉ cần lập trình trên VB thôi, sau đó tạo bộ cài đặt tích hợp hẳn vào Excel, Word..., tất cả bộ Office của Microsoft.
Bác nào có ý tươgt lập ứng dụng cụ thể mà chạy trên Excel thì tôi xin sẵn sàng trao đổi. Tôi đã thử lập và thấy chạy hay lắm

daoduy
28-06-2005, 05:56 PM
Anh Vutuyen la anh nao day, sao doc vi duoc em the. Em la dan Thai Binh xin roi

vutuyen
28-06-2005, 06:02 PM
gui Dao Duy
Duy beo oi em dang o dau day.Anh cung la dan TB 1/2 day.

vutuyen
28-06-2005, 06:02 PM
Anh CUNG CO HAM DOC SO NHU CUA EM DAY.Dung cung hay

daoduy
29-06-2005, 10:08 AM
Hôm nay tôi sẽ gửi một thư viện tôi viết cũng đã lâu lên diễn đàn để anh em tham khảo và góp ý. Trong file Rtc 3.0.xla đã tích hợp một số hàm, tôi đang tìm cái hwowngs dẫn nhưng chưa thấy đâu, khi nào tìm được tôi gửi sau vây.
password vào xem mã là thangdauhoi.
Tôi sẽ gửi cả file nguồn rtc 3.0.xls và.file dịch.xla
Mong nhận được sự quan tâm của anh em trên diễn đàn!

vutuyen
29-06-2005, 12:26 PM
Duy ơi, em bỏ protect đi nhé, post len diễn đàn rồi thì pr làm gì cho mệt, anh lại phải mất công unpro di, mệt lặm!!!!!!

daoduy
29-06-2005, 12:36 PM
Em da dua pass roi, em cung luoi unpro lam

vutuyen
29-06-2005, 12:39 PM
ok, the bay gio em dang lam o dau vậy?

daoduy
29-06-2005, 12:42 PM
toi da dua pass roi, toi cung luoi unpro lam, cai bac vutuyen nay la bac nao ay nhi? Co the lo ten tuoi mot chut duoc ko?

vutuyen
29-06-2005, 12:44 PM
thi ten la vu tuyen luon chu con la gi nụa Anh hoi la em dang lam o dau thoi.

daoduy
29-06-2005, 12:45 PM
Noi that la chua the nhan ra vutuyen?

daoduy
29-06-2005, 12:47 PM
Vu tuyen la ai nhi, da quen va gap o dau nhi?

daoduy
29-06-2005, 12:50 PM
Sao may hom nay ko thay cai bac PMXD tren dien dan nhi? Moi ngay mot ham dau roi? Anh em trao doi thao luan di chu

vutuyen
29-06-2005, 12:51 PM
Dia chi nay co nhieu bang tinh lam. Anh em vao ma down ve nhe
http://www.tumcivil.com/TumCivil@Form/Spreadsheets.php

vutuyen
29-06-2005, 12:52 PM
Duy beo oi, em k biet anh dau, nhung anh lai biet em , the moi la chu

vutuyen
29-06-2005, 12:55 PM
OK qua de. co gi mail cho minh nhe.
Co the dung Combo hoac dưng tinh nang Validation cua EX, hay day.

vutuyen
29-06-2005, 01:04 PM
Dia chi nay co nhieu bang tinh lam. Anh em vao ma down ve nhe
http://www.tumcivil.com/TumCivil@Form/Spreadsheets.php

loisude
29-06-2005, 01:30 PM
Con file rtc.excel đâu rồi bạn ơi???????

daoduy
30-06-2005, 08:52 AM
Làm gì còn file rtc.excel, chỉ co mỗi chú (.xla ) thôi.
Vào tool\add_ins\browse đến file (.xla) thế là các hàm hoạt động được thôi
bây giờ vào bất cứ ô nào trong excel gọi tên hàm bình thường như các hàm của excel
ví dụ: =TraH30(20,0.5), kết quả trả về là 2.45. Hàm sẽ tra tải trọng tương đương của đoàn xe tiêu chuẩn H30 trên đường ảnh hưởng tam giác có chiều dài L=20m, tỷ số cạnh ngắn/chiều dài đường ảnh = 0.5. Các giá trị này được nội suy tuyến tính theo bảng trong quy trình 1979. Ai la dân giao thông làm về cầu thì vấn đề này ko có vấn đề gì?

daoduy
30-06-2005, 09:01 AM
Diễn đàn dạo này vắng vẻ quá. Các chú SV nghỉ hè hết rồi hay sao? PMXD đi công tác rồi hay sao?

HOANG ANH_xn.tvtkct
01-07-2005, 07:31 PM
ham tra bang hai chieu cua bac Viet Anh bi loi
anh Viet Anh co the xem lai khong
cam on anh nhieu

luan2005
06-07-2005, 09:32 AM
Đã làm trên Excel mà hệ số A,B,D cũng phải tra bảng nữa à? rảnh quá nhỉ!
Ai thích thi tớ mail cho công thức tính đàng hoàng, khỏi phải nội ngoại suy gì cả.

PMXD
06-07-2005, 09:36 AM
Đã làm trên Excel mà hệ số A,B,D cũng phải tra bảng nữa à? rảnh quá nhỉ!
Ai thích thi tớ mail cho công thức tính đàng hoàng, khỏi phải nội ngoại suy gì cả.

Hàm nội suy để tính toán cho bất cứ bảng nào, đâu phải chỉ để tra hệ số A,B,D.

daoduy
06-07-2005, 09:47 AM
Việt Anh nói đúng đấy, mỗi ngưòi ỏ mỗi lĩnh vực khác nhau cần bảng tra theo kiểu khác nhau, có cái A, B, C khác nhau không giống nhau dau luan2005 ah. Cá nhân tôi xin ủng hộ phát triển hàm theo xu hướng này.
Việt Anh lâu nay không thấy tung ra chiêu nào để anh em thưởng, thức học tập nhỉ.

vutuyen
06-07-2005, 10:06 AM
Đã làm trên Excel mà hệ số A,B,D cũng phải tra bảng nữa à? rảnh quá nhỉ!
Ai thích thi tớ mail cho công thức tính đàng hoàng, khỏi phải nội ngoại suy gì cả.

--
VIET ANH NÓI ĐÚNG ĐẤY LUAN 2005 A, NOI SUY MOT CHIEU, HAI CHIEU TRA BANG DUOC LA TOT NHAT, CON TINH A B C Ử CÚ THỦ RỒI BIẾT.

minhbu
06-07-2005, 11:25 AM
Các hàm này các bác làm thành dạng add in luôn thì hay quá.
Em chẳng hiểu gì về VB cả.

daoduy
06-07-2005, 11:33 AM
Tôi đã gửi file ỏ dạng Addins rồi đấ chú, bác xem lại mấy bài trước coi

minhbu
06-07-2005, 11:47 AM
Cảm ơn nhiều nhé

minhbu
06-07-2005, 03:25 PM
[QUOTE]Cái add in của bác Niceshot dùng như thế nào vậy? em add vào rồi mà khốnguwr dụng được. Bác chỉ giúp em với !!!!!!

Kidsmart1981
08-07-2005, 08:08 AM
Các anh cho hỏi, làm cách nào (lập trình) để xuất các bảng tính từ Excel sang môi trường AutoCad, tại đó các bảng tính này thực sự là những entities của Cad để có thể chỉnh sửa vô tư. Với việc copy n' paste thì chỉ dừng lại ở giới hạn của chuẩn OLE.
Cám ơn các bác, các chú, các anh...

Mai Cuong
08-07-2005, 01:03 PM
Các anh cho hỏi, làm cách nào (lập trình) để xuất các bảng tính từ Excel sang môi trường AutoCad, tại đó các bảng tính này thực sự là những entities của Cad để có thể chỉnh sửa vô tư. Với việc copy n' paste thì chỉ dừng lại ở giới hạn của chuẩn OLE.
Cám ơn các bác, các chú, các anh...
Việc gì phải lập trình cho nó khổ thân hả bạn.!!!
Copy bên Excel xong, vào Cad chọn Edit/Paste special/Autocad Entilies/OK là được thôi mà.

Vũ Đức Lượng
08-07-2005, 02:36 PM
Xin hỏi các cao thủ một chút:
Đoạn chương trình sau có phải là tạo ra 1 khóa cứng không, nếu phải thì làm ơn chỉ cho cách cách bẻ nó.
Function Decrypt_chuongtrinh(key As Long, salt As Boolean, s As String) As String

Decrypt_chuongtrinh = StrDecode(s, key, salt)

End Function

Function Encrypt_chuongtrinh(key As Long, salt As Boolean, s As String) As String

Encrypt_chuongtrinh = StrEncode(s, key, salt)

End Function

Function StrEncode(ByVal s As String, key As Long, salt As Boolean) As String


Dim n As Long, i As Long, ss As String
Dim k1 As Long, k2 As Long, k3 As Long, k4 As Long, t As Long
Static saltvalue As String * 4

If salt Then
For i = 1 To 4
t = 100 * (1 + Asc(Mid(saltvalue, i, 1))) * Rnd() * (Timer + 1)
Mid(saltvalue, i, 1) = Chr(t Mod 256)
Next
s = Mid(saltvalue, 1, 2) & s & Mid(saltvalue, 3, 2)
End If

n = Len(s)
ss = Space(n)
ReDim sn(n) As Long

k1 = 11 + (key Mod 233): k2 = 7 + (key Mod 239)
k3 = 5 + (key Mod 241): k4 = 3 + (key Mod 251)

For i = 1 To n: sn(i) = Asc(Mid(s, i, 1)): Next i

For i = 2 To n: sn(i) = sn(i) Xor sn(i - 1) Xor ((k1 * sn(i - 1)) Mod 256): Next
For i = n - 1 To 1 Step -1: sn(i) = sn(i) Xor sn(i + 1) Xor (k2 * sn(i + 1)) Mod 256: Next
For i = 3 To n: sn(i) = sn(i) Xor sn(i - 2) Xor (k3 * sn(i - 1)) Mod 256: Next
For i = n - 2 To 1 Step -1: sn(i) = sn(i) Xor sn(i + 2) Xor (k4 * sn(i + 1)) Mod 256: Next

For i = 1 To n: Mid(ss, i, 1) = Chr(sn(i)): Next i

StrEncode = ss
saltvalue = Mid(ss, Len(ss) / 2, 4)

End Function


Function StrDecode(ByVal s As String, key As Long, salt As Boolean) As String


Dim n As Long, i As Long, ss As String
Dim k1 As Long, k2 As Long, k3 As Long, k4 As Long

n = Len(s)
ss = Space(n)
ReDim sn(n) As Long

k1 = 11 + (key Mod 233): k2 = 7 + (key Mod 239)
k3 = 5 + (key Mod 241): k4 = 3 + (key Mod 251)

For i = 1 To n: sn(i) = Asc(Mid(s, i, 1)): Next

For i = 1 To n - 2: sn(i) = sn(i) Xor sn(i + 2) Xor (k4 * sn(i + 1)) Mod 256: Next
For i = n To 3 Step -1: sn(i) = sn(i) Xor sn(i - 2) Xor (k3 * sn(i - 1)) Mod 256: Next
For i = 1 To n - 1: sn(i) = sn(i) Xor sn(i + 1) Xor (k2 * sn(i + 1)) Mod 256: Next
For i = n To 2 Step -1: sn(i) = sn(i) Xor sn(i - 1) Xor (k1 * sn(i - 1)) Mod 256: Next

For i = 1 To n: Mid(ss, i, 1) = Chr(sn(i)): Next i

If salt Then StrDecode = Mid(ss, 3, Len(ss) - 4) Else StrDecode = ss

End Function

Kidsmart1981
08-07-2005, 07:18 PM
Việc gì phải lập trình cho nó khổ thân hả bạn.!!!
Copy bên Excel xong, vào Cad chọn Edit/Paste special/Autocad Entilies/OK là được thôi mà.


Cám ơn bạn! Đúng là thế thật, từ trước đến giờ toàn dùng chuột phải trong copy n' paste nên ko để ý. Mà sao họ ko đưa paste special vào menu của chuột phải nhỉ?

PMXD
08-07-2005, 08:13 PM
'================================================
Function Decrypt_chuongtrinh(key As Long, salt As Boolean, s As String) As String

Decrypt_chuongtrinh = StrDecode(s, key, salt)

End Function
'================================================
Đây là hàm giải mã một chuỗi ký tự, hàm này sẽ gọi hàm StrDecode

'================================================
Function StrDecode(ByVal s As String, key As Long, salt As Boolean) As String
.....................
.....................

End Function
'================================================
Đây là hàm khôi phục chuỗi từ chuỗi gốc s đã mã hóa

'================================================
Function Encrypt_chuongtrinh(key As Long, salt As Boolean, s As String) As String

Encrypt_chuongtrinh = StrEncode(s, key, salt)

End Function
'================================================
Đây là hàm mã hóa một chuỗi ký tự, hàm này sẽ gọi hàm StrEncode

'================================================
Function StrEncode(ByVal s As String, key As Long, salt As Boolean) As String
.................
.................

End Function
'================================================
Đây là hàm mã hóa chuỗi ban đầu s

Các hàm này, theo tôi thì thường dùng để xây dựng tính năng bảo mật của một ứng dụng. Hiện nay cũng có khá nhiều ứng dụng bảo mật theo kiểu này. Chương trình sẽ cho phép người dùng nhập vào một chuỗi ký tự(thường gọi là mã sử dụng chương trình), chương trình sẽ mã hóa ký tự này và so sánh với mã chuẩn. Nếu hai mã khớp nhau thì chương trình chạy tiếp, nếu sai thì ngừng. Mã chuẩn sẽ được lưu giữ vào trong Registry của Windows hoặc đâu đó trên máy.
Trên đây là nhận định của tôi(Vì tôi thường hay bảo mật theo cách này).Bạn nào có cao kiến gì khác không, tôi xin lĩnh giáo
[/QUOTE]

Kidsmart1981
09-07-2005, 08:43 AM
Các thuật toán mã hòa thường rất phức tạp. Thường chia làm 2 loại chính: mã hóa bí mật và mã hóa công khai(dùng từ ko chuẩn lắm!). Các thuật toán mã hóa thường hay có hàm random(), nhưng trong ngông ngữ lập trình hay ngôn ngữ máy "không có cái gì thực sự là ngẫu nhiên, chúng ta chỉ cố tạo ra những thứ trông giống như ngẫu nhiên mà thôi"(cùng 1 hàm random() sẽ trả về những giá trị như nhau nếu đầu vào của chúng - các seed như nhau ==> điều này minh họa cho ý ko thể có đuọc yếu tố thực sự ngẫu nhiên trong ngông ngữ máy ). Do đó về nguyên tắc, mọi mã hóa đều có thể giải được. Cản trở duy nhất đó là...thời gian giải mã:D. Nên thay vì cố gắng giải mã hãy đi vô hiệu hóa đoạn mã kích họat mã đó(cái mà các *****er hay làm).
Theo như đoạn code mà bạn đưa lên, thì mọi thứ đều rất tường minh....chỉ có điều có ai đó ngồi phân tích cặn kẽ xem thuật toan sử dụng ở đây cụ thể là như thế nào thôi!
Khi ban chỉ có thông tin đại loại như:
Function StrEncode(ByVal s As String, key As Long, salt As Boolean) As String

Function StrDecode(ByVal s As String, key As Long, salt As Boolean) As String

Và không biết các hàm đó đuọc định nghĩa tường minh như thế nào....Khi đó mới xuất hiện như cầu *****.

Trên đây chỉ là ý kiến chủ quan của tôi.

truongxd
17-07-2005, 01:09 PM
Trước hết cảm ơn các bác vì đề tài thú vị này. Em mới học nên cũng bập bõm được 1 vài hàm đơn giản về tra bảng. Nhờ các bác chỉ cho em làm sao khóa được 1 vùng dữ liệu trong Excel tức là không cho phép người khác sửa chữa trong đó tránh người dùng không biết làm hỏng hết bảng tra. Xin cảm ơn trước!

daoduy
18-07-2005, 01:43 PM
Trước hết cảm ơn các bác vì đề tài thú vị này. Em mới học nên cũng bập bõm được 1 vài hàm đơn giản về tra bảng. Nhờ các bác chỉ cho em làm sao khóa được 1 vùng dữ liệu trong Excel tức là không cho phép người khác sửa chữa trong đó tránh người dùng không biết làm hỏng hết bảng tra. Xin cảm ơn trước!
Có 2 vấn đề:
Thứnhất nếu hàm tra bảng đã được tích hợp trong một file Add-Ins (*.xla) thì bạn chỉ cần bảo mật đoạn code VBA bằng cách: Trong cửa sổ lập trình VBA vào Tools\VBA project Propeties\Protection, đánh dấu vào Lock project for viewing rồi đặt password cho nó, Save dự án lại la xong.
Thứ hai, nếu hàm tra bảng có vùng nội suy là động ( ví dụ như hàm nội suy 2 chiều ở trên diễn đàn ) thì phải bảo vệ vùng nội suy bằng cách chọn vùng cần bảo vệ, vào Format\cells\Protection, đánh dấu vào locked nếu muốn bảo vệ ô, đánh dấu vào hidden nếu muốn nó không hiện trên thanh Formula bar. Sau đó vào Tool\Protection đặt Pass là OK

DTH_HN
29-07-2005, 12:41 AM
Vào được trang này hay quá. Tôi thấy lập trình trong Excel cũng hay hay, tiện cho nhiều công việc nên cũng lọ mọ được mấy tháng nay. Cũng có 1 hàm nội suy (tôi chỉ là dân KTS đánh quả nên chế nó để tra giá trị thiết kê..)
..ah mà cái hàm của cậu gì tên THANH tôi load về nhưng sao không chạy được vậy, không biết tại sao
-------------------------------------------------------------
Public Function noisuy(Yt, Xt, VungChon As Range) As Double
Dim Ya As Double, Yb As Double, Xa As Double, Xb As Double
Dim Thamso1 As Double, Thamso2 As Double
Dim Sohang As Byte, Socot As Byte
Dim ia As Byte, ib As Byte, ja As Byte, jb As Byte
Dim Mxa_ya As Double, Mxa_yb As Double, Mxb_ya As Double, Mxb_yb As Double
Dim Txy As Double, T1 As Double, T2 As Double
' Xa, Xb : can duoi, can tren cua phuong ngang
' Ya, Yb : can duoi, can tren cua phuong doc
' Mxa_ya, Mxa_yb, Mxb_ya, Mxb_yb : la gia tri tra bang tuong ung voi (Xa, Ya),(Xa,Yb), (Xb, Ya), (Xb,Yb)

Sohang = VungChon.Rows.Count
Socot = VungChon.Columns.Count
'Noi suy theo phuong ngang
For i = 2 To Socot
Thamso1 = (Xt - VungChon(1, i)) * (Xt - VungChon(1, i + 1))
If Thamso1 < 0 Then
Xa = VungChon(1, i)
Xb = VungChon(1, i + 1)
ia = i
ib = i + 1
GoTo Noisuy_doc
ElseIf Thamso1 = 0 Then
If Xt = VungChon(1, i) Then
Xa = Xt
Xb = Xa
ia = i
ib = ia
GoTo Noisuy_doc
ElseIf Xt = VungChon(1, i + 1) Then
Xa = Xt
Xb = Xa
ia = i + 1
ib = ia
GoTo Noisuy_doc
End If
ElseIf Thamso1 > 0 Then
If Xt < VungChon(1, i) Then
Xa = VungChon(1, i)
Xb = Xa
ia = i
ib = ia
GoTo Noisuy_doc
ElseIf Xt > VungChon(1, Socot) Then
Xa = VungChon(1, Socot)
Xb = Xa
ia = Socot
ib = ia
GoTo Noisuy_doc
End If
End If
Next i

Noisuy_doc: 'Noi suy theo phuong doc
For j = 2 To Sohang
Thamso2 = (Yt - VungChon(j, 1)) * (Yt - VungChon(j + 1, 1))
If Thamso2 < 0 Then
Ya = VungChon(j, 1)
Yb = VungChon(j + 1, 1)
ja = j
jb = j + 1
GoTo Tinh_noisuy
ElseIf Thamso2 = 0 Then
If Yt = VungChon(j, 1) Then
Ya = Yt
Yb = Ya
ja = j
jb = ja
GoTo Tinh_noisuy
ElseIf Yt = VungChon(j + 1, 1) Then
Ya = Yt
Yb = Ya
ja = j + 1
jb = ja
GoTo Tinh_noisuy
End If
ElseIf Thamso2 > 0 Then
If Yt < VungChon(j, 1) Then
Ya = VungChon(j, 1)
Yb = Ya
ja = j
jb = ja
GoTo Tinh_noisuy
ElseIf Yt > VungChon(Sohang, 1) Then
Ya = VungChon(Sohang, 1)
Yb = Ya
ja = Sohang
jb = ja
GoTo Tinh_noisuy
End If
End If
Next j
Tinh_noisuy:
Mxa_ya = VungChon(ja, ia)
Mxa_yb = VungChon(jb, ia)
Mxb_ya = VungChon(ja, ib)
Mxb_yb = VungChon(jb, ib)
If Xa = Xb Then
T1 = Mxa_ya
T2 = Mxa_yb
If Ya = Yb Then
Txy = T1
Else
Txy = noisuy2(T1, T2, Ya, Yb, Yt)
End If
Else
T1 = noisuy2(Mxa_ya, Mxb_ya, Xa, Xb, Xt)
T2 = noisuy2(Mxa_yb, Mxb_yb, Xa, Xb, Xt)
If Ya = Yb Then
Txy = T1
Else
Txy = noisuy2(T1, T2, Ya, Yb, Yt)
End If
End If
noisuy = Txy
End Function
'-------Ham tinh noi suy.Cong thuc tinh: Nt = Na-(Na-Nb)*(Gt-Gb)/(Ga-Gb)
Function noisuy2(Na, Nb, Ga, Gb, Gt)
If Na = Nb Then
noisuy2 = Nb
Else
noisuy2 = Nb - (Nb - Na) * (Gt - Gb) / (Ga - Gb)
End If
End Function

daoduy
29-07-2005, 09:19 AM
Hàm nội suy của anh DTH HN cũng hay đấy, tôi đã viết hàm nội suy hai chiều này rồi. Theo tôi nên khai báo để giá trị của hàm là Variant. Như vây trong trường hợp nội suy mà tham số dùng để nội suy không nằm trong vùng nội suy thì giá trị trả về có thể là một Text thông báo, như vậy theo tôi người dùng dễ xử lý hơn. Tiện đây tôi gửi hàm nội suy 2 chiều do tôi viết, mong các bạn góp ý:

Public Function Trabang2chieu(ByVal Vungnoisuy As Range, ByVal Thamso1 As Double, ByVal Thamso2 As Double) As Variant
Dim ChisodongMin, ChisodongMax, ChisocotMin, ChisocotMax, Sodong, Socot As Integer
Dim Giatri11, Giatri12, Giatri21, Giatri22 As Double
Dim Giatrinoisuy1, Giatrinoisuy2 As Double

Sodong = Vungnoisuy.Rows.Count
Socot = Vungnoisuy.Columns.Count

'Lấy chỉ số dòng Min và Max

If Vungnoisuy.Cells(2, 1) > Thamso1 Or Vungnoisuy.Cells(Sodong, 1) < Thamso1 Then
Trabang2chieu = "Ha ha, tham số nội suy thứ nhất nằm ngoài vùng nội suy!"
Exit Function
Else
For i = 2 To Sodong
If Vungnoisuy.Cells(i, 1) = Thamso1 Then
ChisodongMin = i
ChisodongMax = i
Exit For
Else
If Vungnoisuy.Cells(i, 1) > Thamso1 Then
ChisodongMin = i - 1
ChisodongMax = i
Exit For
End If
End If
Next
End If

'Lấy chỉ số cột Min và Max

If Vungnoisuy.Cells(1, 2) > Thamso2 Or Vungnoisuy.Cells(1, Socot) < Thamso2 Then
Trabang2chieu = "Ha ha, tham số nội suy thứ hai nằm ngoài vùng nội suy!"
Exit Function
Else
For i = 2 To Socot
If Vungnoisuy.Cells(1, i) = Thamso2 Then
ChisocotMin = i
ChisocotMax = i
Exit For
Else
If Vungnoisuy.Cells(1, i) > Thamso2 Then
ChisocotMin = i - 1
ChisocotMax = i
Exit For
End If
End If
Next
End If

Giatri11 = Vungnoisuy.Cells(ChisodongMin, ChisocotMin)
Giatri12 = Vungnoisuy.Cells(ChisodongMin, ChisocotMax)
Giatri21 = Vungnoisuy.Cells(ChisodongMax, ChisocotMin)
Giatri22 = Vungnoisuy.Cells(ChisodongMax, ChisocotMax)

'Nội suy theo hàng

If ChisodongMin = ChisodongMax Then
Giatrinoisuy1 = Giatri11
Giatrinoisuy2 = Giatri12
Else
Giatrinoisuy1 = Giatri11 + (Giatri21 - Giatri11) / (Vungnoisuy.Cells(ChisodongMax, 1) - Vungnoisuy.Cells(ChisodongMin, 1)) * (Thamso1 - Vungnoisuy.Cells(ChisodongMin, 1))
Giatrinoisuy2 = Giatri12 + (Giatri22 - Giatri12) / (Vungnoisuy.Cells(ChisodongMax, 1) - Vungnoisuy.Cells(ChisodongMin, 1)) * (Thamso1 - Vungnoisuy.Cells(ChisodongMin, 1))
End If

'Trabang2chieu = Giatrinoisuy2

'Nội suy theo cột

If ChisocotMin = ChisocotMax Then
Trabang2chieu = Giatrinoisuy1
Else
Trabang2chieu = Giatrinoisuy1 + (Giatrinoisuy2 - Giatrinoisuy1) / (Vungnoisuy.Cells(1, ChisocotMax) - Vungnoisuy.Cells(1, ChisocotMin)) * (Thamso2 - Vungnoisuy.Cells(1, ChisocotMin))
End If
End Function

shinichi
01-08-2005, 04:27 PM
hềy, các vị này viết sao mà dài thế nhỉ, nhìn đã chả muốn đọc rồi. Hàm của tôi chỉ bằng 1/2 các vị hehehe:D

DTH_HN
01-08-2005, 04:33 PM
Mình có bộ sách hướng dẫn VBA Excel, thấy khá hay, có rất nhiều hàm ví dụ theo sách.Post lên dây mọi người thử xem
Có thể load theo đường dẫn
http://www.v-art.com.vn/vba.zip

shinichi
02-08-2005, 05:38 PM
sao không down được bác nhẩy :D

DTH_HN
02-08-2005, 10:24 PM
Tôi đã kiểm tra lại rồi link vẫn OK. Tôi up lên cái host thuê của Nhân hòa.Ban Có cách nào khác up lên ổn hơn, tôi sẽ up lại

DTH_HN
02-08-2005, 10:26 PM
Tôi đã kiểm tra lại rồi link vẫn OK.Bạn thử dùng các chương trình như flashget xem. Tôi up lên cái host thuê của Nhân hòa.Ban Có cách nào khác up lên ổn hơn, tôi sẽ up lại.

DTH_HN
02-08-2005, 10:30 PM
À mà cái bác shinichi nầy, có cái hàm nội suy nào ngắn thì post lên cho a e xài cái.Tooi dùng mấy cái trên diễn đàn nhưng chạy vẫn ko ổn (hình như còn phụ thuộc cả vào ver của excel nữa thì phải), vì cái hàm của tôi viết trên 2003 ,chay trên 2003 kô dược.
Mà ngắn hay dài là do thuật toán chứ đâu phải nhiều chữ.

shinichi
03-08-2005, 02:18 PM
Đồng ý thôi , đây là đoạn code của tôi mong được các bác hóp ý.Thanhks

-------------------------
Function NoiSuy1(ByVal x1, x2, a1, a2, x3)
NoiSuy1 = a1 + ((a2 - a1) * (x3 - x1)) / (x2 - x1)
End Function
-------
Function kp(ByVal x, y, bangtra As Range)

For i = 2 To UBound(bangtra.Value, 2)
For j = 2 To UBound(bangtra.Value, 1)

If (y = bangtra(1, i)) And (x = bangtra(j, 1)) Then
kp = bangtra(j, i)
End If

If (y = bangtra(1, i)) And (bangtra(j, 1) < x) And (x < bangtra(j + 1, 1)) Then
kp = NoiSuy1(bangtra(j, 1), bangtra(j + 1, 1), bangtra(j, i), bangtra(j + 1, i), x)
End If

If (x = bangtra(j, 1)) And (bangtra(1, i) < y) And (y < bangtra(1, i + 1)) Then
kp = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j, i), bangtra(j, i + 1), y)
End If

If (bangtra(j, 1) < x) And (x < bangtra(j + 1, 1)) And (bangtra(1, i) < y) And (y < bangtra(1, i + 1)) Then
a = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j, i), bangtra(j, i + 1), y)
b = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j + 1, i), bangtra(j + 1, i + 1), y)
kp = NoiSuy1(bangtra(j, 1), bangtra(j + 1, 1), a, b, x)
End If

Next
Next

End Function
----------------

DTH_HN
03-08-2005, 11:23 PM
hàm tính của bạn shinichi quá tuyệt , tôi phải công nhận là hàm của bạn là gọn nhất.
Tuy nhiên tùy mục đích sử dụng và người viết. ở đây bạn chỉ xét xho2 diều kiện theo mỗi phương của bảng nên tổ hợp lại bạn có 4 trường hợp cần xét.
Mọi người ở thường viết thêm cả 2 trường hợp miền nôij suy nằm ngoài bảng chọn về 2 phía , nên mỗi phương của bảng có 4 điều kiện , tổng các trường hợp cần xét là 16....the là dài ngoằng. Nói chung đều dựa vào bài toán "hàng điểm điều hòa" (vecter)hồi học cấp 2(xét quan hệ của 3 điểm thẳng hàng.
Dù sao với mục đích tra bảng thông thường thì tôi nghĩ là hàm nội suy cua ban quá tốt, các trường hợp kia cũng không nhất thiết đưa thêm vào bài toan
Tôi sẽ rút kinh nghiệm cho hàm nội suy của mình....
Xin 1 góp ý nhỏ: đối với bài toán nhỏ xíu này thi ko thành vấn đề, nhưng với bài toán lớn thi khác. Hàm của ban dung 2 hàm for ***g vào nhau như thế , theo tôi số lần tính toán khi máy chạy sẽ nhiều hơn rất nhièu so với cac thuật toan khác (tôi nhẩm tỷ lệ khoảng 8/50)

shinichi
04-08-2005, 07:20 PM
Cám ơn nhận xét của bác,hàm này tôi viết cũng lâu rồi , hàm tôi viết nếu xét về mặt thuật toán thì vẫn chưa tối ưu vì khi đã " bắt" được vị trí để nội suy thì biến vẫn chạy tiếp. --> không cần thiết.:(
Tuy nhiên về mặt kết quả thì vẫn ok :D

Tu ACC
05-08-2005, 11:44 AM
Các bác đã dùng hàm ceiling bao gio chua.Toi cung chua thao lắm, có bác nào biết chỉ dùm! :confused:

shinichi
05-08-2005, 02:37 PM
Chào bạn,hàm ceiling theo tôi hiểu thì thế này:
a=ceiling(x,y)

Trong đó thì là giá trị gần a nhất và a chia hết cho y

ví dụ ceiling(3.4,2)=4 vì giá gần 3.4 nhất mà chia hết cho 2 chính là 4

Bạn chú ý là
*khái niệm chia hết được mở rộng cho cả số thập phân a chia hết cho b khi a/b thuộc Z
*Khi y=1 thì nó sẽ lấy giá trị lớn hơn

Hy vọng có thể giúp được bạn phần nào :)

DTH_HN
05-08-2005, 05:41 PM
...shinichi trong XINH nhây...thật hay là ngụy trang đấy...

Tu ACC
09-08-2005, 12:24 PM
Cảm on bác shinichi đã giúp đo!

nhapy
10-08-2005, 11:11 AM
Tôi có download mấy file Excel từ mấy trang free mà trên này đã giới thiệu nhưng đều bị protect cả nên không làm sao tác động vào được. Các bạn trên này có ai có phần mềm hoặc giải pháp gì unprotect được không giúp tôi với. Cảm ơn rất nhiều.

ducxd
11-08-2005, 08:56 AM
Anh vào thư viện phần mềm có phần mềm bẻ khoá đấy ( ấy chà quên tên mất tiêu rồi mọi lần em bẻ khoá được tất )

nhapy
11-08-2005, 09:40 AM
Anh vào thư viện phần mềm có phần mềm bẻ khoá đấy ( ấy chà quên tên mất tiêu rồi mọi lần em bẻ khoá được tất )
Chào Đức!
Anh đã tìm khắp cả thư viện mà có thấy đâu. Nếu em có thì gửi cho anh xin luôn đi. Cảm ơn nhiều.
mail của anh là: nhapy2001@yahoo.com

ducxd
11-08-2005, 09:54 AM
hi hi để em về lục lại nhé. Có gì mai mốt có em thông báo cho. Không thôi anh ra tiệm đĩa hỏi không chừng có đấy ! A có gấp không hay đưa file lên em đem về bẻ khoá rồi up lên cho

nhapy
11-08-2005, 12:19 PM
hi hi để em về lục lại nhé. Có gì mai mốt có em thông báo cho. Không thôi anh ra tiệm đĩa hỏi không chừng có đấy ! A có gấp không hay đưa file lên em đem về bẻ khoá rồi up lên cho
Ra hàng đĩa thì anh lại không biết tên phần mềm. Gửi cho em thì cũng không gấp lắm nên cũng ko cần. Có lẽ em cố tìm giúp và sent lại cho anh được là tốt nhất. Cảm ơn nhiều!

shinichi
11-08-2005, 07:40 PM
bác ducxd bẻ khóa bằng cài gì vậy , chỉ giúp em với

Van Hoa
11-08-2005, 11:03 PM
Mình có một địa chỉ này trong đó có chứa rất nhiều phần mềm đã được ***** trong đó có chứa một phần mềm bẻ khóa mà bạn cần, rất hấp dẫn, đó là một trang của Nga Password_Recovery_Studio_Tools_2005_Retail
Hãy dùng thử hen
www.philka.ru

nhapy
12-08-2005, 04:11 PM
Mình có một địa chỉ này trong đó có chứa rất nhiều phần mềm đã được ***** trong đó có chứa một phần mềm bẻ khóa mà bạn cần, rất hấp dẫn, đó là một trang của Nga Password_Recovery_Studio_Tools_2005_Retail
Hãy dùng thử hen
www.philka.ru
Phần mềm đó toàn là demo thôi bạn ạ. Không thể chạy được

DTH_HN
12-08-2005, 10:46 PM
Tôi có phần mềm bẻ khóa trong excel load trên diễn đàn này về (không nhớ ở đâu nưa) thấy chạy tốt, gửi thử bằng mail rồi nhưng toàn báo không gửi được, đành up lên theo cái linh này
http://v-art.com.vn/vbapass.zip

nvd_dg
18-08-2005, 07:42 PM
Chào các anh trong diễn đàn !
Em có vấn đề nho nhỏ này muốn được các anh giúp đỡ: Trong Excel, khi muốn viết một hàm nào đó bằng VB, để hàm đó chạy được trong tất cả các Word Book thì ta phải làm thế nào? Em thường phải ghi lại và mỗi khi muốn dùng trong một Word book nào đó, lại phải chỉ ra đường dẫn đã ghi nhớ hàm. Đó là việc làm không quá mất công nhưng cũng không có gì là thú vị cả.
Em nhờ các anh giúp đỡ. Em xin cảm ơn nhiều !
( Em vừa mới làm quen với VB ---> hỏi hơi chuối, mong các anh thứ lỗi !) ;)

HPA
24-08-2005, 01:16 PM
to nvd dg
neu ban viet cac ham do trong VBA cua excel thi ban chi can ghi lai o dang *.xla
sau do ban addin vao excel thi sau nay ban co the dung ham do chotat ca cac wb nhu ban mong muon.

ttkh
02-09-2005, 11:18 AM
Xin chỉ giúp. Tôi gặp vấn đề sau : Khi tạo một macro
Ví dụ
A1 =6
B1 = 7
C1 = 8
D1 = A1+B1
ENTER
Thì ta có macro
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 9/2/2005 by user02
'

'
ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
Range("D2").Select
End Sub
Vậy thì bằng cách nào để cho "Range("D2").Select "không phải là D2, vì khi thực hiện macro này thì kết thúc lệnh ô hiện hành là ô D2 ( cho dù vị trí thực hiện nào đi nữa).
Có nghĩa là ta phải thay đổi dòng Range("D2").Select "như thế nào để nó không phải là địa chỉ tuyệt đối như vậy. Ví dụ thực hiện lệnh ở ô D3 (sử dụng macro trên )thì kết thúc lệnh ô hiện hành ở D4, chứ không phải là D2

Kidsmart1981
04-09-2005, 10:47 AM
Tôi không trả lời trực tiếp vấn đề của bạn(thực tình tôi ko thích....viết macro Excel), tôi nói qua về mô hình Excel Object Mode để bạn tham khảo nha:
- Trong 1 thể hiên của Excel(một Excel.Application) thì ActiveCell là duy nhất tại một thời điểm(nó có thể ở Workbook nào đó, Sheet nào đó...) để nhận thông tin nhập vào từ bàn phím của một thời điểm.
- Các đối tượng như worksheet, activecell, row, column....đều có thể chuyển kiểu trực tiếp sang Excel.Range.
- Cách sử dụng địa chỉ tương đối tôi hay dùng là: Đánh địa chỉ dựa trên ActiveCell hiện tại; hoặc sử dụng Offset(i, j).
Tôi minh họa một ví dụ:
Excel.Range rng1 = Excel.Application.ActiveCell;
Excel.Range rng2 = rng1.Cells[2,3];
//Trong ví dụ trên thì rng1 là ActiveCell hiện tại (phụ thuộc vào người sử dụng và người lập trình...) và nó sẽ có địa chỉ là [1, 1] trong cách đánh địa chỉ tương đối trên và rng2 sẽ là Cells[2, 3] dựa trên mốc [1, 1] ta vừa đánh dấu.

touchstone
05-09-2005, 04:02 PM
bác ducxd bẻ khóa bằng cài gì vậy , chỉ giúp em với



chao shinichi. Be khoa Excel (Unprotect Sheet and VBA Password) không gì tốt hơn Advanced Office Password Recovery (AOPR) đâu. Hôm vừa rồi tôi ra dơwnload về dùng rất tốt. Hiện tại tôi không mang theo chương trình đó ở đây. Để khi nào đó tôi sẽ upload cho các bạn dùng thử nhé.

trlam
17-01-2006, 08:30 AM
http://www.elcomsoft.com/prs.html
pass: AOPRP-COMM-XXDNN-27747-BHJGY-55343

leâ thanh
17-01-2006, 08:38 AM
cam on cac huynh da post len cac ham excel nhe,tui em hoc hoi duoc nhieu lam,

PMXD
17-01-2006, 04:19 PM
Xin chỉ giúp. Tôi gặp vấn đề sau : Khi tạo một macro
Ví dụ
A1 =6
B1 = 7
C1 = 8
D1 = A1+B1
ENTER
Thì ta có macro
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 9/2/2005 by user02
'

'
ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
Range("D2").Select
End Sub
Vậy thì bằng cách nào để cho "Range("D2").Select "không phải là D2, vì khi thực hiện macro này thì kết thúc lệnh ô hiện hành là ô D2 ( cho dù vị trí thực hiện nào đi nữa).
Có nghĩa là ta phải thay đổi dòng Range("D2").Select "như thế nào để nó không phải là địa chỉ tuyệt đối như vậy. Ví dụ thực hiện lệnh ở ô D3 (sử dụng macro trên )thì kết thúc lệnh ô hiện hành ở D4, chứ không phải là D2

Nếu bạn không muốn nó select tại địa chỉ tuyệt đối là "D2" thì
1- Bỏ dòng sau đây đi Range("D2").Select
2- Thay giá trị "D2" bằng giá trị khác qui định trong biến
Ví dụ:
Dim AddCell as long
AddCell=3
Range("D" & AddCell ).Select

Chúc bạn thành công

ntl_dhxd47
27-04-2006, 04:25 PM
chào các bác!
Em rất muốn học VBA cho thằng Excel này
thấy các bác post lên nhiều nhiều em thật sự rất vui
Em có một thỉnh cầu nho nhỏ này:
Đằng nào các bác cũng dành thời gian viết bài và post lên, vậy trong khi viết hàm nào đó các bác có thể giải thích rõ hơn một chút được không, để cho anh em nào (như em chẳng hạn) muốn đọc code cũng hiểu được nhiều, rất cảm ơn các bác

gnatsum
02-05-2006, 04:50 PM
PMXD thân mến
Tôi có đọc 2 hàm :Tra A,B,D và tính bản sàn
Thế thì phức tạp quá.Hôm sau rãnh tôi post lên các bạn cho ý kiến nhé:
1/ Hàm tra A,B,D toằn bộ có công thức rồi chỉ dùng excel thông thường là tính thẳng ra A,B,D và Rtc luôn
2/ Bản sàn thì dùng một chút công thức nội suy thì ra luôn nội lực
Đâu cần phức tạp đến thế

PhanTuHuong
18-05-2006, 08:18 PM
Tôi mới tham gia bào diễn đàn này, nhưng thấy các bạn viết nhiều hàm trong Excel quá hay. Tôi cũng rất thích VBA và cũng làm được 1 số các vấn đề có liên quan đến công việc chuyên môn của mình (Địa chất công trình). Tôi có một số đóng góp nhỏ sau:
- Hàm tính sức chịu tải quy ước Ro có công thức tính A, B, D mà không phải tra (Bạn tham khảo trong phần Khảo sát ĐCCT).
- Hàm nội suy tuyến tính 2 chiều của tôi lập khá gọn nhẹ, dễ hiểu vì tôi dùng 2 vòng lặp for ***g.

Tôi muốn hỏi thêm về biểu đồ tương quan dạng XY, làm thế nào biết được thuật toán làm lượn cong với chức năng Smoothed line. Có cách nào xác định điểm bất kỳ trên đường cong đó. Tôi thì xin chịu !!!!!!!!!!!!

Nhờ các bạn giúp nhé!

Xin cám ơn!

minhtu
20-05-2006, 03:26 AM
Anh có thể tham khảo bài này:
Generating Smooth Curves in Charts (ftp://gaby.de/pub/win3x/archive/softlib/we0820.exe)

PhanTuHuong
20-05-2006, 01:37 PM
Tú ơi!

Anh rất cám ơn ông em. Nhưng anh muốn biết thuật toán của Smoothed line. Hình như nó cài theo dạng *.xla nên anh kô thể xem đc, em có cách naog giúp anh đc ko vẩy

minhtu
20-05-2006, 03:31 PM
Tú ơi!

Anh rất cám ơn ông em. Nhưng anh muốn biết thuật toán của Smoothed line. Hình như nó cài theo dạng *.xla nên anh kô thể xem đc, em có cách naog giúp anh đc ko vẩy

Đó là Excel 4.0, anh muốn xem thì vào Properties của ThisWorkbook đặt IsAddin=False, nhưng trong đó cũng không có thuật toán như anh cần đâu.
Smooth line của Excel là dạng đồ thị bậc 3 đi qua các điểm kiểm soát, anh có thể xem nhiều dạng làm trơn khác trong các sách nói về Kỹ thuật đồ họa (Hermite, Bezier...). Em có 1 ít tài liệu nói về phần này, anh có thể tham khảo nhưng nó chưa thật chuẩn so với Smooth line của Excel.

minhtu
20-05-2006, 05:33 PM
Em tìm được cái này khá đúng với Smooth data của Excel, có thể dùng được.

------------------------------------
<tiện thể Test thử attach picture xem được không :D>

PhanTuHuong
20-05-2006, 06:22 PM
Cám ơn Tú nhé!

Ông em có cái gì hay hay thì post lên cho anh em ngành ĐCCT- ĐKT xem nhé, lại vừa là quảng cáo nữa chứ :)

tienkt
02-06-2006, 02:12 PM
chào các bác
em là sinh viên năm thứ2 trườngKTHN
em vào topic này xem song ko hiểu lắm
bác nào có tài liệu về Excel cho em xin với
thanks

PhanTuHuong
02-06-2006, 04:59 PM
để học Excel, bạn vào trang web này http://edu.net.vn/Default.aspx?tabindex=1&tabid=6&mid=52, sau đó tải bài giảng của thầy Lê Quang Huy- Khoa CNTT- Trường ĐH Mở HN. Tôi thấy bài giảng này cũng dễ học (Excel 95).
Thành thạo Excel thì mới có thể dùng VBA được.

tienkt
06-06-2006, 09:58 AM
cám ơn bác nhiều nhé

mibdhbk
10-06-2006, 01:46 PM
Các bác cho em hỏi bên VB một chut (em mới bắt đầu học nên còn kém lắm,các bác thông cảm nhé)
1.Làm thế nào để xuất kết quả ra dưới dạng.txt ,dưới dạng.xls?
2.Có phải VB không thể tạo được cơ sở dữ liệu (Đơn giản như 1 bảng tra chẳng hạn) mà bắt buộc phải dùng Access không?Kết nối như thế nào?

xquang
21-03-2007, 03:49 PM
Bác PMXD hàm nội suy của bác gặp sự cố rồi (không biết có phải thế không!?). Mình nêu ra trường hợp nhé: khi bác nhập giá trị "Cot" là các số nằm trong cột đó (VD:cột là dãy số:0,1; 0,25; 0,5;0,75;1 thì nhập chính xác số có trong cột là 0,25) và khi nhập giá trị "Hang" là số không có trong Hàng đó (VD: Hàng có dãy 1;2;3;4 mà nhập số cần nội suy la 2,1) thì kết quả trả về 0. Đây là điều bất tiện trong phương pháp nội suy vì không đáp ứng tính bất kì của một hàm số nội suy. Mong Bác có câu trả lời giụp Nhân đây mình xin gửi lại file Bác đã post lên nhưng mình đã sửa giá trị tương ứng với trường hợp nêu trên để Bac tham khảo để giải quyết nhanh.

vietha209
04-04-2007, 02:15 PM
Mình đã xem lại code của PMXD và nhận thấy thừa ra 1 đoạn ở đầu, bạn dùng thử xem sao:
Function TraBang2Chieu(ByVal GiaTriCot, ByVal GiaTriHang, 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)
If (GiaTriCot - VungChon(1, i)) * (GiaTriCot - VungChon(1, i + 1)) <= 0 Then
For j = 1 To UBound(VungChon.Value, 1) - 1
If (GiaTriHang - VungChon(j, 1)) * (GiaTriHang - 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) + (GiaTriCot - 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) + (GiaTriCot - VungChon(1, i)) * TangAnPha

TangAnPha = (NoiSuy2 - NoiSuy1) / (VungChon(j + 1, 1) - VungChon(j, 1))
TraBang2Chieu = NoiSuy1 + (GiaTriHang - VungChon(j, 1)) * TangAnPha
GoTo Thoat:
End If
Next j
End If
Next i
Thoat:
End Function
Tuy nhiên mình nhận thấy cách tra bảng này chỉ thực hiện nội suy thì được thôi, chứ ngoại suy thì not OK.

daucuchuoi
08-04-2007, 02:03 AM
Tôi thấy chủ đề các bác mở ra là mỗi tuần một hàm Excel, nhưng đọc toàn thấy VB thôi à. Mà viết vài cái lệnh VB thì đâu có khó và chả liên quan gì đến Excel cả. Với các hàm này các bác cứ tự nhiên vào AutoCAD, Word, PowerPoint... hay cái quái gì mà chả dùng được.
Tôi thấy bọn lớp 48 CLC trường Xây dựng được dùng Excel để tính móng nông (có tra bảng, có vẽ biểu đồ ứng suất...) mà toàn dùng đúng các hàm của Excel thôi à (không hề có VB).

Xin mạn phép góp ý với bác PMXD là bác nên mở thêm một chủ đề về lập trình VB thì thích hợp hơn, lúc đó sẽ có nhiều dân IT vào đấy.:)

ptqc06
19-04-2007, 11:52 PM
Từ trước đến giờ em toàn dùng excel để thực hiện.Không cần VBA đâu.Tuy hơi dài 1 chút nhưng chơi được mọi bài toán hết.Chỉ cần sáng tạo chút thôi.Ai thích thì em gửi mấy công thức nội suy trong bảng tra cơ đất cho.Chỉ dùng match và index là chơi được cả 1 chiều và 2 chiều hết.Dĩ nhiên là có hàm sẽ nhanh hơn nhưng ai chưa kịp học cũng có thể dùng ngay mà không cần đi nghiên cứu VBA.

smallduck26
22-04-2007, 09:17 PM
bác PMXD thật tâm lý. em đang là sinh viên, học tàng tàng,ko bit VBA nên xin cái bác làm sẵn về dùng lại thấy hay. ai có thể cho mình bit về lập trình VBA ko, kiến thức từ thấp tới cao í :p

pvtdhxd
29-09-2007, 10:37 AM
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[/QUOTE]
xem hộ cái dòng màu đỏ cái.

ngochuong
14-01-2008, 11:31 AM
Mình có bộ sách hướng dẫn VBA Excel, thấy khá hay, có rất nhiều hàm ví dụ theo sách.Post lên dây mọi người thử xem
Có thể load theo đường dẫn
http://www.v-art.com.vn/vba.zip

Không rõ đường linh pác ơi ! Xem lại dzùm nhe

ngochuong
14-01-2008, 11:35 AM
Tôi có phần mềm bẻ khóa trong excel load trên diễn đàn này về (không nhớ ở đâu nưa) thấy chạy tốt, gửi thử bằng mail rồi nhưng toàn báo không gửi được, đành up lên theo cái linh này
http://v-art.com.vn/vbapass.zip

Đường link co vấn đề rồi pác ơi ! Xem lại dzùm nhe!

alpha_xd
14-01-2008, 12:55 PM
Đúng là link này ko có gì hết trơn a bác ơi.
Bác có thể post lại được ko?

xaydung123
23-04-2008, 05:07 PM
[QUOTE=PMXD]Hi every body!
Từ hôm Post hàm Excel Nội suy đến bây giờ mới có một người phản hồi kết quả, Dù sao PMXD tôi cũng thấy hài lóng rồi. Hôm nay, như đã hứa, tôi xin đăng một hàm Excel mới phục vụ cho việc tính toán nội lực bản (theo giáo trình BTCT).
'==========================Giải thích các thông số
Tên hàm:
Mban
Các tham số:
P: Lực phân bố trên bản sàn (T/m2)
L1: Chiều dài cạnh 1 (m)
L2: Chiều dài cạnh 2 (m)
Mtrave: Loại Mô men được trả về
Mtrave=1 => M11
Mtrave=2 => M12
Mtrave=3 => M21
Mtrave=4 => M22
Mtrave=5 => M1
Mtrave=6 => M2
(Các giá tri M1, M2, M11, M12, M21, M22 xin xem ở hình vẽ kèm theo)

Thanh1,Thanh2,Thanh3,Thanh4: Thuộc tính dùng để kiểm tra xem có dầm ở các cạnh của bản hay không.Nếu người dùng không vào các tham số này thì hàm sẽ tự hiểu là có dầm.
'===========================Nội dung hàm
Enum Mtrave
TV_M11 = 1
TV_M12 = 2
TV_M21 = 3
TV_M22 = 4
TV_M1 = 5
TV_M2 = 6
End Enum

Function Mban(ByVal P As Double, ByVal L1 As Double, L2 As Double, ByVal Mtrave As Mtrave, Optional Thanh1 = True, Optional Thanh2 = True, Optional Thanh3 = True, Optional Thanh4 = True)


Dim r As Double
Dim TeTa As Double
Dim A1 As Double, B1 As Double, A2 As Double, B2 As Double
Dim M1 As Double, M11 As Double, M12 As Double
Dim M2 As Double, M21 As Double, M22 As Double

Dim MauSo As Double

If L1 > L2 Then
r = L1 / L2

If r >= 1 And r < 1.5 Then
TeTa = 1 + (r - 1) * (0.5 - 1) / (1.5 - 1)
A1 = IIf(Thanh1 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)
B1 = IIf(Thanh3 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)

A2 = IIf(Thanh4 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
B2 = IIf(Thanh2 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
ElseIf r >= 1.5 And r < 2 Then
TeTa = 0.6 + (r - 1.5) * (0.3 - 0.6) / (2 - 0.5)
A1 = IIf(Thanh1 = True, 1, 0)
B1 = IIf(Thanh3 = True, 1, 0)

A2 = IIf(Thanh4 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
B2 = IIf(Thanh2 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
End If
MauSo = (2 + A1 + B1) * L1 + (2 * TeTa + A2 + B2) * L2
M2 = P * L1 ^ 2 * (3 * L1 - L1) / 12 / MauSo 'He Don vi la Kg-m
M1 = TeTa * M2

M11 = A2 * M2
M12 = B2 * M2
M21 = A1 * M2
M22 = B1 * M2
Else
r = L2 / L1

If r >= 1 And r < 1.5 Then
TeTa = 1 + (r - 1) * (0.5 - 1) / (1.5 - 1)
A1 = IIf(Thanh2 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)
B1 = IIf(Thanh4 = True, 1.2 + (r - 1) * (1.2 - 1) / (1.5 - 1), 0)

A2 = IIf(Thanh1 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
B2 = IIf(Thanh3 = True, 1 + (r - 1) * (1.8 - 1) / (1.5 - 1), 0)
ElseIf r >= 1.5 And r < 2 Then
TeTa = 0.6 + (r - 1.5) * (0.3 - 0.6) / (2 - 0.5)
A1 = IIf(Thanh2 = True, 1, 0)
B1 = IIf(Thanh4 = True, 1, 0)

A2 = IIf(Thanh1 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
B2 = IIf(Thanh3 = True, 0.8 + (r - 1) * (0.5 - 0.8) / (1.5 - 1), 0)
End If
MauSo = (2 + A1 + B1) * L2 + (2 * TeTa + A2 + B2) * L1
M1 = P * L1 ^ 2 * (3 * L2 - L1) / 12 / MauSo 'He Don vi la Kg-m
M2 = TeTa * M1
M11 = A1 * M1
M12 = B1 * M1
M21 = A2 * M1
M22 = B2 * M1
End If
Select Case Mtrave
Case TV_M1
Mban = M1
Case TV_M11
Mban = M11
Case TV_M12
Mban = M12
Case TV_M2
Mban = M2
Case TV_M21
Mban = M21
Case TV_M22
Mban = M22
End Select
End Function

'===========================Chúc vui vẻ

To Garry Killer:

Chào anh! em cũng là kỹ sư xây dựng ,chỉ mới chập chửng hoc VAB, nên không giành, nhưng em thấy 1 anh kỹ sư lập các thông số bên excel rồi mở chương trình chemical desktop up link vào là hình vẽ tự thay đổi theo thông số bên excel, nên em xin ý kiên của anh và các hyunh khác về cách làm trên, rất mong sự giúp đỡ các huynh! cám ơn

anhtu_ĐHXD
23-04-2008, 11:21 PM
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
------------------------------------------------------------

anh ơi,anh nói cụ thể hơn 1 chút được ko?em vẫn chưa hiểu Insert 1 Module vào môi trường VBA là làm như thế nào?thanks

hoahuce
27-04-2008, 11:11 AM
Cục Modules nằm bên tay trái đó. add thêm vào ...........:) :) :)

ThangCoi
17-02-2009, 01:15 PM
2- Nhấn Ctrl+F11


Cái này là Alt + F11 mới đúng chứ

Kiem Lam
05-04-2009, 03:44 PM
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.
Em cam on anh nheiu lam. Em dang tu hoc lap trinh VBA va VB tren nen EXcel va Cad. Em cam on anh vi da huong dan nhieu cho em. Co dip nao anh ranh em goi code cua em len nho anh check ho nhe. A ma anh ranh ve bug khong chi em voi

Kiem Lam
05-04-2009, 03:54 PM
Tôi rất muốn nghiên cứu về VBA, thực tế cũng đã hiểu cơ bản, nhưng tài liệu về VBA rất ít (tiếng Việt), các đồng nghiệp giúp tôi với, cảm ơn trước. :D
co sach VBA cua Anh Phan Tu Huong cung ok lam

vyhung98
07-07-2010, 05:17 PM
Bac nay len mang ma tim nhieu chuong trinh lam bac oi! Neu khong tim duoc thi gui day minh tim ho cho.

khanhduydang
28-07-2010, 11:07 PM
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

Hình như có lộn ở chổ này thì phải
2- Nhấn Ctrl+F11 phải là
2- Nhấn Alt+F11

Bro làm ơn chỉ dùm mình cách đưa qua file khác mà vẫn xài được sao mình qua file khác copy vào mà ko chạy. hic hic

tamkt
28-08-2010, 06:37 PM
"Tôi cũng xin post một hàm dùng để tính dầm CN chịu M, Q và M-xoắn

Public Sub Uphang_xoan_cnhat(M As Single, Q As Single, MX As Single, b As Single, h As Single, a As Single, Fk As Single, Fn As Single, Fk1 As Single, Fn1 As Single, Ra As Single, Rad As Single, Rn As Single, Rk As Single, anfa0 As Single, fd As Single, u As Single, u_min As Single, ktraDam As Boolean)
'Thu tuc tinh Fk, Fn, Fk1, Fn1 de chong xoan (voi fd va u chon truoc)
Dim h0 As Single, b0 As Single, delta_Fk As Single, kq As Boolean
Dim C(1 To 100) As Single, MM As Single, MM_min As Single, tam As Single
Dim m0 As Single, m_d As Single, v As Single, qd As Single, Qdb As Single
Dim Fk_max As Single, Fk_min As Single, Fk1_max As Single, Fk1_min As Single
Dim x As Single, i As Long
'**************************************************************
'Kiem tra dk han che cua Mx:
If MX > (0.1 * Rn * h * b ^ 2) Then
ktraDam = False 'Mx qua lon, khong thoa dk han che.
Exit Sub 'Khong the tke dam voi kich thuoc da chon
End If
'Neu thoa man dk han che, ta kiem tra cac gia tri tai trong
If MX = 0 Then MX = 1 'de tranh loi chia cho 0
If MX < 0 Then MX = -MX 'Chi tinh toan voi cac gia tri duong
If Q < 0 Then Q = -Q 'Chi tinh toan voi cac gia tri duong
If Q = 0 Then Q = 1 'de tranh loi chia cho 0
If M < 0 Then M = -M 'Chi tinh toan voi cac gia tri duong
v = M / MX
If v >= 10 Then v = 10 'can thiet de dam bao mo khong qua nho
'neu khong ctrinh se lam tang Fk de thoa dk m_d<3*m0
u = mdl01.min2so(u_min, h / 3)
'Ngay tu dau, chon luon u nho nhat de chong xoan.
If Fk < 1.57 * 0.0001 Then Fk = 1.57 * 0.0001 'Toi thieu 2fi10
If Fn < 1.57 * 0.0001 Then Fn = 1.57 * 0.0001 'Toi thieu 2fi10
If Fk1 < 1.57 * 0.0001 Then Fk1 = 1.57 * 0.0001 'Toi thieu 2fi10
If Fn1 < 1.57 * 0.0001 Then Fn1 = 1.57 * 0.0001 'Toi thieu 2fi10
delta_Fk = 0.1: h0 = h - a: b0 = b - a
'**************************************************************
'TINH TOAN KIEM TRA THEO M VA MX:
m0 = 1 / ((2 + 4 * v * Sqr(b / (2 * h + b))) * (2 * h + b) * b)
Fk_min = (Rad * fd) / (3 * Ra * (2 * h + b) * u * m0) ':Fk_max = 3 * Fk_min
If Fk < Fk_min Then Fk = Fk_min
kq = False
Do
x = (Ra * (Fk - Fn)) / (Rn * b)
If x > anfa0 * h0 Then 'Qua nhieu thep, dam bi nut
Fk = -1: Fn = -1: ktraDam = False: Exit Sub
End If
m_d = Rad * fd / (Ra * Fk * (2 * h + b) * u)
'Tinh MM_min (Kha nang chong xoan nho nhat):
C(1) = (2 * h + b) / 100
MM_min = (Ra * Fk * (h0 - 0.5 * x) * (1 + m_d * C(1) * C(1)) * b) / (C(1) + v * b)
For i = 2 To 100
C(i) = i * C(1)
tam = (Ra * Fk * (h0 - 0.5 * x) * (1 + m_d * C(i) * C(i)) * b) / (C(i) + v * b)
If MM_min >= tam Then MM_min = tam
Next
If MX <= 0.95 * MM_min Then
kq = True
Else
If Fk < (0.02 * b * h0) Then
Fk = Fk + delta_Fk
Else 'Khong the tke dam voi kich thuoc, fd, u da chon
ktraDam = False
Fk = -1: Fn = -1
Exit Sub
End If
End If
Loop Until kq = True
'**************************************************************
'TINH TOAN KIEM TRA THEO MX VA Q:
'Kiem tra dk:
If MX <= 0.5 * Q * b Then
qd = Rad * fd / u 'Voi u=u_min
Qdb = Sqr(8 * Rk * b * h0 * h0 * qd)
If (Q + 3 * MX / h) <= Qdb Then
Exit Sub 'Khong can kiem tra tiep nua.
End If
End If
'm0 = 1 / ((2 + 4 * v * Sqr(h / (2 * b + h))) * (2 * b + h) * h)
'Fk1_min = (Rad * fd) / (3 * Ra * (2 * b + h) * u * m0) ':Fk1_max = 3 * Fk1_min
'If Fk1 < Fk1_min Then Fk1 = Fk1_min '(Khong can dung cac lenh nay)
kq = False
Do
x = (Ra * (Fk1 - Fn1)) / (Rn * h)
If x > anfa0 * h0 Then 'Qua nhieu thep, dam bi nut
Fk = -1: Fn = -1: ktraDam = False: Exit Sub
End If
m_d = (Rad * fd) / (Ra * Fk1 * (2 * b + h) * u)
'Tinh MM_min (Kha nang chong xoan nho nhat):
C(1) = (2 * b + h) / 100
MM_min = (Ra * Fk1 * (b0 - 0.5 * x) * (1 + m_d * C(1) ^ 2) * h) / (C(1) * (1 + Q * b / (2 * MX)))
For i = 2 To 100
C(i) = i * C(1)
tam = (Ra * Fk1 * (b0 - 0.5 * x) * (1 + m_d * C(i) ^ 2) * h) / (C(i) * (1 + Q * b / (2 * MX)))
If MM_min >= tam Then MM_min = tam
Next
If MX <= 0.95 * MM_min Then
kq = True
Else
If Fk1 < (0.01 * b0 * h) Then
Fk1 = Fk1 + delta_Fk
Else 'Khong the tke dam voi kich thuoc, fd, u da chon
ktraDam = False
Fk1 = -1: Fn1 = -1
Exit Sub
End If
End If
Loop Until kq = True
'Ket qua ta duoc Fk, Fn, Fk1, Fn1, u=u_min, fd
End Sub "

Chào anh LÊ VIỆT THANH!
Em thấy anh viết hay quá, đọc qua em hiểu sơ sơ,hihi.
Nhưng em add vào exel nó không chạy, anh chỉ giúp e được không ah?

son06x1d
06-09-2010, 11:11 AM
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

Em dùng excel 2007 Insert ở đâu vậy bác. em còn mơ hồ lắm bác chỉ dẩn thêm được không.

bdstvh.tung
13-10-2010, 11:02 AM
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

bác chỉ cho em sách nào để học viết máy cái này đi ! em muốn nghiên cứu nó mà không có tài liệu, em đang làm việc tại TP.HCM

tuanlt
13-10-2010, 11:11 AM
bác chỉ cho em sách nào để học viết máy cái này đi ! em muốn nghiên cứu nó mà không có tài liệu, em đang làm việc tại TP.HCM
Kinh nghiệm của tui nhé: Bạn chỉ cần đọc Help phần VBA trong Excell là đã làm được rồi. VBA cho Excell có những đặc trưng riêng và nói chung là dễ dùng. Tất nhiên nếu bạn đã học VB rồi thì đó là một lợi thế. Có 1 mẹo nhỏ để lập trình bằng VBA cho Excell: Bạn có thể học được cú pháp câu lệnh lập trình bằng cách mở các Macro do Excell ghi lại...

belief
14-10-2010, 12:17 AM
Thanks bác PMXD nhiều nghe, em đang tìm hiểu về các ngôn ngữ lập trình để ứng dụng trong xây dựng nhưng đang phân vân thì coi như gặp được bác chỉ đường.

lsxinh
15-01-2011, 03:54 PM
Lập hàm tự tạo giúp nội suy với 3 điều kiện???

Nhờ anh chị em trong diễn đàn giúp đỡ giải quyết bài toán nôi suy sau:
Cho trước các giá trị: Bc, m, H0: giả sử: Bc = 175, m = 10, H0 = 10.5;
Hãy lập hàm tự tạo kiểu Function(Bc,m,H0) để xác định Vth khi biết 3 giá trị trên.

Cảm ơn rất rất nhiều!!!
lsxinh@gmail.com


Vui lòng mở file đính kèm để xem chi tiết.
http://www.mediafire.com/?cs4o2p3m3a8lv74

lhkq
16-01-2011, 12:31 PM
Nhờ Bác PMXD chỉ giúp. Tôi đang viết một hàm tính Fa cho mặt cắt CN cốt kép. Trong đó có thử điều kiện này kia. Nếu ko thỏa mãn, thi tính Fa cho cốt đơn. Fa cốt đơn, tôi đã viết. Vậy gọi nó vào trong hàm như thế nào. Nhờ bác chỉ cho đoạn code này.Chi tiết cho nhé. Trình độ VBA ăn đong lắm. Rất cảm ơn bạn! Hy vọng hồi âm.

jijialonso
20-01-2011, 05:10 PM
Hàm của bạn và hàm của tôi bản chất là giống nhau, nhưng tôi xin góp ý về cách sử dụng để có thể dùng được cả 1 và 2 chiều cho cùng một hàm:
1- Vòng lặp For của bạn cứ cho chạy từ 1 đến n(hoặc m)
2- Giá trị đầu tiên của mỗi hàng và mỗi cột được lấy làm tiêu chí so sánh. Trường hợp hàng đầu tiên(Hoặc cột đầu tiên) không phải là số(Ví dụ là kí tự) thì ta c tự đánh số cho chúng.

'=======================VÍ DỤ
Sau đây là ví dụ về tra bảng Xác định Các hệ số A,B, D trong tính toán Sức chịu tải của nền đất

Bảng số liệu như sau: (Xem file Đính kèm)

Và trên địa chỉ hàm ta viết:

=trabang([Hang],[Cot],Data!$A$25:$D$49)

Ở ví dụ này, vì tra bảng 1 chiều nên [Hàng]=1 hoặc 2 hoặc 3 tương ứng với việc tìm A,B,D.
Như vậy hàm sẽ tra được cả 1 chiều lẫn 2 chiều
=================================
Chào anh PMXD!
ham trabang([hàng],[cột],Data!$A$25:$D$49)
[hang] thi anh nhap 1, 2, 3 để được các giá trị tương ứng là A,B,D thì em hiểu rồi
[cột] anh nhập như thế nào
giả sử như em muốn biết 4.56 độ nhưng em không biết tham số phi trong cong thức trabang([hàng],[cột],Data!$A$25:$D$49) o đâu hết
cám ơn anh nhiều

bdstvh.tung
18-03-2011, 03:55 PM
Cảm ơn anh Huy đã khích lệ động viên để PMXD tôi phấn khích để tiếp tục công việc post bài, hy vọng anh duy trì chủ đề này trong mỗi tuần.
Sau khi đưa ra hàm nội suy đầu tiên, tôi thấy anh em trong diễn đàn có vài người vẫn thắc mắc về cách sử dụng. Hôm nay, tôi sẽ gửi cho anh em một bảng Excel ví dụ cụ thể để mọi người cùng tham khảo và sử dụng. Mong anh em sử dụng và đóng góp ý kiến.

làm sao để viết được như thế ? mong chỉ mình biết nên dọc giáo trình nào để hiểu và viết được như vậy ?
mình cảm ơn nhiều

betameo
18-03-2011, 04:16 PM
Nhờ Bác PMXD chỉ giúp. Tôi đang viết một hàm tính Fa cho mặt cắt CN cốt kép. Trong đó có thử điều kiện này kia. Nếu ko thỏa mãn, thi tính Fa cho cốt đơn. Fa cốt đơn, tôi đã viết. Vậy gọi nó vào trong hàm như thế nào. Nhờ bác chỉ cho đoạn code này.Chi tiết cho nhé. Trình độ VBA ăn đong lắm. Rất cảm ơn bạn! Hy vọng hồi âm.

Vào cửa sổ VBE (right click biểu tượng excel tại góc trái-trên), insert --> module. Xuất hiện module1 tại panel bên trái. Nhập code của bạn viết vào khung bên trái. Thế là xong.

dungksxdhd
21-04-2011, 10:20 AM
cho em hỏi các bác em muốn hoc vba thi bắt đầu như thế nào em mong các bác giúp em với

nguyenmanhth
21-04-2012, 08:42 AM
cái bảng này của anh hay lắm nhưng có một cái đó là khi giá trị của
hang = (thamso(j, 1)) thì kết quả nội suy bị trả về 0. anh có thể khác phục nó không?

trucvuong
14-05-2012, 12:53 AM
nhân có các hàm "Ễch xeo" em hỏi các bác 1 câu hơi thô thiển tý là tính căn bậc ba thế nào ạ? hic

Cú pháp a^(1/x) x là bậc bác cần tìm chả có hàm nào cả!

ThangCoi
26-05-2012, 02:12 PM
Cú pháp a^(1/x) x là bậc bác cần tìm chả có hàm nào cả!
Chú ý là với hàm thì không sao. Nhưng với công thức trong VBA nó không nhận số a là số âm đâu kể cả là căn bậc 3 nên bác phải viết một chường trình nhỏ để bẫy lỗi đấy.

kstu89
17-04-2013, 12:19 AM
Gửi GK:
Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này


Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải :confused:

bác ơi e cũng xoắn não vì chót ham e VBA này nhưng sức lục có hạn e thật khó để ham sâu đc :(
Tiện đây bác cho e hỏi với:
- ý tưởng của e là muốn dùng excel để cắt thép 1 cách tiết kiệm tối đa (nó be bé thôi nhưng khi bắt tay vào thực hiện thì thật khó quá)
- khó khăn của e qua VD sau:
E muốn cắt 5 cây 3,5m = 17,5m,
lần 1 dùng 3 cây 11,7 dư X
lần 2 dùng 2 cây 11,7 dư Y
-> dùng hàm như nào để nó tự trả về theo 2 lần như trên vậy bác.
-> Với 1 bài toán tổng quát thì e dùng thuật toán như nào để có đc lượng X,Y là min ạ
-> E muốn dùng lượng X,Y này để sử dụng cho các đoạn cắt sau thì cách dùng hàm như nào ạ. ý e là mình dùng hàm gì để nó tự soi lại lượng XY (giờ lại coi XY như 11.7m) cho nhưng thanh cần sử dụng tiếp theo ạ.
Tất nhiên là các thanh sẽ đc đánh số cụ thể kể cả XY ạ.
=> E mong đc sự chỉ giúp của a để e có thể làm việc thông minh hơn chút ạ.
Nếu tiện a có thể chỉ bảo giúp e trực tiếp qua mail đc k ạ kshoangtu9889@gmail.com e cảm ơn anh nhiều.

engine
09-07-2013, 12:21 PM
1 thời gian rồi topic đã bị chìm trong quên lãng, nay e xin mạn phép cho nó lên để có cao nhân nào giúp nó hồi sinh. Những bài viết hay như thế này mà bị chìm thì quả là đáng tiếc quá:D:D
Không có ai giúp nó sống lại ạ:(:(

engine
10-07-2013, 12:45 AM
không bác nào giúp nó sống lại ạ. Nó chết quả là phí quá:(

tuanlt
10-07-2013, 09:05 AM
không bác nào giúp nó sống lại ạ. Nó chết quả là phí quá:(
Các bác dạo này chỉ muốn...kiếm tiền thôi, không nghiên cứu nữa rồi.
Theo ý kiến cá nhân, hình như mọi người đang tập trung vào Function nhiều quá, trong khi về phần này thì Excell đã rất mạnh, chứa nhiều hàm mà chỉ cần khéo léo vận dụng là ra được hàm mới (nói kiểu toán học là hàm hợp). Nhưng mảng thủ tục Procedure mặc dù rất cần nhưng ít người quan tâm.
Thực chất Procedure thậm chí còn có những ứng dụng quan trọng hơn hàm, vì function thì có thể nằm ngay trong thủ tục, một thủ tục thì giải quyết được nhiều việc hơn và nó mới thực sự là Macro. Một ví dụ đơn giản là bài toán tính móng cọc, nếu tổ chức thành một thủ tục thì tôi có thể hình dung như sau:
- Bắt đầu: mở ra một giao diện người dùng (form riêng) để nhập đầy đủ các thông số;
- Sau khi người dùng nhập hết thông số Excell sẽ tự chèn một Sheet trong đó dữ liệu đầu vào đã sắp xếp gọn gàng theo chủ định và đã được xử lý, tính toán từ SCT cho đến lún. Có thể tự động vẽ thêm các biểu đồ...
Như vậy các bạn dễ dàng thấy rằng function chỉ là một phần nhỏ của Procedure mà thôi. Muốn macro thực sự hiệu quả cần có những thủ tục lớn thay vì chỉ là những hàm nhỏ tính nội suy, tính thép...

it_acmilan
20-08-2013, 09:48 AM
nhìn hàm mà ngĩ lại.... post luôn fike thì hay biết mấy

umy
20-08-2013, 01:39 PM
nhìn hàm mà ngĩ lại.... post luôn fike thì hay biết mấy

fike ?:confused: Đám trẻ lười bây giờ có chịu học hành gì đâu ! Cứ muốn người dọn cổ sẳn cho ăn mà thôi :(

Các lão tướng đã chán nản về núi tu luyện, chỉ mong làm giầu nuôi bản thân. Chứ đâu còn quan tâm gì đến đám "sanh điên" lười biếng :D:D

Xã hội ảo nầy còn ngoi ngốp chưa mất, cũng nhờ còn lại vài cậu SV, KS giỏi ngoan, biết quí kiến thức, tự học hỏi thêm, để nâng cao xứng đáng giá trị tấm bằng KS đã có . ;)

Mod engine giúp nó sống lại đi, tìm kiếm TL đưa lên. Đem lại cuộc sống trong Topic nầy.

Trong nhà KC, sót lại vài lảo tướng còn tâm huyết và biết nhiều về món nầy lắm. Biết đâu trước khi nhấm mắt qua đời, họ để lại thêm vài chiêu nghề cho vài đứa trẻ ngoan còn lại. :p

Để chết quả là phí lắm, KS-VN ở nhà thì cạp đất, đi ra đường, xuất cảng lao động, tự thiến làm ô sin hết ráo :D

Ôi thời vàng son ! nay ở đâu ????

ngo_hieu
26-08-2013, 04:38 PM
Bác PMXD hàm nội suy của bác gặp sự cố rồi (không biết có phải thế không!?). Mình nêu ra trường hợp nhé: khi bác nhập giá trị "Cot" là các số nằm trong cột đó (VD:cột là dãy số:0,1; 0,25; 0,5;0,75;1 thì nhập chính xác số có trong cột là 0,25) và khi nhập giá trị "Hang" là số không có trong Hàng đó (VD: Hàng có dãy 1;2;3;4 mà nhập số cần nội suy la 2,1) thì kết quả trả về 0. Đây là điều bất tiện trong phương pháp nội suy vì không đáp ứng tính bất kì của một hàm số nội suy. Mong Bác có câu trả lời giụp Nhân đây mình xin gửi lại file Bác đã post lên nhưng mình đã sửa giá trị tương ứng với trường hợp nêu trên để Bac tham khảo để giải quyết nhanh.

em đang cần dùng cái hàm này mà cũng thấy có lỗi như trên, đọc từ đầu đến cuối thấy có mấy người thắc mắc tương tự nhưng chưa được cao thủ nào giải đáp. Hi vọng có Bác nào trả lời giúp.

ngo_hieu
26-08-2013, 04:44 PM
Nếu trong bảng có 3 cột thì không gặp hiện trượng như trên, lớn hơn 3 cột thì gặp lỗi. ??? Mình không biết tý gì về VBA chỉ là lấy về sử dụng thôi.

engine
13-12-2013, 11:17 AM
Đề tài này đã được lãng quên từ lâu, nay e xin được đăng lên 1 số tài liệu về excel:
Các tài liệu này đều có nguồn từ:
http://giaiphapexcel.com/forum/content.php
Nhưng do sợ 1 ngày về 1 nơi heo hút, không có mạng, không tiếp xúc với cuộc sống văn minh nên e đã lưu nó thành các file pdf nhỏ để thuận lợi cho quá trình tìm kiếm cũng như sử dụng của bản thân. Nay xin được gửi đến cho những ai quan tâm:
Phần 1: Những mẹo nhỏ khi định dạng:
Mỗi ngày e sẽ đăng lên 1 bài (cho đến khi hết những cái này trong máy của e) hay mọi người sẽ sang trực tiếp bên Giải pháp excel hay đọc sách thì thôi@@. Nhân tiện e cũng được ôn tập, học tập sử dụng excel cùng mọi người:D:D

engine
13-12-2013, 11:49 AM
Tiếp phần 1: Những mẹo nhỏ khi dùng công thức và tùy biến cửa sổ làm việc của bảng tính

landau
13-12-2013, 12:26 PM
fike ?:confused: Đám trẻ lười bây giờ có chịu học hành gì đâu ! Cứ muốn người dọn cổ sẳn cho ăn mà thôi :(

Các lão tướng đã chán nản về núi tu luyện, chỉ mong làm giầu nuôi bản thân. Chứ đâu còn quan tâm gì đến đám "sanh điên" lười biếng :D:D

Xã hội ảo nầy còn ngoi ngốp chưa mất, cũng nhờ còn lại vài cậu SV, KS giỏi ngoan, biết quí kiến thức, tự học hỏi thêm, để nâng cao xứng đáng giá trị tấm bằng KS đã có . ;)

Mod engine giúp nó sống lại đi, tìm kiếm TL đưa lên. Đem lại cuộc sống trong Topic nầy.

Trong nhà KC, sót lại vài lảo tướng còn tâm huyết và biết nhiều về món nầy lắm. Biết đâu trước khi nhấm mắt qua đời, họ để lại thêm vài chiêu nghề cho vài đứa trẻ ngoan còn lại. :p

Để chết quả là phí lắm, KS-VN ở nhà thì cạp đất, đi ra đường, xuất cảng lao động, tự thiến làm ô sin hết ráo :D

Ôi thời vàng son ! nay ở đâu ????

Nỗi lo của Bác Umy rất đáng để lớp trẻ chúng cháu suy nghĩ! Bây giờ thời mọi thứ khó khăn với các cậu ra trường lâu năm còn đỡ chứ tuổi trẻ mới ra trường, lại còn khâu đào tạo còn nhiều vấn đề trong trường ĐH của ta. Nên cập nhật với cuộc sống( mà phần nổi trông đã khó coi rồi còn phần chìm thì tệ lắm) của mấy chú ấy cũng khó nữa. Người phương Đông ta có câu" có thực với vực được đạo". Mong rằng những anh em có tâm huyết vẫn còn sống dài dài!:D:D:D
P/s: Xin được giúp engine một tay nếu có phần kiến thức nào hay. Vì trình lập trình cũng không cao thủ cho lắm.

engine
13-12-2013, 12:59 PM
Cảm ơn sự chung tay, góp sức của bác landau. Em thì thực sự..có biết cái gì đâu, đang cố vực dậy 1 topic thời hoàng kim cho nó được nhiều người đến sau chưa kịp..đọc được ạ. Hi vọng sẽ giúp được gì đó cho mọi người:D:D

engine
13-12-2013, 05:33 PM
Ngồi rảnh e lại có thêm 1 bài mới vậy.:D:D
Phần 2: Nhập dữ liệu đồng thời vào nhiều sheet
Phần 3: Ngăn chặn người dùng thực hiện 1 số hành động
Phần 4: Ngăn chặn những nhắc nhở không cần thiết của excel

huuvu152_85
13-12-2013, 10:37 PM
Nỗi lo của Bác Umy rất đáng để lớp trẻ chúng cháu suy nghĩ! Bây giờ thời mọi thứ khó khăn với các cậu ra trường lâu năm còn đỡ chứ tuổi trẻ mới ra trường, lại còn khâu đào tạo còn nhiều vấn đề trong trường ĐH của ta. Nên cập nhật với cuộc sống( mà phần nổi trông đã khó coi rồi còn phần chìm thì tệ lắm) của mấy chú ấy cũng khó nữa. Người phương Đông ta có câu" có thực với vực được đạo". Mong rằng những anh em có tâm huyết vẫn còn sống dài dài!:D:D:D
P/s: Xin được giúp engine một tay nếu có phần kiến thức nào hay. Vì trình lập trình cũng không cao thủ cho lắm.

có lòng là tốt lắm rồi. Mong các anh giúp đỡ tụi ngu dốt này với. Xin lắng nghe học hỏi và tìm tòi.

engine
13-12-2013, 11:07 PM
Thêm 1 bài nữa để hôm nay được chính mình phong danh hiệu "Thành viên tích cực nhất ngày"
(nói thế thôi, chứ đã trót hữa rồi, giờ tung lên, kẻo mọi người lại bảo "ôm con bỏ chợ", cố mà hoàn thành cho kịp tiến độ, còn có ai cần không thì chắc là..chả có ai cần cả:D:D)
Phần 5: Ẩn sheet
Phần 6: Tự tạo 1 template mẫu

engine
14-12-2013, 10:53 AM
Ngày mới, khởi đầu mới (mặc dù nó là..gần giữa trưa). Chúc mọi người ngày mới vui vẻ, có những thành công mới:D
Phần 7: Tạo chỉ mục cho các worksheet (hyperlink)
Phần 8: Giới hạn vùng cuộn của bảng tính

engine
14-12-2013, 08:52 PM
giờ giải lao xem bóng đá... Làm 1 bài cho nó có tinh thần về đêm:D:D
Phần 9: Khóa, bảo vệ các ô chứa công thức.
Phần 10: Định dạng theo điều kiện lọc dữ liệu (nhiều khi nghịch cái này cũng hay lắm):D:D

conxinloibac
14-12-2013, 10:00 PM
giờ giải lao xem bóng đá... Làm 1 bài cho nó có tinh thần về đêm:D:D
Phần 9: Khóa, bảo vệ các ô chứa công thức.
Phần 10: Định dạng theo điều kiện lọc dữ liệu (nhiều khi nghịch cái này cũng hay lắm):D:D

Mặc dù em cũng chưa có cơ hội dùng nhưng cũng ráng down về để dành khi "đói" . Nhân tiện cũng cám ơn Bác :D

Theo thống kê của RIÊNG cá nhân thì hiện tại nếu xét về tính thường xuyên sử dụng thì excel nó đang đứng đầu trong những phần mềm đã từng sử dụng:D:D

Ý em là gà quá nên chưa dùng nhiều :D

tabaosiphu
14-12-2013, 10:01 PM
giờ giải lao xem bóng đá... Làm 1 bài cho nó có tinh thần về đêm:D:D
Phần 9: Khóa, bảo vệ các ô chứa công thức.
Phần 10: Định dạng theo điều kiện lọc dữ liệu (nhiều khi nghịch cái này cũng hay lắm):D:D


1 lần nữa Em xin cám ơn bác :D

engine
14-12-2013, 10:06 PM
Mặc dù em cũng chưa có cơ hội dùng nhưng cũng ráng down về để dành khi "đói" . Nhân tiện cũng cám ơn Bác :D

Theo thống kê của RIÊNG cá nhân thì hiện tại nếu xét về tính thường xuyên sử dụng thì excel nó đang đứng đầu trong những phần mềm đã từng sử dụng:D:D

kenichigo68
14-12-2013, 11:14 PM
đây là hàm vẽ biểu đồ tương tác theo thầy Cống:'
Sub Bieudotuongtac()
Ht = [e10] / 1000
b = [e8] / 1000
h = [e9] / 1000
a0 = [e11] / 1000
nx = [e13]
ny = [e14]
gama = [b6]
Rb = [b3] * 10 ^ 3
Eb = [b5] * 10 ^ 3
Rs = [e3] * 10 ^ 3
Rsc = [e4] * 10 ^ 3
Rsw = [e5] * 10 ^ 3
d = [e12] / 1000
Pi = 3.14
A1s = Pi * d ^ 2 / 4

Dim y(100)
Dim xicma(100)
Dim xi(100)
Dim n(100)
Dim M(100)
Dim ho(100)
deltay = (h - 2 * a0) / (ny - 1)
deltax = (b - 2 * a0) / (nx - 1)

j = 2
' ve bieu do My
For x = 0.001 To h Step h / 20
For i = 1 To nx
y(i) = h / 2 - a0
Next i
For i = nx + 1 To (nx + ny) - 2
y(i) = h / 2 - a0 - deltay * (i - nx)
Next i
For i = nx + ny - 1 To 2 * nx + ny - 2
y(i) = a0 - h / 2
Next i
For i = 2 * nx + ny - 1 To 2 * (nx + ny) - 4
y(i) = -h / 2 + a0 + deltay * (i - (2 * nx + ny - 2))
Next i

For i = 1 To 2 * (nx + ny) - 4
ho(i) = Abs(y(i) - h / 2)
Next i

' Tinh ung suat trong tung cay thep

For i = 1 To 2 * (nx + ny) - 4
xi(i) = x / ho(i)
omega = 0.85 - 0.008 * gama * Rb * 10 ^ -3
xicma(i) = 400 * 10 ^ 3 * (omega / xi(i) - 1) / (1 - omega / 1.1)
If xicma(i) > Rs Then
xicma(i) = Rs
ElseIf xicma(i) < -Rs Then
xicma(i) = -Rs
End If
Next i

tong1 = 0
For i = 1 To 2 * (nx + ny) - 4
tong1 = xicma(i) * A1s + tong1
Next i


n(x) = gama * Rb * b * x - tong1 'kN

tong2 = 0
For i = 1 To 2 * (nx + ny) - 4
tong2 = xicma(i) * A1s * y(i) + tong2
Next i

M(x) = 0.5 * gama * Rb * b * x * (h - x) - tong2 'kNm

' ket qua
j = j + 1
Cells(j, 9) = n(x)
Cells(j, 8) = 0.7 * M(x)
Next

' Khi M=0
k = 0.288 * b
lamda = 0.7 * Ht / k
If lamda < 28 Then
phi = 1
Else
phi = 1.028 - 0.0000288 * lamda ^ 2 - 0.0016 * lamda
End If
N0 = phi * (gama * Rb * b * h + Rs * (2 * (nx + ny) - 4) * A1s)
Cells(j + 1, 9) = N0
Cells(j + 1, 8) = 0



k = 2
' ve bieu do My
For x = 0.001 To b Step b / 20
For i = 1 To ny
y(i) = b / 2 - a0
Next i
For i = ny + 1 To (nx + ny) - 2
y(i) = b / 2 - a0 - deltax * (i - ny)
Next i
For i = nx + ny - 1 To 2 * ny + nx - 2
y(i) = a0 - b / 2
Next i
For i = 2 * ny + nx - 1 To 2 * (nx + ny) - 4
y(i) = -b / 2 + a0 + deltax * (i - (2 * ny + nx - 2))
Next i

For i = 1 To 2 * (nx + ny) - 4
ho(i) = Abs(y(i) - b / 2)
Next i

' Tinh ung suat trong tung cay thep
For i = 1 To 2 * (nx + ny) - 4
xi(i) = x / ho(i)
omega = 0.85 - 0.008 * gama * Rb * 10 ^ -3
xicma(i) = 400 * 10 ^ 3 * (omega / xi(i) - 1) / (1 - omega / 1.1)
If xicma(i) > Rs Then
xicma(i) = Rs
ElseIf xicma(i) < -Rs Then
xicma(i) = -Rs
End If
Next i

tong1 = 0
For i = 1 To 2 * (nx + ny) - 4
tong1 = xicma(i) * A1s + tong1
Next i
n(x) = gama * Rb * h * x - tong1 'kN

tong2 = 0
For i = 1 To 2 * (nx + ny) - 4
tong2 = xicma(i) * A1s * y(i) + tong2
Next i
M(x) = 0.5 * gama * Rb * h * x * (b - x) - tong2 'kNm

' ket qua
k = k + 1

Cells(k, 11) = n(x)
Cells(k, 10) = 0.7 * M(x)
Next
' truong hop M=0
q = 0.288 * h
lamda = 0.7 * Ht / q
If lamda < 28 Then
phi = 1
Else
phi = 1.028 - 0.0000288 * lamda ^ 2 - 0.0016 * lamda
End If
N2 = phi * (gama * Rb * b * h + Rs * (2 * (nx + ny) - 4) * A1s)
Cells(k + 1, 11) = N2
Cells(k + 1, 10) = 0
End Sub

engine
14-12-2013, 11:19 PM
bác có thể up file mẫu được không bác, hình như cái này có tham chiếu ô thì phải.

kenichigo68
14-12-2013, 11:26 PM
bác có thể up file mẫu được không bác, hình như cái này có tham chiếu ô thì phải.

anh cứ nhập vô ô địa chỉ trong excel ak. ví dụ : E10 là Ht (mm). b là E8 (mm) v.v.v

engine
14-12-2013, 11:28 PM
Bác có thể làm form cho nó được mà. Như thế sẽ trực quan hơn:D

khatamxd
14-12-2013, 11:48 PM
Bác có thể làm form cho nó được mà. Như thế sẽ trực quan hơn:D

Bạn có thể tham khảo file vẽ biểu đồ cho cột lệch tâm xiên mà mình đã viết cách đây 4 năm theo link bên dưới
https://www.dropbox.com/s/uioix6p7vh1iae2/bieu%20do%20tuong%20tac.rar

File ko hề đặt pass nên xem code thoải mái. Tuy nhiên nếu muốn dùng thì các bạn phải kiểm tra sự đúng đắn của nó vì mình viết nó ra từ lâu và cũng ít đụng đến.

engine
15-12-2013, 09:03 AM
Bạn có thể tham khảo file vẽ biểu đồ cho cột lệch tâm xiên mà mình đã viết cách đây 4 năm theo link bên dưới
https://www.dropbox.com/s/uioix6p7vh1iae2/bieu%20do%20tuong%20tac.rar

File ko hề đặt pass nên xem code thoải mái. Tuy nhiên nếu muốn dùng thì các bạn phải kiểm tra sự đúng đắn của nó vì mình viết nó ra từ lâu và cũng ít đụng đến.

Rất dễ nhìn bác ạ:D:D Cảm ơn bác nhiều:D

engine
15-12-2013, 09:22 AM
Đến hẹn lại lên:
Phần 11: Tìm dữ liệu xuất hiện 2 hoặc nhiều lần bằng công cụ Conditional
Formating
Phần 12: Tạo riêng một thanh công cụ cho riêng một bảng tính cụ thể