excel - 如何遍历一行数据,从该行中的特定单元格中提取值,在另一行中找到它,然后在相交框中输入一个值
问题描述
所以我有一本工作簿。第 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
解决方案
你可以试试:
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
推荐阅读
- curl - 如何使用终端的 curl 和 jq 将令牌保存在环境变量中
- python - 正则表达式提取复杂文本中的电话号码
- javascript - 我们可以在铯地图上上传 tiff 图像吗?
- ruby-on-rails - 如何在 Rails API 中使用 FK 检索模型实例?
- go - 使用 Go 读取已使用 UCS-2 little Endian 编码的文本文件
- sql - 是否可以在不连接数据库的情况下在 sql 中打开 .bak 文件?
- c++ - 为 C++ 构建 Boost 库时出错
- flutter - Flutter - 如何从认证错误链接中获取 api 响应
- ms-word - 如何在Word中的单词顶部添加IPA
- excel - 为什么 Excel 会因自动化错误而崩溃?