1

假设,我有数据

列 1 列 2  
1 1000   
1 -2000  
1 3000  
2 2000  
2 -1000  
3 5000  
3 -4000  

我想像这样显示它

列 1 列 2 列 3  
1 1000 3000   
2 2000  
3 5000  

我只想从 column2 中取正值,其中 column1 具有相同的值(例如,对于 1 有 2 个正值。我想以上面显示的格式显示它们。)

如何使用手动方法(公式)或使用 VBA 来实现这一点?我编写了一个代码,它从 column1 中获取正值,其中 column1.value=1。但是如何遍历下一个值(即 2 和 3)

Sheets("Sheet1").Select
myvalue = Cells(2, 1).Value
MsgBox myvalue


Dim negativevalue(0 To 10) As Long
Dim colum As Integer
Dim row As Integer

colum = 1
row = 2
i = 0
While Cells(row, colum).Value = myvalue
If (Cells(row, 2).Value < 0) Then

MsgBox Cells(row, 2).Value
negativevalue(i) = Cells(row, 2).Value


End If
4

2 回答 2

2

可能有更短的方法,但这有效。选择所需的范围并运行以下宏:

Sub ProcessData()
    'Sort the data
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Selection.Cells(1, 1), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Selection
        .Header = xlNo
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    'Process data
    Dim cl As Object, r As Integer, c As Integer, cNum As Integer, cSt As Integer
    Dim first As Boolean, update As Boolean
    r = Selection.Cells(1, 1).Row - 1
    cNum = Selection.Cells(1, 2).Column + 2
    cSt = cNum + 1
    first = True
    update = False

    For Each cl In Selection.Cells.Columns(1).Cells
        If cl.Offset(0, 1).Value >= 0 Then
            update = False
            If first Then
                first = False
                update = True
            ElseIf cl.Value <> Cells(r, cNum).Value Then
                update = True
            End If
            If update Then
                r = r + 1
                c = cSt
                Cells(r, cNum).Value = cl.Value
            End If
            Cells(r, c).Value = cl.Offset(0, 1).Value
            c = c + 1
        End If
    Next
End Sub
于 2013-08-05T16:56:02.093 回答
2

这是针对您的问题的纯基于公式的方法。

需要两组公式,第一组用于创建来自第 1 列的不同值的不重复列表,第二组用于查找并将正值放入第 2 列。

创建不同列 1 值列表的公式放置在单元格 D2 中并向下复制该列。该公式对第 1 列值使用命名范围。如果您将其放在另一列中,请将 调整为$D1$D:D1您正在使用的列,并确保它指的是您放置公式的正上方的单元格。例如,如果将公式放在 cell 中C4,则公式中的列引用应该是$C$3:C3

Formula to create list of distinct values from column 1
Cell D2  =IFERROR(INDEX(Column1,MATCH(0,INDEX(COUNTIF($D$1:D1,Column1),
          0,0),0)),"-")

第 2 列查找是一个数组公式;在示例工作表中,它被输入到单元格 E2 中(使用Ctrl--组合键) ShiftEnter然后向下复制。

Array Formula to lookup and place column 2 values
Cell E2  =IFERROR(INDEX(Column2,1/LARGE(IFERROR(1/((Column1=$D2)*
          (Column2>=0)*ROW(INDIRECT("1:"&COUNTA(Column2)))),0),
          COLUMNS($E$2:E$2)),1),"-")

在此处输入图像描述

于 2013-08-06T04:21:41.010 回答