Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 比较工作表中的两行,并测试每行的唯一值和列中的输出_Windows_Vba_Excel - Fatal编程技术网

Windows 比较工作表中的两行,并测试每行的唯一值和列中的输出

Windows 比较工作表中的两行,并测试每行的唯一值和列中的输出,windows,vba,excel,Windows,Vba,Excel,我有一个工作表,它有两个不同值的列:患者ID(ID#)和研究所 我希望找到两列之间的唯一值,并在对应于每个单元格的不同列中输出为1(唯一)和0(不唯一) 我需要使用一个数组,因为我在每列中有10000条记录要测试 试验条件: 案例1:PatientID的价值(A1=“HC1”)转到机构价值(B2=“HG”)。这是一个独特的值,因为PatientID和Institute只出现一次。因此,输出值(C1=“1”) 案例2:PatientID值(A2=“HC1”)变为机构值(B2=“HG”)。这不是一个

我有一个工作表,它有两个不同值的列:患者ID(ID#)和研究所

我希望找到两列之间的唯一值,并在对应于每个单元格的不同列中输出为1(唯一)和0(不唯一)

我需要使用一个数组,因为我在每列中有10000条记录要测试

试验条件:

案例1:PatientID的价值(A1=“HC1”)转到机构价值(B2=“HG”)。这是一个独特的值,因为PatientID和Institute只出现一次。因此,输出值(C1=“1”)

案例2:PatientID值(A2=“HC1”)变为机构值(B2=“HG”)。这不是一个独特的现象;同一个病人又去了同一个研究所。因此,输出值(C2=“0”)

案例3:PatientID值(A3=“HC1”)变为机构值(B3=“RH”)。这是独一无二的;同一个病人去了不同的研究所。因此,输出值(C3=“1”)

案例4:PatientID值(A4=“HC2”)变为机构值(B4=“RH”)。这是独一无二的;不同的病人去不同的研究所。因此,输出值应为value(C4=“1”)

我需要VB代码来做同样的事情

目前我使用的是Excel 2010公式

=如果(总和产品($C$2:$C1442=C3)*($A$2:$A1442=A3))>1,0,1)

在哪里,, C列为机构,A列为患者

这需要大量的时间来计算。请帮忙


谢谢

您可以使用辅助列将两个单元格组合在一起,然后计算这些单元格是否唯一

结果

如果需要,可以隐藏C列


如果要使用宏进行相同的操作,可以按如下操作:

Sub TEST()
Set ExcelAppl = CreateObject("Excel.Application")
Set wb = ActiveWorkbook
Set ActiveRange = wb.Worksheets(1).UsedRange
RowCont = ActiveRange.Rows.Count
Dim dataArr() As Variant
ReDim dataArr(RowCont, 1)
For i = 0 To RowCont - 1
InputText = Cells(i + 1, 1).Value & Cells(i + 1, 2).Value
If CheckUnique(dataArr, InputText) = True Then
Cells(i + 1, 3).Value = 0
Else
Cells(i + 1, 3).Value = 1
dataArr(i, 0) = InputText
dataArr(i, 1) = i + 1 'store row number
End If
Next
End Sub

Function CheckUnique(dataArr, InputText)
Dim lb As Long, ub As Long, i As Long, result As Boolean
lb = LBound(dataArr)
ub = UBound(dataArr)
result = False
For i = lb To ub
If dataArr(i, 0) = InputText Then
result = True
Cells(i + 1, 3).Value = 0
Exit For
End If
Next i
CheckUnique = result
End Function
输出将是:


案例3和案例4不一样吗?对不起,输入错误。现在纠正它。谢谢你指出。谢谢你的代码。但是输出有一个错误,C1=0和C2=0,当它找到一个匹配项时,它将两个字段都置为0,而不是将一个字段置为1,另一个字段置为0。是的!我这样写代码:如果它在整个列中是唯一的,它将指定一个,否则为零。因为我从你的帖子中了解到,你想要检查唯一值。