如何循环指定列中的行?

时间:2012-10-15 03:41:55

标签: excel vba

我是一般的编程新手。使用VBA我试图遍历范围(“b6:b18”)。通过每次传递,我从值中减去b3,并在单元格中添加日期,并偏移一列,直到该值小于b3。基本上我正在尝试设置自动付款。示例:我有5个帐户。 250.36,17.23,96.12,600.00,5.46。我的付款是每月36.12。因此,1/1/13 = 36.12直到第一个帐户<1。 36.12。但每个月必须等于付款。可能会在一个月内从每个帐户中扣除一笔钱。

我无法弄清楚的代码是:

pmt = b3
for each cell in range("b6:b18")
    if cell.value > pmt then
        activecell.value= cell.value -pmt
        activecell =activecell.offset(0,1)

但是当下一个endif关闭时,该代码什么也不做,我不知道如何按顺序显示日期。

2 个答案:

答案 0 :(得分:1)

我可以告诉您如何修复上述代码以使其“有效”,但您的整体描述令人困惑。

话虽如此,希望它能让你走上正轨

dim pmt as double
dim i as long

pmt = Range("B3").value

for i = 6 to 16
    if Range("B" & i).value > pmt then
        range("B" & i).value = range("B" & i).value - pmt
    end if
next i

答案 1 :(得分:1)

我不清楚你到底要做什么,也不清楚你的数据是如何布局的,所以我不能给你解决问题的代码,但这里有一些提示可能会让你正确的道路。

  1. 使用Option Explicit作为Module的第一行。这将迫使您对所有变量进行十分转换。
  2. 除非绝对有必要,否则请勿使用ActiveCellSelect。有关如何避免这些内容的一些提示,请参阅this answer
  3. 分配对象时,例如设置Range变量,请使用Set

    Dim rng as Range
    Set rng = Range("B3")
    

    不这样做意味着使用默认属性,即

    Dim rng as Range
    rng = Range("B3")
    

    rng.Value = Range("B3").Value  
    

    等同于

  4. 使用Range引用而未指定Worksheet表示活动工作表。

    Set rng = Range("B3")
    

    Set rng = ActiveSheet.Range("B3")
    

    等同于

  5. 诊断代码:使用Step IntoF8)一次一行地运行代码,
  6. 使用观察窗口查看变量的值(和类型)
  7. 如果您提供有关数据布局和预期结果的更多信息,可以提供更多帮助