Ma trận trong VBA

Liên hệ QC

ndtdlhagiang

Thành viên mới
Tham gia
5/11/06
Bài viết
45
Được thích
11
Chào các cao thủ VBA, mình thấy rất có hứng thú với các hàm về ma trận trong excel như MINVERSE; MDETERM; MMULT Việc sử dụng chúng thì mình đã biết rồi. nhưng mình rất tò mò về cách mà người ta viết nên các hàm này. không biết các bạn có hứng thú không. Ai có code của các hàm này không cho mình xin một bản với
nếu có thể hãy post lên hoặc liên lạc với mình theo địa chỉ dt0913043815@yahoo.com
 
Lần chỉnh sửa cuối:
Upvote 0
Sao máy mình không vào được đường link trên nhỉ? mà bạn tìm hộ luôn đi.
Mình đang cần đoạn code về mấy hàm này lắm, nếu bạn có thì post lên cho mình đi. chứ mình cũng không có nhiều thời gian để tìm đâu. giúp thì giúp cho chót đi mừ!

Cám ơn nhiều nha, mình sẽ nghiên cứu tiếp. nhưng món này có vẻ chuối quá hà. đọc không hiểu mấy
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mình đã nghiên cứu rồi nhưng hổng hiểu gì cả, có ai thương tình tìm hiểu hộ mình một tý, mình vẫn không hiểu họ sử lý ra sao với công thức mảng. ví dụ như viết một công thức cong(mảng1, mảng2):
Thế thì khai báo biến như thế nào?
làm sao để đếm số hàng, số cột của hai mảng
cộng hàng 1 mảng một với k lần hàng 2 mảng 1
cộng hàng 1 mảng một với k lần hàng 2 mảng 2
.........
Các bàn giúo mình với
 
Upvote 0
Bạn hướng dẫn tiếp đi. Mình vẫn chưa hiểu lắm.........
cách thức để viết hàm nhân ma trận mình đã biết rồi... nhưng đó là ma trận số thôi, còn nếu là ma trận phức thì sao? bạn có biết làm không.
hồi âm sớm cho mình nhé.

à hà giang chưa co mận đâu bạn ạ. khi nào có mình sẽ gửi cho bạn.. bạn cho mình địa chỉ mới được chứ.
 
Upvote 0
ừ để mình coi sao đã nha. mà sao bạn viết nhanh thế,siiêu thật! mình dốt lắm nên phải tìm hiểu kỹ đã, nhưng mình nghĩ cái gì cứ chăm chỉ rồi sẽ biết đúng không.

Cách của bạn làm cũng hay đấy, nhưng để dùng nó mà nhân hai ma trận thì sẽ có vấn đề đấy. bạn thử viết hàm nhân hai ma trận mà xem nhé. mình đang viết thử nhưng vẫn chưa được. bạn chỉ mình cách gửi file lên nhé. có một số lỗi mà mình không hiểu được.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cách của bạn làm để dùng nó mà nhân hai ma trận thì sẽ có vấn đề đấy. bạn thử viết hàm nhân hai ma trận mà xem nhé. mình đang viết thử nhưng vẫn chưa được.
/(hoan viết làm gì vội! Phải từ đơn giản đến phức tạp được
bạn chỉ mình cách gửi file lên nhé. có một số lỗi mà mình không hiểu được.
Bạn phải đạt chuẩn (hình như là 50 bài) thì mới có quyền gởi file; Còn trong tình huống này của bạn:
1./ Thể hiện = lời ~ gì bạn muốn người # được truyền đạt sẽ tiếp thu được)
2./ Nhờ các Mod & SMod gởi lên giúp cho bạn (nhớ nhờ rõ là ấn cái file đó vô bài viết nào!)
mà sao bạn viết nhanh thế,siiêu thật! mình dốt lắm nên phải tìm hiểu kỹ đã, nhưng. . .
Mình ngâm cứu chuyện này mấy tháng rồi (cũng đúng khi nói rằng: từ khi có bài ( cái mà mình đã giới thiệu cho bạn ban đầu í)); Hôm nay có người đồng hành nên gửi lên cho &ui thôi!
 
Lần chỉnh sửa cuối:
Upvote 0
Mình cũng muốn dùng các hàm sẵn có trong excel lắm, nhưng cực chẳng đã mới phải viết hàm thôi. bởi vì muốn giải hệ phương trình phức thì dùng các hàm của excel là không thể. bạn giúp mình với nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Mình cũng muốn dùng các hàm sẵn trong excel, nhưng cực chẳng đã mới phải viết hàm thôi. bởi vì muốn giải hệ phương trình phức thì dùng các hàm của excel là không thể. bạn giúp mình với nhé
Ý đồ của bạn thật lớn đó; nhưng để giải được phải gỡ từng bước một: Ta liệt kê công cụ gì đã có nào:
1./ Các hàm trong excel & phương thức/ hàm Array trong VBA;
2./ Khoảng gần 47 hàm & Sub mà chúng ta được GE giới thiệu
Theo mình để đến mục tiêu cần biết kỹ ~ cái ta có
Sau đây mình xin giới thiệu 1 trong các hàm của $2 trên. Đó là Function ArrayAdd()
Mã:
[b]
Function ArrayAdd(Array0, Array9, Optional Add As Boolean = True)[/b]
    Dim ta1, ta2, array1Sub, array2Sub, taOut
    Dim NumRows1 As Long, NumRows2 As Long, NumColumns1 As Long, NumColumns2 As Long
    Dim Array1Base, iJ As Long
 [color="blue"]   'For later assignment of appropriate base to output array[/color]
    array1Sub = Array0:                             Array1Base = LBound(array1Sub)
    'To convert an input range to a Variant() array
    ta1 = Array0:                                       ta2 = Array9
[color="blue"]    'Assign to variables for comparing size of input arrays[/color]
    NumRows1 = ArrayCount(ColumnVector(ta1, 1)):              NumRows2 = ArrayCount(ColumnVector(ta2, 1))
    NumColumns1 = ArrayCount(RowVector(ta1, 1)):              NumColumns2 = ArrayCount(RowVector(ta2, 1))
[color="blue"]  'If input arrays are the same size then exit function[/color] 
    If Not (NumColumns1 = NumColumns2 And NumRows1 = NumRows2) Then
        MsgBox "This function accepts only equal sized arrays."
        Exit Function
    End If
[color="blue"]     'Convert to one-dimensional arrays for ease of manipulation[/color]
    ta1 = MakeArray(ta1, 1):                                                        ta2 = MakeArray(ta2, 1)
    'Establish appropriate bounds for the output array
    ReDim taOut(1 To UBound(ta1))
[color="blue"]     'If addition is indicated by the optional argument then add the respective elements[/color]
    If Add Then                                            ' <==
        For iJ = 1 To UBound(ta1)
            taOut(iJ) = ta1(iJ) + ta2(iJ)
        Next iJ
[color="blue"]     'Otherwise subtract them [/color]
    Else
       For iJ = 1 To UBound(ta1)
            taOut(iJ) = ta1(iJ) - ta2(iJ)
        Next iJ
    End If
[color="blue"]   'Restore the output array to its original shape[/color]
    taOut = ArrayReshape(taOut, NumRows1, NumColumns1)
[color="blue"] 'Assign to the output array the array base of  the first input array[/color]
    taOut = ConvertBase(taOut, LBound(array1Sub))
    ArrayAdd = taOut [color="blue"]   'Return the array of added or subtracted elements[/color]
[b]End Function
[color="red"]Chú ý: Hai hàm ArrayReshape() & ConvertBase() là hai trong 47 hàm tại mục 2[/color][/b]
Mình thấy hàm này dùng để cộng/trừ hai ma trận
{=ArrayAdd(A9:B10,A13:B14,FALSE)} & =ArrayAdd(A13:B14,A9:B10,-1)
(các ô liệt kê trong hàm đều chứa số trị)
 
Lần chỉnh sửa cuối:
Upvote 0
mình hôm nay phải đi làm ca nên không nghiên cứu được. mạng ở cơ quan sập rùi chưa sửa được. tối mình mới nghiên cứu được. bạn thử dùng hàm trên để viết hàm cộng hai ma trận phức đi xem có được không. công thức liên quan đến số phức mình đã viết lên rồi đấy, bạn thử ứng dụng xem có được không? chúng mình cùng làm nhé. à nhờ bạn tìm hộ lỗi trong hàm matran2(mang1,mang2) cho mình nhé. nếu mình để dòng cuối cùng là matran2= mang3(i,j) thì sẽ tính đựơc kết quả của phần tử C(i,j) của ma trận tích. nhưng nếu để matran2= mang3() hoặc matran2= mang3 thì chỉ ra kết quả bằng 0. bạn sửa lỗi cho mình với nhé.

Cám ơn bạn nhé, mình sẽ thử cách của bạn coi xem thế nào đã. chắc mính sẽ phải hỏi bạn nhiều nữa, bạn giỏi quá.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Trả lời cho câu hỏi của bạn bên WEBKETOAN.COM/

Đoạn mã này sẽ nhận thêm địa chỉ vùng dữ liệu & đem so sách với vùng bạn đã chọn trước (Selection); Kết quả thể hiện tại vùng chung có ô trên trái nhất là 'O2'; mà trong vùng đó sẽ hiện giữ liệu các ô trùng số liệu
Mã:
[b]Sub TwoArray()[/b]
    Dim Rng0 As Range, Rng2() As Variant
    Dim StrC As String
    
    StrC = InputBox("HAY NHAP MANG THU 2:")
    Set Rng0 = Range(StrC)
    Rng2 = SArray(Selection, Rng0)
    StrC = "O2:" & Chr(78 + UBound(Rng2, 2)) & CStr(1 + UBound(Rng2))
    Range(StrC) = Rng2
    Range(StrC).Interior.ColorIndex = 35
[b]End Sub[/b]

Mã:
[b]Function SArray(Rng1 As Range, Rng2 As Range)[/b]
On Error Resume Next
Dim iHang1 As Long, iCot1 As Integer, iHang2 As Long, iCot2 As Integer
Dim iRow As Long, iCol As Integer
Dim iJ As Long, iZ As Integer

Dim ArrayT() As Variant, ArrayS() As Variant
 ArrayT = Rng1.Value:             ArrayS = Rng2.Value

iHang1 = UBound(ArrayT):                       iCot1 = UBound(ArrayT, 2)
iHang2 = UBound(ArrayS):                       iCot2 = UBound(ArrayS, 2)
iRow = IIf(iHang1 > iHang2, iHang2, iHang1)
iCol = IIf(iCot1 > iCot2, iCot2, iCot1)
ReDim ArrayD(1 To iRow, 1 To iCol)
For iJ = 1 To iRow
    For iZ = 1 To iCol
        If ArrayT(iJ, iZ) = ArrayS(iJ, iZ) Then ArrayD(iJ, iZ) = ArrayT(iJ, iZ)
Next iZ, iJ
SArray = ArrayD
[b]End Function [/b]
 
Lần chỉnh sửa cuối:
Upvote 0
Số phức được ứng dụng nhiều trong kỹ thuật (giải các bài toán về mạch điện...).
Số phức trong Excel được viết dưới dạng:
z = x + yi hoặc x + yj (Các ô được định dạng là Text).
trong đó: x là phần thực, y là phần ảo.

Trong MS Excel cung cấp một số hàm cơ bản về số phức:

- Hàm lấy phần thực của số phức inumber: ImReal
- Hàm lấy phần ảo của số phức inumber: Imaginary
- Hàm lấy số phức ngược: ImConjugate
- Hàm cộng: ImSum
- Hàm trừ: ImSub
- Hàm nhân: ImProduct
- Hàm chia: ImDiv
- Hàm trị tuyệt đối: ImABS
- Hàm căn bậc 2: ImSQRT
- Hàm luỹ thừa: IMPOWER
- Hàm e luỹ thừa: IMEXP
- Hàm sin số phức: ImSin
- Hàm Cosin số phức: IMCOS
- Hàm Logarit: IMLN
- Hàm Logarit cơ số 10: IMLOG10

To ndtdlhagiang: vbmenu_register("postmenu_5263", true);
Mình cũng muốn dùng các hàm sẵn có trong excel lắm, nhưng cực chẳng đã mới phải viết hàm thôi. bởi vì muốn giải hệ phương trình phức thì dùng các hàm của excel là không thể. bạn giúp mình với nhé
Mình nghĩ dựa vào các hàm tính toán số phức và một số hàm khác về ma trận (MInverse, MMult, Index...) là bạn có thể giải được hệ phương trình bằng số phức.
 

File đính kèm

  • Ham Excel ve so phuc.doc
    50.5 KB · Đọc: 49
Lần chỉnh sửa cuối:
Upvote 0
To N&Son:
/(/ếu đúng là như vầy:
ndtdlhagiang đã viết:
Mình đã nghiên cứu rồi nhưng hổng hiểu gì cả, có ai thương tình tìm hiểu hộ mình một tý, mình vẫn không hiểu họ sử lý ra sao với công thức mảng. ví dụ như viết một công thức cong(mảng1, mảng2):
Thế thì khai báo biến như thế nào?
làm sao để đếm số hàng, số cột của hai mảng
cộng hàng 1 mảng một với k lần hàng 2 mảng 1
cộng hàng 1 mảng một với k lần hàng 2 mảng 2
.........
Các bàn giúo mình với
Thì ma trận &ới số phức đối với [Hà giang] là quá ư xa xỉ!
Theo mình HàGiang nên từng bước thôi, vài bữa sẽ đến thiên đàng! NVSon đồng ý ?
To NDTDHaGiang: Qua các VD mình gởi lên, chắc giờ bạn có thể thực thi các vần đề liệt kê này rồi chứ zì?!
Thêm một VD cho bạn
Mã:
[b]Sub SortArray()[/b]
Dim MyArray(12) As String:  Dim StrC As String
Dim lLoop As Long, lLoop2 As Long

    MyArray(0) = "Con Giap"
    For lLoop = 1 To 12
        MyArray(lLoop) = Choose(lLoop, "Ti", "Suu", "Dan", "Mao", "Thin",  _
             "Ty", "Ngo", "Mui",  "Than", "Dau", "Tuat", "Hoi")
    Next lLoop
[color="Blue"]    'Output array[/color]
    Range("A1:A" & UBound(MyArray) + 1) = WorksheetFunction.Transpose(MyArray)
[color="Blue"]  'Sort array &  Output sorted array[/color]
    For lLoop = 1 To UBound(MyArray)
       For lLoop2 = lLoop To UBound(MyArray)
            If UCase(MyArray(lLoop2)) < UCase(MyArray(lLoop)) Then
                StrC = MyArray(lLoop)
                MyArray(lLoop) = MyArray(lLoop2)
                MyArray(lLoop2) = StrC
            End If
    Next lLoop2, lLoop
    Range("B1:B" & UBound(MyArray) + 1) = WorksheetFunction.Transpose(MyArray)
[b]End Sub [/b]
 
Lần chỉnh sửa cuối:
Upvote 0
Có lẽ đối với mình đúng là thế thật, mình còn phải học hỏi o các bạn rất nhiều nữa. các hàm đối với số phức thì mình đã biết và tìm hiểu rồi, mình còn có thể viết được thêm mấy hàm đó theo ý mình rồi, chỉ có cái hàm tính nghịch đảo ma trận là minh chưa viết được thôi.
 
Upvote 0
Web KT
Back
Top Bottom