【问题标题】:"Mark Up" all non-blank cells (excluding header row)“标记”所有非空白单元格(不包括标题行)
【发布时间】:2015-11-03 07:16:08
【问题描述】:

我有一张表(比如 Sheet2),里面有一个表格,里面有数据。

在下面的示例中(比实际数据小得多),它需要从 B2:O2 中选择每个值,如果其中有一个值(忽略所有随机放置且没有数据的空白单元格),然后增加前一个单元格的 15%。

范围来自 B:O,但并非每个单元格都有值。 A 列的 ID 值可以计算每列的长度。

所以单元格 B2 输出为 11.5,C2 为 1.15,如下所示:

代码运行之前。

Row Column A    Column B    Column C    Column D ... Column O
 1      ID#     Header1     Header2     Header3   'Row(1) header
 2      ID1         10                       1
 3      ID2          2           5           
 4      ID3                                  2

代码运行后。

Row Column A    Column B    Column C    Column D ... Column O
 1      ID#     Header1     Header2     Header3   'Row(1) header
 2      ID1         11.5                    1.15
 3      ID2         2.3         5.75           
 4      ID3                                 2.3

我不知道如何使用 For Each 循环?提前致谢!

【问题讨论】:

  • 让我确认一下。空白单元格(表示“-”单元格)只能在 C 列或两列(B 和 C)中有?
  • 空白单元格是随机的,并且贯穿整个工作表。

标签: vba excel loops foreach do-while


【解决方案1】:

如果您需要将增量更改 Inc_By 更改为您需要的小数。例如0.15 为 15% 0.45 为 45% 下面假设“-”真的是“”

Sub test()

Inc_By = 0.15

With ActiveSheet
    lCol = .Range("A1").End(xlToRight).Column
    For Each cell In .Range("A2:" & .Range("A2").End(xlDown).Address)
        For i = 2 To lCol
            If .Cells(cell.Row, i) <> "" Then
                .Cells(cell.Row, i).Value = .Cells(cell.Row, i).Value + (.Cells(cell.Row, i).Value * Inc_By)
            End If
        Next
    Next
End With
End Sub

如果电子表格中的“-”确实是“-”,请在下方替换

If cell.Offset(0, 2).Value = "" Then

 If cell.Offset(0, 2).Value = "-" Then

【讨论】:

  • 感谢@99moorem,尽管上面的代码似乎给出了不正确的输出。
  • @Stacker 您的输入/输出自您的第一篇文章以来发生了变化,但我已经修改了上面的代码。以上适用于任何数量的标题
【解决方案2】:

如果其他人需要相同的答案,以下内容对我有用:

Sub Test()
On Error GoTo ErrorMsg
Dim l As Integer, f As Integer, c As Integer, cf As Integer, cl As Integer

l = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row  'Total Rows, count from ID Column
f = 1       'First Row with Headings, is skipped with Offset
c = f       'Counter for Loop
cf = 2      'First Column to MarkUp
cl = 4      'Last Column to be MarkUp

Inc_By = 1.15   'Markup Amount

With ActiveSheet

Do While cf <= cl       'Loop count to check every Column
Cells(f, cf).Activate   'Select first cell of Column
    For Each cell In .Range(Cells(f, cf).Address, Cells(l, cf).Address)   'cf needs to be a variable and cycle through to cl
    If ActiveCell.Offset(1, 0).Value > 0 And Not IsEmpty(ActiveCell.Offset(1, 0).Value) Then 'Skips negatives and blanks
    ActiveCell.Offset(1, 0).Activate
    ActiveCell.Value = ActiveCell.Value * Inc_By
    Else
    ActiveCell.Offset(1, 0).Activate
    End If

    Next

cf = cf + 1             'Counter to start searching next Column    
Loop
End With


MsgBox ("Done")
End Sub

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2016-07-02
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多