如何浏览范围并使用值填充另一个工作表的单元格?

时间:2013-12-09 04:13:42

标签: excel vba excel-vba

在我的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

有关如何执行此操作的任何提示?

2 个答案:

答案 0 :(得分:2)

有很多方法可以达到你想要的效果。这是你想要的一个非常基本的例子。

假设您的工作表看起来像这样

enter image description here

使用此代码。我已经对代码进行了评论,因此您不应该在理解它时遇到问题。如果你这样做,那么就问:)

<强>代码

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之后生成输出。适用时更改。

enter image description here

答案 1 :(得分:1)

摆脱Set中的Set strenghts = ...。只需写下strenghts = ...即可。 Set仅用于设置对象的引用。 strenghts不是对象,它是一个数值。

另外,我不确定strenghts中的拼写是否是故意的,但通常拼写为“强烈 s”。