根据列中的重复值对excel中的值进行分组
假设我有数据 Column1 Column2 1 1000 1 -2000 1 3000 2 2000 2 -1000 3 5000 3 -4000 第1栏第2栏 1 1000 1 -2000 1 3000 2 2000 2 -1000 3 5000 3 -4000 我想把它展示得像 Column1 Column2 Column3 1 1000 3000 2 2000 3 5000 第1栏第2栏第3栏 1 1000 3000 2 2000 3 5000 我只希望从第2列中获取正值,其中第1列具有相同的值(例如,对于第1列,有2个正值。我希望以上面所示的格式显示它们。) 如何使用手动方法(公式)或VBA实现这一点?? 我已经编写了一个代码,其中它从column1获取正值,column1.value=1。但是如何迭代下一个值(即2和3)根据列中的重复值对excel中的值进行分组,excel,vba,Excel,Vba,假设我有数据 Column1 Column2 1 1000 1 -2000 1 3000 2 2000 2 -1000 3 5000 3 -4000 第1栏第2栏 1 1000 1 -2000 1 3000 2 2
Sheets(“Sheet1”)。选择
myvalue=单元格(2,1)。值
MsgBox myvalue
变暗负片值(0到10)的长度为
作为整数的Dim column
将行设置为整数
柱=1
行=2
i=0
而单元格(行,列).Value=myvalue
如果(单元格(第2行)。值<0),则
MsgBox单元格(第2行).值
negativevalue(i)=单元格(第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
子进程数据()
“对数据进行排序
ActiveWorkbook.Worksheets(“Sheet1”).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(“Sheet1”).Sort.SortFields.Add Key:=Selection.Cells(1,1)_
SortOn:=xlSortOnValues,顺序:=XLASSENDING,数据选项:=xlSortNormal
使用ActiveWorkbook.Worksheets(“Sheet1”).Sort
.设置范围选择
.Header=xlNo
.方向=xlTopToBottom
.SortMethod=xl拼音
申请
以
“过程数据
Dim cl作为对象,r作为整数,c作为整数,cNum作为整数,cSt作为整数
首先将变暗为布尔值,然后更新为布尔值
r=选择。单元格(1,1)。行-1
cNum=选择。单元格(1,2)。列+2
cSt=cNum+1
第一个=正确
更新=错误
对于Selection.Cells.Columns(1.Cells)中的每个cl
如果cl.Offset(0,1).Value>=0,则
更新=错误
如果首先
第一个=错误
update=True
ElseIf cl.值单元格(r,cNum)。然后计算值
update=True
如果结束
如果更新,则
r=r+1
c=cSt
单元格(r,cNum).值=cl.值
如果结束
单元格(r,c).Value=cl.Offset(0,1).Value
c=c+1
如果结束
下一个
端接头
可能有更短的方法,但这是可行的。选择所需范围并运行以下宏:
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
子进程数据()
“对数据进行排序
ActiveWorkbook.Worksheets(“Sheet1”).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(“Sheet1”).Sort.SortFields.Add Key:=Selection.Cells(1,1)_
SortOn:=xlSortOnValues,顺序:=XLASSENDING,数据选项:=xlSortNormal
使用ActiveWorkbook.Worksheets(“Sheet1”).Sort
.设置范围选择
.Header=xlNo
.方向=xlTopToBottom
.SortMethod=xl拼音
申请
以
“过程数据
Dim cl作为对象,r作为整数,c作为整数,cNum作为整数,cSt作为整数
首先将变暗为布尔值,然后更新为布尔值
r=选择。单元格(1,1)。行-1
cNum=选择。单元格(1,2)。列+2
cSt=cNum+1
第一个=正确
更新=错误
对于Selection.Cells.Columns(1.Cells)中的每个cl
如果cl.Offset(0,1).Value>=0,则
更新=错误
如果首先
第一个=错误
update=True
ElseIf cl.值单元格(r,cNum)。然后计算值
update=True
如果结束
如果更新,则
r=r+1
c=cSt
单元格(r,cNum).值=cl.值
如果结束
单元格(r,c).Value=cl.Offset(0,1).Value
c=c+1
如果结束
下一个
端接头
以下是一种纯粹基于公式的方法来回答您的问题
需要两组公式,第一组用于创建第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),"-")
以下是一种纯粹基于公式的方法来回答您的问题 需要两组公式,第一组用于创建第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),"-")
您是否尝试过使用录制宏工具进行任何操作?你试过什么配方?您需要显示您尝试了什么,以便我们可以帮助您解决遇到的特定问题。使用筛选的Pivot表有什么问题