Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6096|回复: 16

[已解决]如何利用函数或宏,根据前两列内容自动生成第三列内容?

[复制链接]
发表于 2013-11-26 12:35 | 显示全部楼层 |阅读模式
本帖最后由 brothersonline 于 2013-11-26 13:23 编辑

请教各位:如何利用函数或宏,根据前两列内容自动生成第三列内容?
1、若:B列显示是星期一,则:E列为:计划、巡诊;
2、若:B列显示 是星期五,则:E列为:小结;
3、若:C列为"张 健",则:E列为:值班;
4、若:B列显示 是星期一、同时C列为"张 健",则:E列为:计划、巡诊、值班;
5、若:B列显示 是星期五、同时C列为"张 健",则:E列为:小结、值班;
6、若不满足上述条件,E列值不发生变化。

请教:如何以函数或宏在E列自动生成上述内容?(详见附件)

最佳答案
2013-11-26 13:56
本帖最后由 fjmxwrs 于 2013-11-26 14:03 编辑
brothersonline 发表于 2013-11-26 13:24
呵呵,是我表达不清楚,那就不要放假的条件了。


我这里给你写了元旦三天假,国庆7天假的,你看下是不是这个意思,其他假期,你自己加进去就行了
  1. Sub test()
  2. Dim arr, brr(), iRow%, x%, y%, i%
  3. With Sheets("记事本")
  4. iRow = .Cells(Rows.Count, 1).End(xlUp).Row
  5. arr = .Range("B4:C" & iRow)
  6. ReDim brr(1 To UBound(arr))
  7. For x = 1 To UBound(arr)
  8. If arr(x, 2) = "张 健" Then
  9. If arr(x, 1) >= DateSerial(Year(Date), 1, 1) And arr(x, 1) < DateSerial(Year(Date), 1, 4) Or arr(x, 1) >= DateSerial(Year(Date), 10, 1) And arr(x, 1) < DateSerial(Year(Date), 10, 8) Then
  10. brr(x) = "放假、值班"
  11. ElseIf Weekday(arr(x, 1), vbMonday) = 1 Then
  12. brr(x) = "计划、巡诊、值班"
  13. ElseIf Weekday(arr(x, 1), vbMonday) = 5 Then
  14. brr(x) = "小结、值班"
  15. Else
  16. brr(x) = "值班"
  17. End If
  18. Else
  19. If arr(x, 1) >= DateSerial(Year(Date), 1, 1) And arr(x, 1) < DateSerial(Year(Date), 1, 4) Or arr(x, 1) >= DateSerial(Year(Date), 10, 1) And arr(x, 1) < DateSerial(Year(Date), 10, 8) Then
  20. brr(x) = "放假"
  21. ElseIf Weekday(arr(x, 1), vbMonday) = 1 Then
  22. brr(x) = "计划、巡诊"
  23. ElseIf Weekday(arr(x, 1), vbMonday) = 5 Then
  24. brr(x) = "小结"
  25. Else
  26. brr(x) = ""
  27. End If
  28. End If
  29. Next x
  30. .Range("E4").Resize(UBound(brr), 1) = Application.Transpose(brr)
  31. End With
  32. End Sub
复制代码

记事本.rar

58.25 KB, 下载次数: 10

发表于 2013-11-26 12:44 | 显示全部楼层
真是郁闷,看不明白说的是什么意思
只按你上述的条件吗?
回复

使用道具 举报

 楼主| 发表于 2013-11-26 12:49 | 显示全部楼层
本帖最后由 brothersonline 于 2013-11-26 12:51 编辑
fjmxwrs 发表于 2013-11-26 12:44
真是郁闷,看不明白说的是什么意思
只按你上述的条件吗?

对的,就是根据B列、C列的内容,符合条件,则自动生成E列的内容。就是上述条件。
在附件中我已经用函数生成一个公式,只是根据B列的内容生成E列的内容,但是无法同时兼顾C列,请赐教!
回复

使用道具 举报

发表于 2013-11-26 12:54 | 显示全部楼层
没达到条件的写什么?
回复

使用道具 举报

 楼主| 发表于 2013-11-26 12:55 | 显示全部楼层
fjmxwrs 发表于 2013-11-26 12:54
没达到条件的写什么?

没达到条件,则为空
回复

使用道具 举报

发表于 2013-11-26 12:59 | 显示全部楼层
用了公式,怎么用下拉呀?选择了就没有了公式,搞不明白你这个有什么用?
如果是要判断两个或以上条件的,可以用and来增加条件
回复

使用道具 举报

 楼主| 发表于 2013-11-26 13:03 | 显示全部楼层
不用下拉,直接粘贴公式,可以不破坏原来E列中的数据有效性。
回复

使用道具 举报

 楼主| 发表于 2013-11-26 13:03 | 显示全部楼层
fjmxwrs 发表于 2013-11-26 12:59
用了公式,怎么用下拉呀?选择了就没有了公式,搞不明白你这个有什么用?
如果是要判断两个或以上条件的, ...

不用下拉,直接粘贴公式,可以不破坏原来E列中的数据有效性。
回复

使用道具 举报

 楼主| 发表于 2013-11-26 13:06 | 显示全部楼层
fjmxwrs 发表于 2013-11-26 12:54
没达到条件的写什么?

或者,不满足条件,则E列单元格的值不变化。最好能用VBA来实现。
回复

使用道具 举报

发表于 2013-11-26 13:23 | 显示全部楼层
关键是放假不知道怎么写好了,没有特定的日期,如清明节,公历是不一样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-18 15:50 , Processed in 0.338261 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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