按列循环遍历单元格并通过函数将每个当前单元格值转换为新单元格值(Excel VBA)

时间:2018-01-20 21:59:31

标签: excel excel-vba loops vba

我试图解决一个问题,要求使用公式将当前美元金额转换为不变美元金额(常数$ =当前$ /(CPI-U * 0.01))。

我想首先使用excel vba循环遍历列中的每个单元格,然后在到达列底部没有数据的单元格后移动到下一列(使用偏移?)。循环不包括第一列或最后一列(年和CPIU),每次迭代将当前单元格美元值输入公式,并将当前单元格美元值替换为更新后的常量美元值(不将其放入不同的表)。

例如,如果B2的单元格值是11116并且该年份的相应CPIU是41.8,则输入11116到函数= QUOTIENT(11116,PRODUCT(41.8,0.01))。在单元格B2中将11116替换为26593。

我还希望CPIU单元格引用随每次循环迭代更新。例如,CPIU在列" F"所以如果它的细胞B2那么应该选择F2,C3到F3等等。

这适用于以下excel函数示例:

ActiveCell.Formula = "=QUOTIENT(B2,PRODUCT(F2,0.01))"

* B2将被循环迭代器替换,但仍试图弄清楚如何在每次迭代时更新F列

这是表格: Data Table *范围A1:F17(包括标题)

这是vba程序循环的开始:

Public Sub LoopThroughAllTableCells()
    Dim convertedValue As Long

    For Each c In Worksheets("Sheet1").Range("B2:E17").Cells

    Next   
End Sub

*不确定此当前循环是否是循环通过1列中每个单元格然后移动到下一列的正确方法。

为冗长的帖子道歉,但难以将各个部分组合在一起。任何帮助将非常感激!

1 个答案:

答案 0 :(得分:1)

试试这个:

Public Sub LoopThroughAllTableCells()

Range("B2").Select 'position of the first cell and column you want to check
Do Until ActiveCell.Column = 6
    Do Until ActiveCell.Value = ""
        ActiveCell.Value = ActiveCell.Value / (Range("F" & ActiveCell.Row).Value * 0.01)
        ActiveCell.Offset(1, 0).Select
    Loop
    Cells(2, ActiveCell.Column + 1).Select
Loop

End Sub

如果你需要你的值为Integer,没有小数,那么改变这一行:

ActiveCell.Value = ActiveCell.Value / (Range("F" & ActiveCell.Row).Value * 0.01)

并使用此行:

ActiveCell.Value = Application.WorksheetFunction.Round(ActiveCell.Value / (Range("F" & ActiveCell.Row).Value * 0.01), 0)