在excel

时间:2016-01-19 19:09:52

标签: arrays excel vba excel-vba

我试图在excel中生成他们有关系的组合id_users。所以我使用这个示例代码给了我这个结果:

输入是数据透视表:

     ' id_row   id_users
         10      1
                 2
                 3
         66      4
                 11

这是我的输出

     'source target label
       1         2     10
       1         3     10
       2         3     10
       4         11    66

但它给了我这个结果:

       'source target label
       1         2     10
       1         3     10
       2         1     10
       2         3     10
       3         1     10
       3         2     10
       4         11    66
       11        4     66

如你所见,我也不想显示交换的行,如果它显示重复的行,那就没关系..但我不想显示交换的数据。如:1 2和2 1 它并不代表任何重复的信息,例如:a与b有关系,然后你看到b与a有关系..而且它只是重复的信息,我首先拥有它... 在我的代码中,它显示数据数组sq user_1与sqq user_2中的数据不相等,但我还要显示未在以前调用的数据 sq user_1:

            '
              'get the combinationsin the pivot table for this topic
    sq = Range(rTopic, rTopic.End(xlDown).Offset(-1)).Offset(, 1).Resize(, 2).SpecialCells(2, 1).Value

    'get the unique combinations of persons
    sUniq = " "
    For lUser_2 = 1 To UBound(sq, 1)
        If InStr(sUniq, " " & sq(lUser_2, 2) & " ") = 0 Then
            sUniq = sUniq & sq(lUser_2, 2) & " "
        End If
    Next

    sqq = Split(Trim(sUniq))


    'loop over user id's and generate combinations
    For lUser_1 = 1 To UBound(sq, 1)
        For lUser_2 = 0 To UBound(sqq)

            If sq(lUser_1, 2) & "" <> sqq(lUser_2) Then

                'we found a new combination, output to screen
                Range(sStartingCellOutput).Offset(lRowOffset, lColOffset).Resize(1, 3).Value = Array(sq(lUser_1, 2), sqq(lUser_2), rTopic.Value)

                 'increment the counter
                  lRowOffset = lRowOffset + 1
                  If lRowOffset >= Rows.count Then
                  lRowOffset = 0
                  lColOffset = lColOffset + 4
                 End If
            End If



        Next
    Next

我编辑它以在我的代码中解释更多..我是否需要一个小帮助?如果我的Q不清楚只是评论我...谢谢

1 个答案:

答案 0 :(得分:0)

您需要为正在检查的值添加另一个空格

If InStr(sUniq, " " & sq(lUser_2, 2) & " ") = 0 Then