'bien doi ma tran thanh ma tran cheo
Public dau As Integer
Public R As Range
Sub ThemMatran()
Dim refer As String
refer = "=" & ActiveSheet.Name & "!" & Selection.Address
tenmang = InputBox("Nhap ten cua ma tran?", "Dat ten cho ma tran")
ActiveWorkbook.Names.add Name:=tenmang, RefersTo:=refer
frmMain.lstMatran.AddItem tenmang
End Sub
Function capMatran(ten, Optional rows) As String
Set R = ActiveWorkbook.Names(ten).RefersToRange
If Not IsMissing(rows) Then
If rows = 1 Then
capMatran = R.rows.Count
Else
capMatran = R.Columns.Count
End If
Else
capMatran = R.rows.Count & "x" & R.Columns.Count
End If
End Function
Sub hoandoihang(A, h1, h2)
Set R = ActiveWorkbook.Names(A).RefersToRange
n = capMatran(A, 1): m = capMatran(A, 2)
Currow = R.rows.Count + R.Row: curcot = R.Column
dau = -dau
Cells(Currow + 1, curcot) = "Hoan doi dong " & h1 & " va dong " & h2 & ", dinh thuc co dau " & (dau)
R.Copy
Cells(Currow + 3, curcot).Select
ActiveSheet.Paste
Dim refer As String
refer = "=" & ActiveSheet.Name & "!" & Selection.Address
ActiveWorkbook.Names.add Name:=A, RefersTo:=refer
Set R = ActiveWorkbook.Names(A).RefersToRange
For j = 1 To m
tam = R.Cells(h1, j)
R.Cells(h1, j) = R.Cells(h2, j)
R.Cells(h2, j) = tam
Next
End Sub
Function timphantuso1(A) As String
Set R = ActiveWorkbook.Names(A).RefersToRange
n = capMatran(A, 1): m = capMatran(A, 2)
For i = 1 To n
For j = 1 To m
If R.Cells(i, j) = 1 Then timphantuso1 = i & "x" & j: Exit Function
Next
Next
End Function
Sub duaso1vedau(A)
tim1 = timphantuso1(A)
If tim1 <> "1x1" And tim1 <> "" Then
n = Left(tim1, InStr(1, tim1, "x") - 1)
m = Mid(tim1, Len(n) + 2)
Debug.Print n & m
If n <> "1" Then hoandoihang A, 1, Val(n)
If m <> "1" Then hoandoicot A, 1, Val(m)
End If
End Sub
Sub hoandoicot(A, c1, c2)
Set R = ActiveWorkbook.Names(A).RefersToRange
n = capMatran(A, 1): m = capMatran(A, 2)
Currow = R.rows.Count + R.Row: curcot = R.Column
dau = -dau
Cells(Currow + 1, curcot) = "Hoan doi cot " & c1 & " va cot " & c2 & ", dinh thuc co dau " & (dau)
R.Copy
Cells(Currow + 3, curcot).Select
ActiveSheet.Paste
Dim refer As String
refer = "=" & ActiveSheet.Name & "!" & Selection.Address
ActiveWorkbook.Names.add Name:=A, RefersTo:=refer
Set R = ActiveWorkbook.Names(A).RefersToRange
For i = 1 To n
tam = R.Cells(i, c1)
R.Cells(i, c1) = R.Cells(i, c2)
R.Cells(i, c2) = tam
Next
End Sub
Sub nhandong1vacong(A, k, d1, d2)
Set R = ActiveWorkbook.Names(A).RefersToRange
n = capMatran(A, 1): m = capMatran(A, 2)
Currow = R.rows.Count + R.Row: curcot = R.Column
Cells(Currow + 1, curcot) = "Nhan dong " & d1 & " voi " & k & " va cong voi dong " & d2 & ", co dinh thuc:"
R.Copy
Cells(Currow + 3, curcot).Select
ActiveSheet.Paste
Dim refer As String
refer = "=" & ActiveSheet.Name & "!" & Selection.Address
ActiveWorkbook.Names.add Name:=A, RefersTo:=refer
Set R = ActiveWorkbook.Names(A).RefersToRange
For j = 1 To m
R.Cells(d2, j) = R.Cells(d1, j) * k + R.Cells(d2, j)
Next
End Sub
Sub tes()
duavematrancheo "A"
End Sub
Sub duavematrancheo(A)
Dim matrangoc As Range
dau = 1
Set matrangoc = ActiveWorkbook.Names(A).RefersToRange
duaso1vedau A
Set R = ActiveWorkbook.Names(A).RefersToRange
n = capMatran(A, 1): m = capMatran(A, 2)
For j = 1 To m - 1
For i = j + 1 To n
If R.Cells(j, j) = 0 Then
t = timhangcoptkhac0(A, j, j)
If Val(t) > 0 Then
hoandoihang A, j, t
Else
Exit For
End If
End If
If R.Cells(i, j) * R.Cells(j, j) > 0 Then d = -1 Else d = 1
nhandong1vacong A, d * Abs(R.Cells(i, j)) / Abs(R.Cells(j, j)), j, i
Next
Next
Currow = R.rows.Count + R.Row: curcot = R.Column
kq = 1
For i = 1 To n
For j = 1 To m
If i = j Then kq = kq * R.Cells(i, j)
Next
Next
Cells(Currow + 1, curcot) = "Det(" & A & ")=" & kq * dau
On Error Resume Next
Cells(Currow + 2, curcot) = "Sai so: " & Round(Application.WorksheetFunction.MDeterm(matrangoc) - kq * dau, 5)
ActiveWorkbook.Names.add Name:=A, RefersTo:=matrangoc
End Sub
Function timhangcoptkhac0(A, h, c) As Byte
Set R = ActiveWorkbook.Names(A).RefersToRange
n = capMatran(A, 1): m = capMatran(A, 2)
For i = h To n
If R.Cells(i, c) <> 0 Then timhangcoptkhac0 = i: Exit Function
Next
End Function