首页 > 解决方案 > 在任务计划程序中填充单元格的公式 (Excel 2013)

问题描述

我正在尝试在 excel 中创建任务计划程序。我将有一个开始月份和一个结束月份,但我想填写中间的时间段。例如,现在我的表如下所示:

+--------+-------+-----+-------+-----+-----+-----+-----+-----+
| Task   | Jan   | Feb | Mar   | Apr | May | Jun | Jul | Aug |
+--------+-------+-----+-------+-----+-----+-----+-----+-----+
| Task A | Start |     |       |     | End |     |     |     |
+--------+-------+-----+-------+-----+-----+-----+-----+-----+
| Task B |       |     | Start | End |     |     |     |     |
+--------+-------+-----+-------+-----+-----+-----+-----+-----+
| Task C | Start |     |       |     |     | End |     |     |
+--------+-------+-----+-------+-----+-----+-----+-----+-----+

对于“任务 A”,我想让单元格介于 Jan - 可能有一些文本,如“工作”或类似的东西。

所以决赛桌是这样的:

+--------+-------+------+-------+------+------+-----+-----+-----+
| Task   | Jan   | Feb  | Mar   | Apr  | May  | Jun | Jul | Aug |
+--------+-------+------+-------+------+------+-----+-----+-----+
| Task A | Start | Work | Work  | Work | End  |     |     |     |
+--------+-------+------+-------+------+------+-----+-----+-----+
| Task B |       |      | Start | End  |      |     |     |     |
+--------+-------+------+-------+------+------+-----+-----+-----+
| Task C | Start | Work | Work  | Work | Work | End |     |     |
+--------+-------+------+-------+------+------+-----+-----+-----+

这是一个动态变化的表格,因此无法对其中的文本进行硬编码。

更新:

因为此表是动态的,所以此表链接到另一个选项卡上的表。它使用拖过表格的简单公式“=Sheet1!B2”来提取数据。

标签: excelvba

解决方案


这是假设您的数据从单元格 A1 开始。如果没有,您将需要更改行和列计数器的 for 循环。

Sub fillTask()
Dim intRow As Integer, intStartFlg As Integer
Dim mySht As Worksheet

Set mySht = Sheets("Sheet1")
intStartFlg = 0

'get last row
intRow = mySht.Cells(mySht.Rows.Count, "A").End(xlUp).Row

'loop through each task
For i = 2 To intRow
    'Clear previous loop
    For j = 2 To 13
        If mySht.Cells(i, j) <> "Start" Or mySht.Cells(i, j) <> "End" Then mySht.Cells(i, j).ClearContents
    Next j

    'loop through each month
    For j = 2 To 13
        If mySht.Cells(i, j) = "end" Then Exit For
        If intStartFlg = 1 Then mySht.Cells(i, j) = "Work"
        If mySht.Cells(i, j) = "Start" Then intStartFlg = 1
    Next j
    intStartFlg = 0
Next i

结束子


推荐阅读