Excel 为什么我的代码找不到正确的单元格并识别重复的单元格?

Excel 为什么我的代码找不到正确的单元格并识别重复的单元格?,excel,vba,Excel,Vba,我的代码与找到正确的单元格并将它们输入到正确的位置有关。但它的目的是识别重复项,因此不会将重复项放入。但由于某种原因,它不起作用。下面是代码 Dim单元格作为范围 将子任务设置为工作表 Set SubTaskWs=ActiveWorkbook.Worksheets(“子任务”) 变暗最后一行1的长度 Lastrow1=SubTaskWs.Range(“H”和Rows.Count).End(xlUp).Row 暗淡的最后一行2一样长 将ws设置为工作表 i=0 对于子任务范围(“H4:H”&La

我的代码与找到正确的单元格并将它们输入到正确的位置有关。但它的目的是识别重复项,因此不会将重复项放入。但由于某种原因,它不起作用。下面是代码

Dim单元格作为范围
将子任务设置为工作表
Set SubTaskWs=ActiveWorkbook.Worksheets(“子任务”)
变暗最后一行1的长度
Lastrow1=SubTaskWs.Range(“H”和Rows.Count).End(xlUp).Row
暗淡的最后一行2一样长
将ws设置为工作表
i=0
对于子任务范围(“H4:H”&Lastrow1”)中的每个单元格,在子任务表中查找任务所有者,然后清除员工工作表中以前的任务
对于每个ws-In表单
如果SubTaskWs.Cells(cell.Row,“H”)=ws.Name,而SubTaskWs.Cells(cell.Row,“B”)ws.Cells(cell.Row,“A”)则
Lastrow2=ws.Range(“A”&Rows.Count).End(xlUp).Row+1
ws,“A”和Lastrow2上方的复制格式
ws.Range(“A”&Lastrow2.value=SubTaskWs.Cells(cell.Row,2)
ws.Range(“B”和Lastrow2.value=SubTaskWs.Cells(cell.Row,3)
如果结束
下一个ws
下一个细胞

我相信,使用Find方法查看工作表是否包含指定的任务名称,如果未找到,则添加它,以下操作将达到您预期的结果

我还更新了一些范围,以匹配问题附带的图像,
如果SubTaskWs.Cells(cell.Row,“C”)=ws.Name,那么
,因为工作表名称似乎实际位于C列(而不是H列),也更改为在相应工作表中的B列中查找B列(任务名称),你在哪里寻找一个对B

Sub Process()
Dim cell As Range
Dim Lastrow1 As Long, Lastrow2 As Long
Dim ws As Worksheet
Dim SubTaskWs As Worksheet: Set SubTaskWs = ThisWorkbook.Worksheets("SubTasks")

Lastrow1 = SubTaskWs.Range("C" & Rows.Count).End(xlUp).Row

For Each cell In SubTaskWs.Range("C2:C" & Lastrow1) ' Find task owners in sub tasks sheet and then clear previous tasks within employee sheet
    For Each ws In ThisWorkbook.Worksheets
        If SubTaskWs.Cells(cell.Row, "C") = ws.Name Then
            Set FoundTaksName = ws.Range("B:B").Find(What:=SubTaskWs.Cells(cell.Row, "B"), LookAt:=xlWhole)
            If FoundTaksName Is Nothing Then
            'not found, so add
                Lastrow2 = ws.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
                ws.Range("A" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "A")
                ws.Range("B" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "B")
            Else
            'found
            End If
        End If
    Next ws
Next cell
End Sub
更新:

如果希望能够在单元格中列出多个工作表名称,可以通过使用InStr函数查看工作表名称是否出现在给定单元格的内容中,然后进行相应的处理来实现,例如:

Sub Process()
Dim cell As Range
Dim Lastrow1 As Long, Lastrow2 As Long
Dim ws As Worksheet
Dim SubTaskWs As Worksheet: Set SubTaskWs = ThisWorkbook.Worksheets("SubTasks")

Lastrow1 = SubTaskWs.Range("C" & Rows.Count).End(xlUp).Row

For Each cell In SubTaskWs.Range("C2:C" & Lastrow1) ' Find task owners in sub tasks sheet and then clear previous tasks within employee sheet
    For Each ws In ThisWorkbook.Worksheets
        If InStr(1, SubTaskWs.Cells(cell.Row, "C"), ws.Name, vbBinaryCompare) > 0 Then
            Set FoundTaksName = ws.Range("B:B").Find(What:=SubTaskWs.Cells(cell.Row, "B"), LookAt:=xlWhole)
            If FoundTaksName Is Nothing Then
            'not found, so add
                Lastrow2 = ws.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
                ws.Range("A" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "A")
                ws.Range("B" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "B")
            Else
            'found
            End If
        End If
    Next ws
Next cell
End Sub

我相信,使用Find方法查看工作表是否包含指定的任务名称,如果未找到,则添加它,以下操作将达到您预期的结果

我还更新了一些范围,以匹配问题附带的图像,
如果SubTaskWs.Cells(cell.Row,“C”)=ws.Name,那么
,因为工作表名称似乎实际位于C列(而不是H列),也更改为在相应工作表中的B列中查找B列(任务名称),你在哪里寻找一个对B

Sub Process()
Dim cell As Range
Dim Lastrow1 As Long, Lastrow2 As Long
Dim ws As Worksheet
Dim SubTaskWs As Worksheet: Set SubTaskWs = ThisWorkbook.Worksheets("SubTasks")

Lastrow1 = SubTaskWs.Range("C" & Rows.Count).End(xlUp).Row

For Each cell In SubTaskWs.Range("C2:C" & Lastrow1) ' Find task owners in sub tasks sheet and then clear previous tasks within employee sheet
    For Each ws In ThisWorkbook.Worksheets
        If SubTaskWs.Cells(cell.Row, "C") = ws.Name Then
            Set FoundTaksName = ws.Range("B:B").Find(What:=SubTaskWs.Cells(cell.Row, "B"), LookAt:=xlWhole)
            If FoundTaksName Is Nothing Then
            'not found, so add
                Lastrow2 = ws.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
                ws.Range("A" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "A")
                ws.Range("B" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "B")
            Else
            'found
            End If
        End If
    Next ws
Next cell
End Sub
更新:

如果希望能够在单元格中列出多个工作表名称,可以通过使用InStr函数查看工作表名称是否出现在给定单元格的内容中,然后进行相应的处理来实现,例如:

Sub Process()
Dim cell As Range
Dim Lastrow1 As Long, Lastrow2 As Long
Dim ws As Worksheet
Dim SubTaskWs As Worksheet: Set SubTaskWs = ThisWorkbook.Worksheets("SubTasks")

Lastrow1 = SubTaskWs.Range("C" & Rows.Count).End(xlUp).Row

For Each cell In SubTaskWs.Range("C2:C" & Lastrow1) ' Find task owners in sub tasks sheet and then clear previous tasks within employee sheet
    For Each ws In ThisWorkbook.Worksheets
        If InStr(1, SubTaskWs.Cells(cell.Row, "C"), ws.Name, vbBinaryCompare) > 0 Then
            Set FoundTaksName = ws.Range("B:B").Find(What:=SubTaskWs.Cells(cell.Row, "B"), LookAt:=xlWhole)
            If FoundTaksName Is Nothing Then
            'not found, so add
                Lastrow2 = ws.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
                ws.Range("A" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "A")
                ws.Range("B" & Lastrow2).Value = SubTaskWs.Cells(cell.Row, "B")
            Else
            'found
            End If
        End If
    Next ws
Next cell
End Sub


你希望我们中的任何一个人能给你一个答案吗?我们看不到你的数据,可能有很多东西。据我所知,你的代码没有明显的错误。从一个简单的单元格示例开始,逐步浏览您的代码,看看发生了什么。我有一个基本的excel示例文件,但我似乎无法确定如何添加它。您不能上载文件,但可以附加一个屏幕截图。我上载了多个不同工作表的屏幕截图,希望很清楚选项卡可能会改变,这就是为什么当选项卡和任务负责人的名字会经常改变时,自动化流程很重要的原因。您希望我们中的任何人如何能够给您一个答案?我们看不到你的数据,可能有很多东西。据我所知,你的代码没有明显的错误。从一个简单的单元格示例开始,逐步浏览您的代码,看看发生了什么。我有一个基本的excel示例文件,但我似乎无法确定如何添加它。您不能上载文件,但可以附加一个屏幕截图。我上载了多个不同工作表的屏幕截图,希望它是清晰的选项卡可能会改变,这就是为什么重要的是自动化的过程,因为选项卡和任务所有者的名称将改变。我已经尝试了你的代码,但不幸的是,它似乎没有做任何事情。当我运行宏时,它不会改变anything@LawrenceForster请再试一次,我已经更新了很多东西。。。希望有帮助!:)谢谢工作得很好,比我以前做的好多了@劳伦斯·福斯特,如果有帮助的话,你能把我的回答记下来吗?谢谢!:)是的,我会的!有一个问题,如果手机输入了“AA,BB,CC”,有没有一种方法可以识别每个人的名字,并把任务放在每张纸上。嗨,我试过你的代码,但不幸的是,它似乎什么都没做。当我运行宏时,它不会改变anything@LawrenceForster请再试一次,我已经更新了很多东西。。。希望有帮助!:)谢谢工作得很好,比我以前做的好多了@劳伦斯·福斯特,如果有帮助的话,你能把我的回答记下来吗?谢谢!:)是的,我会的!有一个问题是,如果单元格中有“AA、BB、CC”字样,它是否有办法识别每个人的名字,并将任务放在每个表格上。