我有一列值通常显示为重复值。我需要根据第一列创建一个具有唯一值的新列,如下所示:
Column A Column B
a a
a b
b c
c
c
此B列实际上需要出现在同一工作簿中的不同工作表上,因此我假设它需要使用sheet2!A1
样式格式。
我对数据/过滤器菜单选项没有任何好运,因为这似乎只适用于命令。每当在A列中输入新值时,我都需要B列自动更新。
答案 0 :(得分:62)
托特罗的回答是正确的。该链接也非常有用。
基本上你需要的公式是:
B2=INDEX($A$2:$A$20, MATCH(0, COUNTIF($B$1:B1, $A$2:$A$20), 0))
然后按 ctrl + shift + 输入(或使用数组公式无效)。
这里要记住两件重要的事情:完整列表位于单元格A2:A20
中,然后必须将此公式粘贴到单元格B2
中(不是B1
,因为它会给你循环参考)。
其次这是一个数组公式,所以你需要按 ctrl + shift + 输入,否则它将无法正常工作。
答案 1 :(得分:21)
有一个很好的指导如何执行此操作here。
基本上类似于:
=INDEX(Sheet1!$A$1:$A$20, MATCH(0, COUNTIF($B$1:B1,Sheet!$A$1:$A$20), 0))
答案 2 :(得分:10)
在我的情况下,使用
的公式时,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 Website(链接已删除,导致死机)
答案 3 :(得分:5)
在 排序列 上,您也可以尝试这个想法:
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)),"")
答案 4 :(得分:5)
删除列中的重复项
当列B仍处于选中状态时,在公式输入框中输入
=IF(TRIM(A1)=TRIM(A2),"",TRIM(A1))
当列B仍处于选中状态时,选择编辑 - >填充 - >向下(在较新版本中,只需选择单元格B1并向下拉外框以在列中向下展开)
注意 :如果B列在另一张纸上,您可以执行Sheet1!A1和Sheet1!A2。
答案 5 :(得分:2)
在包含列表的工作表的工作表模块中:
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
答案 6 :(得分:2)
我在A2范围内有一个颜色名称列表:A8,在B栏中我想提取一个不同的颜色名称列表。
按照以下步骤操作:
=IF(COUNTIF(A$2:A2,A2)=1,A2,””)
答案 7 :(得分:0)
因此,对于此任务首先按照从A到Z或Z到A的顺序对数据进行排序,然后您可以使用如下所述的一个简单公式:
=IF(A2=A3, "Duplicate", "Not Duplicate")
上述公式表明,如果A2列数据(A为列,2为行号)与A3类似(A为列,3为行号)则打印复制,否则将打印不复制。
让我们考虑一个例子,A列包含电子邮件地址,其中一些是重复的,所以在第2列中,我使用了上述公式,在结果中显示了2个重复单元格,一个是第2行和第6行。
您获得重复数据只需将过滤器放在工作表上,只显示重复数据并删除所有不必要的数据。
答案 8 :(得分:0)
老实说,我将这些例子用于发球台,他们根本没用。在无意义地试图让Excel工作之后我最终做的就是将我的专栏的全部内容复制到NotePad ++,在那里我能够在几分钟内找到一个简单的解决方案。看看这个:Removing duplicate rows in Notepad++
编辑:以下是TextFX中如何操作的简要概述:
插件 - >插件管理器 - >显示插件管理器 - >可用标签 - > TextFX - >安装
在NotePad ++中安装TextFX后,选择要从中删除重复项的所有文本,然后确保检查:TextFX - > TextFX工具 - >排序输出只有UNIQUE行
然后单击“排序区分大小写”或“排序行不区分大小写”,它将执行唯一排序。
答案 9 :(得分:0)
使用错误控制
查找上面提到的here公式=IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($D$1:D1, $B$2:$B$9), 0)),"")
其中:(B2:B9是要提取唯一值的列数据,D1是您的公式所在的上述单元格)
答案 10 :(得分:0)
您所要做的就是: 转到数据选项卡 在Sort& amp;过滤 在操作中选择:如果需要新列表,请复制到另一个位置 - 复制到任何位置 在列表范围中,选择要获取记录的列表。 最重要的是检查: 仅限唯一记录。
答案 11 :(得分:0)
=SORT(UNIQUE(A:A))
如果要在列中列出唯一值,则上述公式最有效。
答案 12 :(得分:0)
自Excel 2016起,另一种方法是使用Power Query。
方法:
Data
> From a table or a range
,Remove duplicates
,Close and load
,选择结果的位置,然后完成like this。Refresh
。好处:
缺点:
答案 13 :(得分:-6)
MODERN方法是考虑信息列来自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);
});