Hỏi về lập hàm giải phương trình bậc hai bằng VBA trong Excel

Liên hệ QC

NguyenNgocSon

KEEP WALKING
Tham gia
4/4/08
Bài viết
280
Được thích
833
Nghề nghiệp
Ths. Cầu hầm
Xin mọi người chỉ giúo cách giải phương trình bằng VBA.Em mới học cũng chưa biết nhiều.Cám ơn mọi người.
 
Xin mọi người chỉ giúo cách giải phương trình bằng VBA.Em mới học cũng chưa biết nhiều.Cám ơn mọi người.

Bạn xem file đính kèm. Mình làm hai cách để bạn tham khảo nhé:
Một: bằng VBA-Visual Basic For Application (tạo một UDF-User Define Function):
PHP:
Function PTB2(Za As Double, Zb As Double, Zc As Double, Optional Zx As Long) As String
Dim Denta As Double, Checked As Boolean
Denta = Zb ^ 2 - 4 * Za * Zc
If Denta > 0 Then
Checked = True
X1 = (-Zb + Denta ^ (1 / 2)) / (2 * Za)
X2 = (-Zb - Denta ^ (1 / 2)) / (2 * Za)
ElseIf Denta = 0 Then
Checked = True
X1 = -Zb / (2 * Za)
X2 = -Zb / (2 * Za)
Else
Checked = False
End If
'=========================================
If Checked = True Then
    If Zx = 1 Then
        PTB2 = "X1=" & X1
    ElseIf Zx = 2 Then
        PTB2 = "X2= " & X2
    Else
        PTB2 = "X1= " & X1 & " // X2= " & X2
    End If
Else
PTB2 = "Phuong trinh vo nghiem"
End If
End Function


Hai: bằng công thức:
Ta có Phương trình bậc 2: ax^2 + bx + c = 0
Denta= b^2 - 4ac
Nếu Denta > o thì
X1= (-b+Denta^(1/2))/(2a)
X2=(-b-Denta^(1/2))/(2a)
Nếu Denta = 0 thì
X1=X2=-b/2a
Còn không thì thông báo "Chương trình vô nghiệm"
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
VBA là Visual Basic for Application.

sao excel máy nhà em không có nhỉ? em học cơ bản không thấy có? hay nó là hàm hay công thức ở phiên bản mới?
 
Upvote 0
Upvote 0
Denta= b2 - 4ac
Nếu Denta > o thì
X1= (-b+Denta^(1/2))/(2a)
X2=(-b-Denta^(1/2))/(2a)
Nếu Denta = 0 thì
X1=X2=-b/2a
Còn không thì thông báo "Chương trình vô nghiệm"
Thêm:
1. Nếu a = 0 và b <> 0 => 1 nghiệm đơn x = -c/b
2. Nếu a<> 0 và b = 0 :
a. nếu a và c trái dấu: x = -c^(1/2)
b. Nếu a và c cùng dấu: vô nghiệm
3. Nếu a = 0 và c = 0: vô nghiệm
4.
X1=IF(Denta>0;(-Zb+Denta^(1/2))/2*Za;IF(Denta=0;-Zb/2*Za;"Vô Nghiệm"))
X1= If(. . .;(-Zb+Denta^(1/2))/(2*Za);IF(Denta=0;"nghiệm kép: "&-Zb/(2*Za);"Vô Nghiệm")))))))
 
Upvote 0
Anh ptm0412 xem lại chút xíu:

2. Nếu a<> 0 và b = 0 : ==> ax2+ 0x + c = 0 ==> x2 = -c/a ??
a. nếu a và c trái dấu: x = -c^(1/2)??
..................
3. Nếu a = 0 và c = 0: vô nghiệm ==> 0x2 + bx + 0 = 0 ==> x = -b
 
Lần chỉnh sửa cuối:
Upvote 0
Sửa lại:
2. Nếu a<> 0 và b = 0 :
a. nếu a và c trái dấu: x = (-c/a)^(1/2)
....
3. Nếu a = 0 và b = 0: vô nghiệm

CÂu 2a sai, câu 3 gõ nhầm, xin lỗi mọi người nhé.
 
Upvote 0
giải thích như BNTT

Máy nhà em không có? Em mở Excel lên, rồi nhấn Alt+F11 là thấy nó liền.
__________________

thì em bó tay, chỉ thấy 1 trang trăng trắng?
 
Upvote 0
Cái trang trăng trắng đó là chỗ để viết các câu lệnh VBA vào đấy, cô bé à.

Thêm file giải PT bậc 2 (mình làm từ lâu rồi, bây giờ mới tìm thấy).
 

File đính kèm

Upvote 0
giải thích như BNTT

Máy nhà em không có? Em mở Excel lên, rồi nhấn Alt+F11 là thấy nó liền.
__________________

thì em bó tay, chỉ thấy 1 trang trăng trắng?
Thì em hỏi VBA là cái gì, nó là cái đó đó. Tại em chưa làm gì hết, thì nó là một trang trắng. Giống như em mở Excel lên mà chưa làm gì hết thì nó là một Sheet trắng.
 
Upvote 0
Bạn xem file đính kèm. Mình làm hai cách để bạn tham khảo nhé:
Một: bằng VBA-Visual Basic For Application (tạo một UDF-User Define Function):
PHP:
Function PTB2(Za As Double, Zb As Double, Zc As Double, Optional Zx As Long) As String
Dim Denta As Double, Checked As Boolean
Denta = Zb ^ 2 - 4 * Za * Zc
If Denta > 0 Then
Checked = True
X1 = (-Zb + Denta ^ (1 / 2)) / (2 * Za)
X2 = (-Zb - Denta ^ (1 / 2)) / (2 * Za)
ElseIf Denta = 0 Then
Checked = True
X1 = -Zb / (2 * Za)
X2 = -Zb / (2 * Za)
Else
Checked = False
End If
'=========================================
If Checked = True Then
    If Zx = 1 Then
        PTB2 = "X1=" & X1
    ElseIf Zx = 2 Then
        PTB2 = "X2= " & X2
    Else
        PTB2 = "X1= " & X1 & " // X2= " & X2
    End If
Else
PTB2 = "Phuong trinh vo nghiem"
End If
End Function
Hai: bằng công thức:
Ta có Phương trình bậc 2: ax^2 + bx + c = 0
Bài này bạn viết file cho trường hợp nghiệm là số phức luôn được không. Cám ơn nhé
 
Upvote 0
Bài này bạn viết file cho trường hợp nghiệm là số phức luôn được không. Cám ơn nhé

Mình lâu quá rồi không nhớ cách giải cho nghiệm số phức. Bạn cho cách giải bằng tay, mình viết lại bằng VBA hoặc công thức nhé!
 
Upvote 0
Xin phép Ca_dafi, rút gọn lại xíu :
PHP:
Function PTB2(Za As Double, Zb As Double, Zc As Double, Optional Zx As Long = 0) As String
    Dim Denta As Double
    Denta = Zb ^ 2 - 4 * Za * Zc
    Select Case Denta
    Case Is > 0
        X1 = (-Zb + Denta ^ (1 / 2)) / (2 * Za)
        X2 = (-Zb - Denta ^ (1 / 2)) / (2 * Za)
    Case 0
        X1 = -Zb / (2 * Za)
        X2 = -Zb / (2 * Za)
    Case Else
        PTB2 = "Phuong trinh vo nghiem"
        Exit Function
    End Select
    Select Case Zx
        Case 1: PTB2 = "X1=" & X1
        Case 2: PTB2 = "X2= " & X2
        Case Else: PTB2 = "X1= " & X1 & " // X2= " & X2
    End Select
End Function

Thân!
 
Upvote 0
ax^2+bx+c=0
D= b^2 - 4ac
Với nghiệm phức thì:
Khi D<0 thì có nghiệm phức: x1 = (-b/(2a)) + (-D)^(1/2)/2a * i
x2 = (-b/(2a)) - (-D)^(1/2)/2a * i
Với i^2 = -1
 
Upvote 0
Web KT

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

Back
Top Bottom