VBA用于检查行并将符合条件的单元格返回到另一个工作表

时间:2012-01-26 15:53:54

标签: vba excel-vba excel-2007 excel

我正在努力为以下挑战开发自动化解决方案(即除了按钮按下,无需用户干预): 我有一个主表单,其中包含每月列中的应计数字以及紧接在右侧列中的相关收据编号。收据列的格式为月份:'Feb','Jun','Dec'位于顶部。

我需要将符合以下条件的每一行中的各种单元格数据返回到工作簿中的另一个摘要'工作表:

  1. 根据月份与摘要'表格中单元格'x'中输入的月份的匹配来识别收据列,例如,如果我键入'Mar',则在主表单中找到标题为'Mar'的列。
  2. 忽略空白行(即A列中有数据),如果Receipt列的第一行中的单元格为空,则标识该行,选择6个不同的单元格并将内容返回到第一个空白处的6个特定单元格在摘要'工作表中的行(来自给定的行号) - 然后移动到列中的下一行并继续此过程直到结束(或行限制)。注意:'空白'单元格将具有填充颜色(有条件地格式化)。
  3. 如果单元格包含数据,请向下移动到下一行并继续该过程。 我可以将一个VBA例程附加到屏幕上的按钮,以便每次更新结果都可以很好地完成工作。虽然我在这里选择了一些非常有用的代码,例如,为了检查给定条件下的每一行,我无法理解一个有效的解决方案,包括将相关的单元格返回到摘要'表格......

    非常感谢任何反馈。

    (抱歉 - 无法发布图片/截图...)


    更新 感谢快速响应,并且我无法附加/粘贴电子表格样本 - 显然我需要10分......:)

    略有不同的摘要表(Sheet1)。列为:月(Col A),然后4个单元(TBD)返回到cols B-E,然后是Receipt No(Col F)。数据来自主工作表(Sheet4)中的每个已识别的行,并放置在Sheet1中的下一个可用空白行中。我可以修改给出的任何例子以匹配实际位置。

    我有选择行的标准(这是来自我已经努力识别行的循环,但在特定月份使用固定列参考[26 - Col Z]):

    如果不是细胞(TheRow,3).Value =“”和细胞(TheRow,26).Value =“”和细胞(TheRow,6).Value<细胞(TheRow,25).Value然后......(做另一个我被困住的位)

    希望这有点清楚。感谢您的帮助。


    无法添加评论或聊天(!)以便进一步更新:

    谢谢托尼 摘要中的月份列用于确认报告的月份,因为当用户覆盖他们希望解析主表单的月份的源单元格时,这将更改。这些数据所涉及的人将获得这7列而不是其他任何内容。 机制必须找到Receipt col(月份),然后确定该行条目为空白,该行上的col 3不为空白且Accrual值[Rng.Column - 1]大于PO值(Col 4)在那一排。建立这些标准后,将选择,复制收据,应计,采购订单和其他3个数据,并将其粘贴到下一个可用空白行的摘要表中。

    主表单每月都有应计和收据,因此只能识别一列。

    希望这会有所帮助......

1 个答案:

答案 0 :(得分:0)

我正在努力想象你的工作表。我看到主表格如下:

 ... |Accrual|  Jan|Accrual|  Feb|Accrual|  Mar|Accrual|  Apr| ...
 ... |   1.23|A12  |       |     |  23.67|A14  |       |     |
 ... |       |     |  56.78|C34  | 178.12|C56  |       |     |
 ... |   2.34|B678 |       |     |       |     | 123.82|B821 |
 ... |       |     |       |     |  96.52|D56  |       |     |

摘要表中的某个位置有一个感兴趣的月份列表。

我需要一个变量:

Dim MonOfInt As String

和一个循环,在该循环中,一个感兴趣的月份将从工作表加载到此变量中:

With Sheets("Summary")
  MonOfInt = .Cells(R, C).Value
End With

以下是代码移动感兴趣的月份值的可能框架:

Dim ColCrnt As Long
Dim Rng As Range
Dim RowCrnt As Long
Dim RowLast As Long
  :

With Sheets("Master")
  ' Look for month of interest in row 1
  Set Rng = .Rows(1).Find(MonOfInt)
End With

If Rng Is Nothing Then
  ' No columns for this month in Master

Else
  ' Accrual and Receipt columns for this month found
  ColCrnt = Rng.Column - 1        ' Accrual column for month
  ' Find last used row in Accrual column
  RowLast = .Cells(Rows.Count, ColCrnt).End(xlUp).Row
  For RowCrnt = 2 To RowLast

    ' Code to extract values from Master and move to Summary here

  Next

  End If

End With

如果您可以在问题中添加信息以确认我的可视化并提供更多信息(1)如何检测行是空白的(除了测试整行是一个选项)和(2)源然后我将尝试填写这个答案。