在我的Excel工作表中,我有类似的内容:
1 2 3
John Paul Mike
1 John 0 1 1
2 Paul 1 0
3 Mike 1 0
这类似于对称矩阵。请注意:
每个人都有一个ID;
为简化起见,我将值设置为1,但它们可以从1开始 到20. 0将始终为0。还有一些空白区域。
我需要的是一个遍历“matrix”的宏,并以下列格式将值输出到另一个工作表中:
From To Strenght
1 2 1
1 3 1
2 1 1
3 1 1
这是我到目前为止所做的,但是没有用,因为它返回错误“对象是必需的”,指向strenghts
。
Dim i As Integer, j As Integer, strenghts As Integer
Set currentCell = Worksheets("Raw_Relationships").Cells(3, 3)
For i = 1 To 145
For j = 1 To 145
If currentCell <> "" Then
Set currentCell = Worksheets("Raw_Relationships").Cells(i, j).Offset(2, 3)
Set strenghts = Worksheets("Raw_Relationships").Cells(i, j).Offset(2, 2).Value
Set Worksheets("Gephi_Data").Cells(i, 1).Offset(150, 0).Value = i
Set Worksheets("Gephi_Data").Cells(i, 2).Offset(150, 0).Value = j
Set Worksheets("Gephi_Data").Cells(i, 3).Offset(150, 0).Value = strenghts
End If
Next j
Next i
有关如何执行此操作的任何提示?
答案 0 :(得分:2)
有很多方法可以达到你想要的效果。这是你想要的一个非常基本的例子。
假设您的工作表看起来像这样
使用此代码。我已经对代码进行了评论,因此您不应该在理解它时遇到问题。如果你这样做,那么就问:)
<强>代码强>
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim i As Long, j As Long
Dim rw As Long, col As Long
'~~> Change this to the relevant sheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'~~> This is where the output will be generated
rw = 2: col = 8
With ws
'~~> Create Headers of Output
.Cells(1, col).Value = "From"
.Cells(1, col + 1).Value = "To"
.Cells(1, col + 2).Value = "Strength"
'~~> Looping through rows
For i = 3 To 5
'~~> Looping through columns
For j = 3 To 5
'~~> Check if the cell is > 0
If .Cells(i, j).Value > 0 Then
'~~> Write the `From` column
.Cells(rw, col).Value = .Cells(i, 1).Value
'~~> Write the `To` Column
.Cells(rw, col + 1).Value = .Cells(1, j).Value
'~~> Write the `Strength` Column
.Cells(rw, col + 2).Value = .Cells(i, j).Value
rw = rw + 1
End If
Next j
Next i
End With
End Sub
<强>输出强>
我在Col H
之后生成输出。适用时更改。
答案 1 :(得分:1)
摆脱Set
中的Set strenghts = ...
。只需写下strenghts = ...
即可。 Set
仅用于设置对象的引用。 strenghts
不是对象,它是一个数值。
另外,我不确定strenghts
中的拼写是否是故意的,但通常拼写为“强烈 s”。