我有一列经常显示为重复值的值。我需要根据第一列创建一个具有唯一值的新列,如下所示:
Column A Column B
a a
a b
b c
c
c
这个 B 列实际上需要出现在同一个工作簿中的不同工作表上,所以我认为它需要使用sheet2!A1
样式格式。
我对数据/过滤器菜单选项没有任何运气,因为这似乎只适用于命令。每当在 A 列中输入新值时,我都需要 B 列自动更新。
我有一列经常显示为重复值的值。我需要根据第一列创建一个具有唯一值的新列,如下所示:
Column A Column B
a a
a b
b c
c
c
这个 B 列实际上需要出现在同一个工作簿中的不同工作表上,所以我认为它需要使用sheet2!A1
样式格式。
我对数据/过滤器菜单选项没有任何运气,因为这似乎只适用于命令。每当在 A 列中输入新值时,我都需要 B 列自动更新。
托特罗的回答是正确的。该链接也很有帮助。
基本上你需要的公式是:
B2=INDEX($A$2:$A$20, MATCH(0, COUNTIF($B$1:B1, $A$2:$A$20), 0))
然后按ctrl+ shift+ enter(否则使用数组公式将不起作用)。
这里要记住两件重要的事情:完整的列表在单元格中A2:A20
,然后这个公式必须粘贴到单元格中B2
(不是B1
因为这会给你循环引用)。其次,这是一个数组公式,所以你需要按ctrl++shift否则enter它将无法正常工作。
这里有一个很好的指南来说明如何做到这一点。
基本上类似于:
=INDEX(Sheet1!$A$1:$A$20, MATCH(0, COUNTIF($B$1:B1,Sheet!$A$1:$A$20), 0))
在我的情况下,excel在使用公式时被冻结
B2=INDEX($A$2:$A$20, MATCH(0, COUNTIF($B$1:B1, $A$2:$A$20), 0))
因为有很多行(10000)。所以我以另一种方式做了,如下所示。
我已将原始列表复制到第二列,然后使用 Excel 的“删除重复项”功能,我可以找到唯一值列表。
复制自 Microsoft Office 网站:
Select all the rows, including the column headers, in the list
你想过滤。
单击区域左上角的单元格,然后拖动到右下角的单元格。
On the Data menu, point to Filter, and then click Advanced Filter. In the Advanced Filter dialog box, click Filter the list, in place. Select the Unique records only check box, and then click OK.
显示过滤的列表并隐藏重复的行。
On the Edit menu, click Office Clipboard.
将显示剪贴板任务窗格。
Make sure the filtered list is still selected, and then click Copy Copy button.
过滤后的列表以边界轮廓突出显示,所选内容显示为剪贴板顶部的 > > 项目。
On the Data menu, point to Filter, and then click Show All.
重新显示原始列表。
Press the DELETE key.
原始列表被删除。
In the Clipboard, click on the filtered list item.
过滤后的列表显示在与原始列表相同的位置。
来源:Microsoft Office 网站(链接已删除,导致死机)
在sorted column 上,你也可以试试这个想法:
B2=A2
B3=IFERROR(INDEX(A:A,MATCH(B2,A:A,1)+1),"")
B3可以粘贴下来。在最后一个唯一匹配之后,结果为 0。如果这是不需要的,请放置一些 IF 语句以排除它。
编辑:
比 IF 语句更容易,至少对于文本值:
B3=IFERROR(T(INDEX(A:A,MATCH(B2,A:A,1)+1)),"")
从列中删除重复项
在 B 列仍处于选中状态时,在公式输入框中,输入
=IF(TRIM(A1)=TRIM(A2),"",TRIM(A1))
在 B 列仍处于选中状态时,选择 Edit -> Fill -> Down(在较新的版本中,只需选择单元格 B1 并拉下外框以在列中一直向下展开)
注意:如果 B 列在另一张纸上,您可以使用 Sheet1!A1 和 Sheet1!A2。
在包含列表的工作表的工作表模块中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDest As Range
If Not Intersect(Target, Me.Columns(1)) Is Nothing Then
Set rngDest = ThisWorkbook.Sheets("Sheet2").Range("A1")
Me.Range(Me.Range("A2"), Me.Cells(Rows.Count, 1).End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, CopyToRange:=rngDest, Unique:=True
End If
End Sub
我有一个 A2:A8 范围内的颜色名称列表,在 BI 列中想要提取一个不同的颜色名称列表。
请按照以下给定步骤操作:
=IF(COUNTIF(A$2:A2,A2)=1,A2,””)
=SORT(UNIQUE(A:A))
如果您想在列中列出唯一值,则上述公式效果最佳。
因此,对于此任务,首先按从 A 到 Z 或 Z 到 A 的顺序对数据进行排序,然后您可以使用一个简单的公式,如下所述:
=IF(A2=A3, "Duplicate", "Not Duplicate")
上面的公式表明,如果 A2 列的数据(A 是列,2 是行号)与 A3 相似(A 是列,3 是行号),那么它将打印 Duplicate,否则将打印 Not Duplicate。
让我们考虑一个示例,A 列包含电子邮件地址,其中一些是重复的,因此在第 2 列中,我使用了上述公式,结果显示我有 2 个重复的单元格,其中一个是第 2 行和第 6 行。
一个你得到重复的数据只是把过滤器放在你的工作表上,只显示重复的数据并删除所有不必要的数据。
老实说,我按照这些示例进行了发球,但它们根本不起作用。在毫无意义地试图让 Excel 工作之后,我最终做的只是将我的列的全部内容复制到 NotePad++,我能够在几分钟内找到一个简单的解决方案。看看这个: Removing duplicate rows in Notepad++
编辑:以下是如何在 TextFX 中执行此操作的简要概述:
插件 -> 插件管理器 -> 显示插件管理器 -> 可用选项卡 -> TextFX -> 安装
在 NotePad++ 中安装 TextFX 后,选择所有要从中删除重复的文本,然后确保检查:TextFX -> TextFX Tools -> Sort output only UNIQUE lines
然后单击“排序行区分大小写”或“排序行不区分大小写”,它将执行唯一排序。
在这里找到上面提到的带有错误控制的公式
=IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($D$1:D1, $B$2:$B$9), 0)),"")
其中:(B2:B9 是要提取唯一值的列数据,D1 是公式所在的上述单元格)
您所要做的就是: 转到“数据”选项卡 在“排序和过滤”中选择高级 在操作中选择:如果需要新列表,请复制到另一个位置 - 复制到任何位置 在列表范围内选择您要删除记录的列表。最重要的是检查:只有唯一的记录。
自 Excel 2016 以来,另一种方法是使用 Power Query。
如何:
Data
> From a table or a range
,Remove duplicates
,Close and load
,选择你想要的结果,你就完成了,像这样。Refresh
。好处 :
缺点 :
现代方法是考虑信息列来自 Web 服务(如 OData 源)的情况。如果您需要从具有列复制值的大量数据中生成过滤器选择字段,请考虑以下代码:
var CatalogURL = getweb(currenturl)
+"/_api/web/lists/getbytitle('Site%20Inventory%20and%20Assets')/items?$select=Expense_x0020_Type&$orderby=Expense_x0020_Type";
/* the column that is replicated, is ordered by <column_name> */
OData.read(CatalogURL,
function(data,request){
var myhtml ="";
var myValue ="";
for(var i = 0; i < data.results.length; i++)
{
myValue = data.results[i].Expense_x0020_Type;
if(i == 0)
{
myhtml += "<option value='"+myValue+"'>"+myValue+"</option>";
}
else
if(myValue != data.results[i-1].Expense_x0020_Type)
{
myhtml += "<option value='"+myValue+"'>"+myValue+"</option>";
}
else
{
}
}
$("#mySelect1").append(myhtml);
});