假设我有数据
Column1 Column2 1 1000 1 -2000 1 3000 2 2000 2 -1000 3 5000 3 -4000
我希望将其显示为
Column1 Column2 Column3 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
答案 0 :(得分: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
答案 1 :(得分:2)
以下是针对您的问题的基于公式的纯方法。
需要两组公式,第一组用于创建第1列中不重复值的非重复列表,第二组用于查找并将正值放在第2列中。
创建不同列1值列表的公式放在单元格D2中并向下复制到列中。该公式使用命名范围作为列1值。如果您将其放在另一列中,请将$D1$D:D1
调整为您正在使用的列,并确保它指的是您放置公式的位置上方的单元格。例如,如果您将公式放在单元格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 - Shift - Enter 组合键),然后向下和向下复制。
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),"-")