ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1230|回复: 9

[求助] 根据sheet1中的两个值,选中sheet2中相应数值所在的行和列的交叉单元格

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-13 13:59 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
求助大神

如附件,sheet2 A列与sheet1 B列的值匹配,sheet2 第一行与sheet 1 E列的日期相匹配。然后找出相交的单元格。

例如,根据sheet1 第二行的数据,要找到在sheet2中标红的这个单元格

谢谢!

picture.PNG

example 1.zip

13.54 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2018-6-13 14:27 | 显示全部楼层
选中后要干什么?表中有3条数据记录,就是有3个符合条件的单元格,都要选中吗?如果有更多的数据呢?

TA的精华主题

TA的得分主题

发表于 2018-6-13 14:56 | 显示全部楼层
请查看是否达到所需效果。

  1. Sub TZ20180613()
  2. Dim t
  3. Dim arr
  4. Dim m, n
  5. Dim Sk$
  6. Dim s_Return$
  7. t = Timer
  8. arr = Sheet1.UsedRange
  9. With Sheet2
  10.     For m = 3 To .Cells(65536, 1).End(xlUp).Row     'Loop Row
  11.         For n = 2 To .Cells(1, 256).End(xlToLeft).Column   'Loop Column
  12.             Sk = .Cells(m, 1) & "/" & .Cells(1, n)  '<-WC/Date
  13.             s_Return = Get_Str_from_Array(arr, Sk)
  14.             If s_Return = "" Then
  15.                 .Cells(m, n) = ""
  16.                 .Cells(m, n).Interior.ColorIndex = 0
  17.             Else
  18.                 .Cells(m, n) = s_Return
  19.                 .Cells(m, n).Interior.ColorIndex = 3    '<-RED
  20.                 End If
  21.         Next n
  22.     Next m
  23. End With
  24. MsgBox (Timer - t)
  25. End Sub

  26. Function Get_Str_from_Array(arr, Str$)
  27. Dim i
  28. Dim Sk$
  29. Dim flag As Boolean
  30. For i = 2 To UBound(arr)
  31.     Sk = arr(i, 2) & "/" & arr(i, 5)    '<-WC/Date
  32.     If Sk = Str Then
  33.         Get_Str_from_Array = arr(i, 9)
  34.         Exit Function
  35.     End If
  36. Next i
  37. Get_Str_from_Array = ""
  38. End Function
复制代码


example 1.zip

20.88 KB, 下载次数: 2

Lookup

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-13 16:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
半百 发表于 2018-6-13 14:27
选中后要干什么?表中有3条数据记录,就是有3个符合条件的单元格,都要选中吗?如果有更多的数据呢?

选中以后要根据sheet1 中E列和F列的日期差,将sheet2 第一行中相应的天数标红。对sheet2 中的每一行都要这样操作。当sheet1中数据有更新的时候,sheet2也要相应变化。

例如,sheet1第一行start date 到end date 是5.22 到5.26,那么sheet2 第一行的B3到G3都要标红。

之前有人指点了怎么做每行标红,代码如下,方法是在sheet2第三列把日期差的天数做出来,然后根据这个天数标红。我在想如果能找到起始的单元格,就可以操作了。可能还需要for循环,但我也不是很会,毕竟没学过VBA...如果您能帮忙整合到一起就太好了!

With Sheet3
.Range("A3").CurrentRegion.Interior.ColorIndex = 0
  k = .Range("A65536").End(xlUp).Row
  For l = 3 To k
        .Cells(l, 4).Resize(1, .Cells(l, 3).Value).Interior.ColorIndex = 3

next
end with

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 13:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhenghui13 发表于 2018-6-13 14:56
请查看是否达到所需效果。

大神您好,您这个完全实现了我的描述,而且把后面的一步也做了:将选中的单元格添加sheet1 description的内容。本来我是想自己完成后面的,然而没弄出来,麻烦再帮帮忙。

我的最终需求是,选中以后要根据sheet1 中E列和F列的日期差,将sheet2 第一行中相应的天数标红。对sheet2 中的每一行都要这样操作。当sheet1中数据有更新的时候,sheet2也要相应变化。

例如,sheet1第一行start date 到end date 是5.22 到5.26,那么sheet2 第一行的B3到G3都要标红。

如果这些标红的单元格能合并,加黑框,再添加sheet1中description的内容就完美了。



TA的精华主题

TA的得分主题

发表于 2018-6-15 13:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
turbidtear 发表于 2018-6-15 13:04
大神您好,您这个完全实现了我的描述,而且把后面的一步也做了:将选中的单元格添加sheet1 description的 ...

我一般不建议用合并单元格。

  1. Sub TZ20180613()
  2. Dim t
  3. Dim arr
  4. Dim m, n
  5. Dim Sk$
  6. Dim s_Return$
  7. Dim tmp
  8. Dim k%
  9. t = Timer
  10. arr = Sheet1.UsedRange
  11. With Sheet2
  12.     For m = 3 To .Cells(65536, 1).End(xlUp).Row     'Loop Row
  13.         For n = 2 To .Cells(1, 256).End(xlToLeft).Column   'Loop Column
  14.             Sk = .Cells(m, 1) & "/" & .Cells(1, n)  '<-WC/Date
  15.             s_Return = Get_Str_from_Array(arr, Sk)
  16.             If Len(s_Return) > 1 Then
  17.                 tmp = Split(s_Return, "|")
  18.                 .Cells(m, n) = tmp(0)
  19.                 For k = 0 To Int(tmp(1))
  20.                     .Cells(m, n + k).Interior.ColorIndex = 3  '<-RED
  21.                 Next k
  22.                 Exit For
  23.             Else
  24.                 .Cells(m, n) = ""
  25.                 .Cells(m, n).Interior.ColorIndex = 0
  26.             End If
  27.         Next n
  28.     Next m
  29. End With
  30. MsgBox (Timer - t)
  31. End Sub

  32. Function Get_Str_from_Array(arr, Str$) As String
  33. Dim i
  34. Dim Sk$
  35. Dim i_Dur
  36. For i = 2 To UBound(arr)
  37.     Sk = arr(i, 2) & "/" & arr(i, 5)    '<-WC/Date
  38.     If Sk = Str Then
  39.         i_Dur = arr(i, 6) - arr(i, 5)
  40.         Get_Str_from_Array = arr(i, 9) & "|" & i_Dur
  41.         Exit Function
  42.     End If
  43. Next i
  44. Get_Str_from_Array = ""
  45. End Function
复制代码


example 1.zip

18.31 KB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 15:58 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-19 10:58 | 显示全部楼层
zhenghui13 发表于 2018-6-15 13:32
我一般不建议用合并单元格。

大神您好,您的给的代码在实际操作中发现,如果添加sheet1 中的数据,程序没有问题。但如果更改sheet1 中已有的数据并再次运行宏,之前的sheet2 中运行的结果结果却仍保留。请问这个有办法解决吗?最好是无论添加或者更改sheet1 中的数据,sheet2运行的结果都能刷新。

另外,如果不合并单元格,可以有办法把相邻两个日期段标红的单元格分别标成不同的颜色吗?如果都是红色,不好区分每一项task所占的时间。

多谢了!

TA的精华主题

TA的得分主题

发表于 2018-6-19 13:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
turbidtear 发表于 2018-6-19 10:58
大神您好,您的给的代码在实际操作中发现,如果添加sheet1 中的数据,程序没有问题。但如果更改sheet1 中 ...

上面一个问题,如果需要手工选择区域并清除内容,可以在with Sheet2下面加入以下语句:
Set rng = Application.InputBox("Select.Range", "Selection", Type:=8)
rng.Clear

第二个问题,不是很明白什么意思。我看下来一行就是一个task,没有什么太大问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-20 09:59 | 显示全部楼层
zhenghui13 发表于 2018-6-19 13:29
上面一个问题,如果需要手工选择区域并清除内容,可以在with Sheet2下面加入以下语句:
Set rng = Applic ...

关于第二个问题,如果同一个workcenter下有两个任务是相衔接的,就不太好分辨。最好是像附件打勾的第二行那样,通过颜色区分开。
谢谢!



sample.PNG
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-26 02:53 , Processed in 0.045828 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表