我有一列值经常显示为重复项。我需要基于第一列创建一个具有唯一值的新列,如下所示:
Column A Column B
a a
a b
b c
c
c
B列实际上将需要出现在同一工作簿中的另一张纸上,因此我认为它将需要使用sheet2!A1
样式格式。
我对Data / Filter菜单选项没有任何运气,因为这似乎只能在命令下起作用。每当在A列中输入新值时,我都需要B列自动更新。
Answers:
Totero的答案是正确的。该链接也非常有帮助。
基本上,您需要的公式是:
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,否则它将无法正常工作。
#N/A
sIFERROR(...,"")
并摆脱0
,即$A$2:$A$20
在示例中,如果您需要它是动态的,请使用OFFSET
在我的情况下,使用
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网站(链接已删除,导致死亡)
在已排序的列上,您也可以尝试以下方法:
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)),"")
在包含列表的工作表的工作表模块中:
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,””)
老实说,我遵循了这些例子,但它们根本没有用。在竭尽全力地使Excel正常工作之后,我最终要做的就是将我的专栏的全部内容复制到NotePad ++中,在那里我可以在几分钟之内找到一个简单的解决方案。看一下这一点: 在Notepad ++中删除重复的行
编辑:这是有关如何在TextFX中进行的简要概述:
插件->插件管理器->显示插件管理器->可用选项卡-> TextFX->安装
在NotePad ++中安装TextFX之后,然后选择要从中删除重复项的所有文本,然后确保检查:TextFX-> TextFX Tools->仅排序输出唯一行
然后单击“区分大小写的排序行”或“区分大小写的排序行”,它将执行唯一的排序。
发现这里有错误控制时提到上述公式
=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
。好处:
缺点 :
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);
});