【问题标题】:vba timeline dates as range , select subrange based on date in 2 cell values Excel2013vba时间线日期作为范围,根据2个单元格值Excel2013中的日期选择子范围
【发布时间】:2016-11-18 03:08:56
【问题描述】:

我正在编写一个时间线,其想法是使用从事件的开始日期到结束日期的事件填充时间线。

我的日期从“E19”一直到“RU19”(结束日期列可以是任意的。日期是从 2016 年 4 月 3 日到 2017 年 7 月 31 日。

事件有 3 列:

  • 开始日期:A22
  • 结束日期:B22
  • 事件名称:C22

我设置了从“E19”到文档“RU19”的最后一列的范围。是否可以根据单元格值设置子范围,该单元格值将遍历主范围并返回从子范围开始到结束的值?

例如,如果单元格 A22 中的子范围开始日期是 2016 年 4 月 5 日,单元格 B22 中的结束日期是 2016 年 4 月 8 日,我会选择一个子范围“G19:J19”。

当前代码是:

Dim LastCol As Long
Dim startDate As Range
'find last column in the document
LastCol = Cells(19, Columns.Count).End(xlToLeft).Column
'set timeline range from start of date data to last column
Set startDate = Range(Cells(19, 5), Cells(19, LastCol))

【问题讨论】:

  • 哎呀是的,这是一个错字。现已修复

标签: vba excel


【解决方案1】:

你是否在追求类似的东西:

Dim StartDate As Range
Dim EndDate As Range
Dim EventRange As Range

Set StartDate = Cells(19, 5 + Cells(22, 1) - Cells(19, 5))
Set EndDate = Cells(19, 5 + Cells(22, 2) - Cells(19, 5))
Set EventRange = Range(StartDate, EndDate)
EventRange.Value = Cells(22, 3)

这将覆盖您在第 19 行中的日期,所以我猜这不是您所追求的,但希望它会给您一些线索以继续进行。

而且,如果您实际上在 E19:RU19 中没有日期,只需将“Set StartDate”和“Set EndDate”语句末尾的“Cells(19, 5)”替换为我想象的实际日期从问题将在那里,即

Set StartDate = Cells(19, 5 + Cells(22, 1) - DateSerial(2016, 4, 3))
Set EndDate = Cells(19, 5 + Cells(22, 2) - DateSerial(2016, 4, 3))

按照您的答案中的 cmets,以下将为第 22 到 30 行中的每一行选择子范围。(更改循环以满足您的需要。)

For rowToProcess = 22 To 30
    Set StartDate = Cells(rowToProcess, 5 + Cells(rowToProcess, 1) - Cells(19, 5))
    Set EndDate = Cells(rowToProcess, 5 + Cells(rowToProcess, 2) - Cells(19, 5))
    Set EventRange = Range(StartDate, EndDate)
    'Do whatever you need with the subrange here, e.g. fill in cells with black colour to make it look like a project plan
    range(Cells(rowToProcess, 5), Cells(rowToProcess, Cells.SpecialCells(xlCellTypeLastCell).Column).Interior.Color = xlNone
    EventRange.Interior.Color = vbBlack
Next

【讨论】:

    【解决方案2】:

    感谢 YowE3k 的建议,但我想我已经找到了解决方案。

    我创建了 3 个范围,rngSelect、rngStart 和 rngEnd。

    rngStart 和 rngEnd 在主范围中查找我的开始和结束单元格的值,而 rngSelect 只是将找到的日期的地址值放入并选择它。

    现在我可以继续将范围偏移到与事件在同一行并为范围着色。

    代码如下:

    LastCol = Cells(19, Columns.Count).End(xlToLeft).Column
    
    Set startDate = Range(Cells(19, 5), Cells(19, LastCol))
    Set rngStart = startDate.Find(Range("A22"))
    Set rngEnd = startDate.Find(Range("B22"))
    Set rngSelect = Range(rngStart.Address, rngEnd.Address)
    
        rngSelect.Select
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-30
      • 2021-11-21
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2017-01-11
      相关资源
      最近更新 更多