首页 > 解决方案 > 如何遍历一行数据,从该行中的特定单元格中提取值,在另一行中找到它,然后在相交框中输入一个值

问题描述

所以我有一本工作簿。第 1-3 行是标题信息。从 C 列开始的第 4 行是从 2020 年 1 月 1 日到 2020 年 12 月 31 日的日期。然后我在 A 列中从 A5:A:16 获得员工的姓名。然后从 B:5:B16 我有他们的开始日期(格式与第 4 行中的日期完全相同)。我正在尝试遍历 A:5-A:20,如果那里有名称,请从 B 行(他们的开始日期)获取值并在第 4 行(日期所在的位置)中找到该值以获取列,然后在与他们的姓名和开始日期相交的单元格中输入一个“n”。但是当我按下按钮或运行我的代码时,什么也没有发生。

Sub Button1_Click()

Dim i As Long
Dim lnCol As Long

For i = 5 To Range("A20")
    If Not IsEmpty(Cells(i, 1).Value) Then
        StartDate = Cells(i, 2).Value

        lnCol = Sheet3.Cells(4, 1).EntireRow.Find(What:=StartDate, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).column

        Cells(i, lnCol).Value = "n"


    End If


Next i


End Sub

标签: excelvba

解决方案


你可以试试:

Sub Test()

Dim cl As Range
Dim col As Long

With Sheet1 'Change to sheets CodeName you interested in
    For Each cl In .Range("A5:A20").SpecialCells(2, 2)
        col = .Range("4:4").Find(What:=cl.Offset(, 1).Value, LookIn:=xlValues, Lookat:=xlWhole).Column
        .Cells(cl.Row, col).Value = "n"
    Next cl
End With

End Sub

注意: .Range("A5:A20").SpecialCells(2, 2)仅当您确定至少有一个名称时才有效。这可以防止完全迭代。但是,当全部为空时会引发错误


编辑

根据您的评论:

“是的,现在只填充了 A5:A16。我想让公式搜索范围更大,以便在我们添加人员时搜索。”

我认为您真正想要的是一种动态方式来检索最后使用的行。在这种情况下,请尝试以下操作:

Sub Test()

Dim cl As Range
Dim col As Long

With Sheet1 'Change to sheets CodeName you interested in
    For Each cl In .Range("A5:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
        col = .Range("4:4").Find(What:=cl.Offset(, 1).Value, LookIn:=xlValues, Lookat:=xlWhole).Column
        .Cells(cl.Row, col).Value = "n"
    Next cl
End With

End Sub

推荐阅读