【问题标题】:I need an idea from where to start /excel我需要一个从哪里开始的想法/excel
【发布时间】:2019-01-11 00:31:43
【问题描述】:

我需要让所有雇主的工作时间......在照片中我制作了一个 VBA 公式颜色单元格(1 个颜色单元格 =12 h)只有绿色和蓝色,“缺席”在哪里我有一个 if 公式计算所有缺勤天数。

好的,现在是问题所在,我需要一个公式/vba 来计算何时达到限制(工作限制 160 小时)让我们说在“第 24 天”单元格被突出显示或类似的东西。

非常感谢,我不知道从哪里开始。

【问题讨论】:

  • 对不起,我对您的问题有点困惑:您是手动添加颜色并想知道何时达到工作限制,还是想自动获得达到工作限制时颜色和停止?
  • 很难(不可能)用颜色计算。重新考虑您的方法并写下小时数而不是颜色,以便您可以计算(您可以保留颜色以获得更好的可见性)。然后您可以在超出限制时使用条件格式格式化单元格
  • 我猜 OP 有一个 COUNTCELLCOLOR 函数来计算彩色单元格。如果是这样,它可以用于条件格式。
  • 我手动添加颜色,当达到限制时我需要知道(在我的情况下限制是 160)并且我所有的颜色都代表 12 小时,如果我可以突出显示这一天,来自模板或在另一张纸中作为文本,其中包含“ Peter-limit 在 3 月 24 日达到..
  • @EganWolf Eh 没有看到那个公式。当然,您可以使用它来计算和使用条件格式。

标签: excel vba


【解决方案1】:

工作流程:

1、从数据表中获取lastRow

2,对于 i=3 对 lastRow 执行:处理行中的所有列(对于 ii=1),如果 cell(column, row).color 为 GREEN 或 BLUE,则向计数器添加 12 小时,如果计数器达到 160,您将在 ii 中到达哪一列

【讨论】:

  • 嗯,我可以将模板上传到某个地方以了解您在说什么?:D或者如果您可以更明确一些,请
  • 嗯,我认为我的答案已经足够清楚了.. 首先处理第一行.. 所以 rowNo3 的逐列.. 将计数器声明为 Integer = 0... 如果 cell.Color 是蓝色或绿色, counter = counter + 12 .. 如果达到 160,您将在第 3 行达到的列中获得信息。然后您可以将颜色应用于该单元格
【解决方案2】:

这里,把这个放到VBA开发窗口的“ThisWorkbook”模块中

每次打开工作簿时都会检查颜色。如果达到小时限制,它将把剩余的单元格和员工的姓名涂成灰色。

Sub Workbook_Open()

Dim i As Long, y As Long
Dim Check As Integer

For i = 3 To 7
Check = 0
    For y = 2 To 32

    'Replace this one with the green RGB
    If Cells(i, y).Interior.Color = RGB(169, 208, 142) Then
    Check = Check + 1
    End If

    'Replace this one with the blue RGB
    If Cells(i, y).Interior.Color = RGB(0, 112, 192) Then
    Check = Check + 1
    End If

    '12*13 = 156, the closet to 160
    If Check >= 13 Then
        Cells(i, y + 1).Interior.Color = RGB(200, 200, 200)
        Cells(i, 1).Interior.Color = RGB(200, 200, 200)
    End If

    Next
Next

End Sub

您可能希望在单击宏时在工作表上添加一个按钮,以便您可以轻松地手动操作。

我知道这段代码没有优化,我会让你玩它,但这是一个很好的开始

另外,将标记的 RGB 替换为您的实际颜色。我试图找出它是哪一个,但我是色盲,所以......

【讨论】:

  • 请注意Dim i, y As Integer 只声明y As Integeri As Variant。您必须为 VBA 中的 每个 变量指定一个类型:Dim i As Integer, y As Integer。为了安全起见,您应该使用 Long 来计算行数变量,因为 Excel 的行数超过了 Integer 可以处理的数量。
  • 我不知道!它已编辑。 OP似乎只有几行,我认为没有必要将它们设为Long。
  • 我会尝试的,但请注意(我只在三月发布的照片​​中,它将在四月、五月等继续我需要在您的代码中输入一个范围?
  • 是的,你应该有一些东西可以找到最后一行在 i 上使用
【解决方案3】:

如果你想使用条件格式,我不能给你确切的答案,因为我不知道你的 COUNTCELLCOLOR 是如何工作的,但你可以使用这个:

=SUM(INDIRECT("A"&ROW()&":"&SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")&ROW()))>160

这会将行中从第一列到当前的所有单元格相加(放置此公式或检查条件格式测试的单元格)并检查它是否大于 160。您必须更改 SUMCOUNTCELLCOLOR 并根据您的需要进行调整(可能从COLUMN() 中减去1,等等)。

编辑:将此作为条件格式的测试公式进行检查:

=CountCellsByColor(INDIRECT("A"&ROW()&":"&SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")&ROW()),B11)+CountCellsByColor(INDIRECT("A"&ROW()&":"&SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")&ROW()),B12)>13

【讨论】:

  • /这是计数的 vba 代码。 Function CountCellsByColor(rData As Range, cellRefColor As Range) As Long Dim indRefColor As Long Dim cellCurrent As Range Dim cntRes As Long Application.Volatile cntRes = 0 indRefColor = cellRefColor.Cells(1, 1).Interior.Color For Each cellCurrent In rData If indRefColor = cellCurrent.Interior.Color Then cntRes = cntRes + 1 End If Next cellCurrent CountCellsByColor = cntRes End Function
  • 我会尝试你的解决方案,我会通知你。谢谢!
  • 它可以工作,但不会阻止我或在达到限制时通知我。它只会说真或假,我需要手动检查达到限制的日期。跨度>
猜你喜欢
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多