通过点击改变相邻小区的价值(VBA对吗?)

时间:2015-06-10 18:43:46

标签: excel vba excel-vba

这是我第一次真正使用VBA的东西(我发现的代码是VBA对吗?:P)所以请原谅我无法通过查看来理解它。 :)我有使用宏的经验,知道/某些代码是兼容的,但我不知道如何编写它...只知道如何记录它然后使用我知道工作的位。

谜题:我有一个列可以调整它所在行的加权值(或者使值略微或多或少,或者单独使用),但权重完全是主观的,所以只需要更改通常手动。

问题在于需要立即更改大量的内容,因为通过输入数字直到“看起来不错”为止,通过“猜测”我们需要哪些权重来点击每个单元格并一次更改一个值。就像我说的那样主观),所以我发现了这个:

http://www.mrexcel.com/forum/excel-questions/51933-changing-cell-value-clicking-cell.html

对页面底部的版本进行了一些微小的更改,现在就这样做了:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  Application.EnableEvents = False
  If Target.Cells.Count = 1 Then
    If Not Intersect(Target, Range("Q3:Q500")) Is Nothing Then
      Select Case Target.Value
      Case ""
        Target.Value = "+"
      Case "+"
        Target.Value = "-"
      Case "-"
        Target.Value = ""
      Case Else
        Target.Value = "+"
      End Select
        ActiveCell.Offset(0, 2).Range("A1").Select
    End If
  End If
  Application.EnableEvents = True
End Sub

几乎完美,除了数字范围将略大于“”,+或 - 。事实上,范围可能是0.5到1.5(50%到150%)。

如果他们可以上升或下降最好。我想我可以创建一个巨大的替换列表,而不是“”,+或 - 它只是数字(案例0.5>案例0.6>案例0.7>>>案例1>案例1.1 >>>等等。但显然这可能是一个巨大的噩梦和/ / /效率,当必须点击单元格10次循环数字。

因此,我需要做两件事才能使其完美运作:

  1. 用于将NEXT单元格向左或向右更改一个。
  2. 而不是简单的替换,它可以做一些数学吗?
  3. 想法是点击Q左侧的P列会减轻重量(比如0.1),点击Q右侧的R列会略微增加重量。如果它们到达底部/顶部,它将转到另一端(0.5减少将使值增加到1.5,反之亦然)。

    我尝试了解一下我对宏的了解,并尝试添加“ActiveCell.Offset(0,1).Range(”A1“)。选择”位在这里和那里,这将是很好的结束代码,所以我可以选择之后光标留在哪里...但是把它放在任何地方......我看到活动单元在进行更改之前移动到P或R,但它仍然会更改原始列Q.

    我知道我需要两个代码副本,一个用于R列(减少),一个用于P列(增加)但只要我至少有一个侧面我应该能够进行更改以镜像它。此外,我知道数据验证可能看起来像一个简单的解决方案,但是覆盖大部分工作表的下拉箭头数量会很少,这会让它难以理解......

    非常感谢任何花时间帮助解决这个难题的人, Corinne:)

1 个答案:

答案 0 :(得分:1)

我想我理解你的问题,如果不这样做,请添加图片,我们就会到达那里。

根据Value更改Value非常简单。

代码显示如何处理列PR中的点击次数(或箭头移动)。进入P会降低价值(就像你提到的那样)。进入R会上升。

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  Application.EnableEvents = False
  If Target.Cells.Count = 1 Then
    If Not Intersect(Target, Range("P3:P500")) Is Nothing Then

        If Target.Offset(0, 1).Value > 0.5 Then
            Target.Offset(0, 1).Value = Target.Offset(0, 1).Value - 0.1
        Else
            Target.Offset(0, 1).Value = 1.5
        End If

        Target.Offset(0, 1).Select
    End If

    If Not Intersect(Target, Range("R3:R500")) Is Nothing Then

        If Target.Offset(0, -1).Value < 1.5 Then
            Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 0.1
        Else
            Target.Offset(0, -1).Value = 0.5
        End If

        Target.Offset(0, -1).Select
    End If


  End If
  Application.EnableEvents = True
End Sub

主要思想是检查列Q中的值,并根据列和值添加或减去或换行。这段代码可以简化和清理,但它可以满足您的需求。

我假设您在Q列中有一个数字,并且正在尝试增加或减少该数字?如果没有,请添加更多详细信息。

此代码的好处是它将选择放回到列Q中。这意味着您可以反复按向右或向左箭头分别增加或减少。这是有效的,因为选择会更改,但会立即放回中心。您可以根据需要快速键入,递增或递减。

图片显示列Q中的数据假设。我使用代码几次将值更改为显示的内容。

results