如何使用Excel VBA创build身份matrix?

我使用这个子例程来创build大小为N的单位matrix

Sub IdMatrix() Dim i As Integer, j As Integer, N As Integer N = 5 For i = 1 To N For j = 1 To N If i = j Then Cells(i, j) = 1 Else Cells(i, j) = 0 End If Next j Next i End Sub 

有没有更好的办法? 简单的一个也许?

尝试这个

 Sub IdMatrix1() Dim N As Long, i As Long N = 5: Range("A1").Resize(N, N) = 0 For i = 0 To N - 1 Range("A1").Offset(i, i) = 1 Next End Sub 

这是另一种奇怪的方式来创build一个身份matrix

 Sub IdMatrix2() Dim i As Long, N As Long N = 5: Range("A1").Resize(N, N) = 0 For Each cell In Range("A1").Resize(N, N) i = i + 1: cell(i) = 1: If i > N - 1 Then Exit For Next End Sub 

为了获得最好的性能,请使用iDevlop的答案启发这个代码

 Const N = 5 'Put this constant on top of code editor Sub IdMatrix3() Dim IdMx(1 To N, 1 To N) As Long, i As Long For i = 1 To N: IdMx(i, i) = 1: Next Cells(1,1).Resize(N, N) = IdMx End Sub 

从VBA访问工作表很昂贵。 在数组中创build结果应该是更快的:

 Sub idMatrix() Dim n As Integer, i As Integer, a() As Integer n = 5 ReDim a(1 To n, 1 To n) For i = 1 To n a(i, i) = 1 Next i Range("a1").Resize(n, n) = a End Sub 

请注意,定义一个()作为Integer启动它与零(我们可以是零)

为了得到一个没有循环的快速子,只需使用如下所示:

 Sub test() Dim N As Long N = 5 With [A1].Resize(N, N) '<- do not change this A1 [A1].Resize(N, N).Value2 = Evaluate("IF(ROW(" & .Address & ")=COLUMN(" & .Address & "),1,0)") End With End Sub 

实际上,有一个内置的function, MUNIT 。 只需select你想要的NxN单元格,input=MUNIT(dimension) ,然后按CTRL+Shift+Enter 。 也可以在第一个单元格中input公式,然后按F2 ,selectNxN单元格,然后按CTRL+Shift+Enter

PS。 我知道OP可能不会看到这个,但也许别人做。