VBA在多个标准上更改活动单元偏移

时间:2013-06-08 17:22:59

标签: excel-vba vba excel

首先,我从这个网站学到了很多东西。说到更复杂的代码行,我仍然很绿。我将尽我所能来描述我想要做的事情,也许有人可以指出我正确的方向。

我在一系列中有两列:

Column A             Column B
1                    0
1                    1
1                    2
1                    0
1                    1
1                    2
2                    0
2                    1
2                    2
4                    0
4                    1

我想要做的是搜索列B,直到我到达列A序列的最后一个数字,然后将列A数字加一。所以我的最终结果应该是:

Column A             Column B
1                    0
1                    1
1                    2
2*                   0
2*                   1
2*                   2
3                    0
3                    1
3                    2
4                    0
4                    1

我尝试做类似

的事情
Sub pdiddy()`
Do Until ActiveCell.Value = ""`
  If ActiveCell.Value < 15 Then 'the column b sequence is only going to be between the numbers 0-15
     ActiveCell.offest(1, 0).Value 1  'the column A sequence can increase until 99
  End If
Loop
End Sub

如果数字序列在更改之前没有超过15,我想保留A列中的数字。 我希望我已经解释清楚了。我想确保没有A栏和A栏。 B组合相同。提前感谢大家帮助新手理解并更好地完成代码序列。此外,我试图编码标签,但我不认为我做得对,我现在道歉。 BSOV

2 个答案:

答案 0 :(得分:1)

不是让以前的答案无法识别,而是代码可以满足您的要求。作为参考,我产生输出(与原件并排)。

代码:

Sub pdiddy()
Dim bank, cue
Dim r As Range

Set r = Range("b2")              ' point to the first cell in column C: cueWrap
bank = Range("A2").Value - 1     ' starting value for bank ... code adds one in the first pass
cue = r.Value                    ' first value for cue
Do Until r.Value = ""
  r.Select
  If r.Value < r.Offset(-1, 0) Or r.Value >= 15 Then ' must wrap
    If r.Value > 15 Then cue = (r.Value Mod 15) Else cue = 0
    If r.Offset(0, -1) = r.Offset(-1, -1) Or cue = 0 Then
      bank = bank + 1
    End If
  Else
    cue = r.Value
  End If
  If bank > 127 Then Exit Do    ' 127 banks available
  If r.Offset(0, -1).Value > bank Then bank = r.Offset(0, -1).Value
  r.Offset(0, -1).Value = bank    ' overwrite bank
  r.Value = cue                   ' overwrite cue
  Set r = r.Offset(1, 0)          ' next cell down
Loop
End Sub

输出:

---after---     --- before ----
Bank    Cue     Bank    Cue
10        1     10  1
10        2     10  2
10        3     10  3
10        4     10  4
10        5     10  5
10        6     10  6
10        7     10  7
10        8     10  8
10        9     10  9
10       10     10  10
10       11     10  11
10       12     10  12
10       13     10  13
10       14     10  14
10       15     10  15
11        1     10  16
11        2     10  17
11        3     10  18
11        4     10  19
11        5     10  20
11        6     10  21
11        7     10  22
11        8     10  23
11        9     10  24
11       10     10  25
11       11     10  26
11       12     10  27
11       13     10  28
11       14     10  29
11       15     10  30
12        1     10  31
12        2     10  32
13        1     11  1
13        2     11  2
13        3     11  3
13        4     11  4
13        5     11  5
13        6     11  6
13        7     11  7
13        8     11  8
13        9     11  9
13       10     11  10
13       11     11  11
13       12     11  12
13       13     11  13
13       14     11  14
13       15     11  15
14        1     11  16
14        2     11  17
15        1     12  1
15        2     12  2
15        3     12  3
15        4     12  4
15        5     12  5
15        6     12  6
15        7     12  7
15        8     12  8
15        9     12  9
15       10     12  10
15       11     12  11
15       12     12  12
15       13     12  13
15       14     12  14
15       15     12  15
16        1     12  16
16        2     12  17
16        3     12  18
16        4     12  19
16        5     12  20
16        6     12  21
16        7     12  22
16        8     12  23
16        9     12  24
16       10     12  25
16       11     12  26
16       12     12  27
16       13     12  28
16       14     12  29
16       15     12  30
17        1     12  31
17        2     12  32
21        1     21  1
21        2     21  2
21        3     21  3
21        4     21  4
21        5     21  5
21        6     21  6
21        7     21  7
21        8     21  8
21        9     21  9

答案 1 :(得分:0)

这个问题有点不清楚;我将回答我认为您要问的问题:“每当B'中的序列重置'时,我想将A列中的相应数字递增一个”。

Sub pdiddy()
Dim Aval, Bval
Dim r as Range

Set r = Range("B1") ' point to the first cell in column B
Aval = 1            ' starting value for A
Bval = r.Value
Do Until r.Value = ""            ' <<<< edited
  If r.Value < Bval Then         ' sequence wraps
    Aval = Aval + 1              ' increment A
    if Aval > 99 Then Exit Do    ' "column A sequence can increase until 99"
  End If
  r.offset(0, -1).Value = Aval   ' set the value in the column to the left
  Bval = r.Value                 ' <<<< added
  set r = r.Offset(1,0)          ' next cell down
Loop
End Sub

如果不符合您的意图,请在评论中说明。特别是,当你的问题(A,B?)达到15的值时,你的问题应该采取什么行动。