通过点击改变相邻单元格的值(VBA是吧?)

这是我第一次真正使用VBA的东西(我发现的代码是VBA的权利?:P),所以请原谅我的无能为力…通过看它了解它。 :)我有macros的经验,知道/一些/该代码是兼容的,但我不知道如何写它…只知道如何logging它,然后使用我知道工作的位。

谜题:我有一列将调整它所在的行的权重值(或者使值稍微多一些,或者让它们独立),但权重是完全主观的,所以只需要通常手动改变。

问题是,当需要一次更改很多的时候,因为每次单元格点击的次数很多,并且通过input数字来“猜测”我们需要的权重,直到它“看起来不错”为止,主观的),所以我find了这个:

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%)。

如果他们能够上升或下降,那将是最好的。 我想我可以创build一个巨大的replace列表,而不是“”,+,或 – 这只是数字(案例0.5>案例0.6>案例0.7 >>>案例1>案例1.1 >>>等)但是很明显,如果点击10次单元来遍历数字,这可能是一个巨大的噩梦和/或更less的效率。

所以我需要做两件事才能完美地工作:

  1. 为了改变NEXT单元,无论是向左或向右。
  2. 而不是简单的replace,是否有可能做一些math?

这个想法是点击Q左边的P列会减less重量(比如说0.1),并且通过点击Q右边的R列会稍微增加重量。 如果他们达到底部/顶部,它会到另一端(0.5减less将取值高达1.5,反之亦然)。

我尝试了一下我所了解的macros,试着添加“ActiveCell.Offset(0,1).Range(”A1“)。select”在这里和那里,这将是很好的代码结束我可以select光标剩下的地方…但是把它放在更早的地方…我看到活动的单元格在更改之前移动到P或R,但仍然会更改原始列Q.

我知道我需要两个代码副本,一个用于R列(递减),一个用于列P(递增),但只要我至less有一个方面,我应该能够做出变化,以反映它。 另外我知道数据validation可能看起来像一个简单的解决scheme,但有一个下拉箭头大量的下拉箭头将使其难以辨认…

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

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

根据Value改变Value很简单。

代码显示如何处理点击(或箭头运动)到列PR 进入P将降低价值(像你提到的概括)。 进入R将boost。

 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栏中有一个数字,并试图增加或减less? 如果不是,请添加更多的细节。

这段代码的好处在于它将select放回列Q 这意味着您可以反复点击向右或向左箭头分别增加或减less 。 这是有效的,因为select的变化,但立即放回中心。 您可以根据需要快速input和递增或递减。

Q显示了数据的假设。 我用了几次代码来改变所显示的值。

结果