这是我第一次真正使用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次循环数字。
因此,我需要做两件事才能使其完美运作:
想法是点击Q左侧的P列会减轻重量(比如0.1),点击Q右侧的R列会略微增加重量。如果它们到达底部/顶部,它将转到另一端(0.5减少将使值增加到1.5,反之亦然)。
我尝试了解一下我对宏的了解,并尝试添加“ActiveCell.Offset(0,1).Range(”A1“)。选择”位在这里和那里,这将是很好的结束代码,所以我可以选择之后光标留在哪里...但是把它放在任何地方......我看到活动单元在进行更改之前移动到P或R,但它仍然会更改原始列Q.
我知道我需要两个代码副本,一个用于R列(减少),一个用于P列(增加)但只要我至少有一个侧面我应该能够进行更改以镜像它。此外,我知道数据验证可能看起来像一个简单的解决方案,但是覆盖大部分工作表的下拉箭头数量会很少,这会让它难以理解......
非常感谢任何花时间帮助解决这个难题的人, Corinne:)
答案 0 :(得分:1)
我想我理解你的问题,如果不这样做,请添加图片,我们就会到达那里。
根据Value
更改Value
非常简单。
代码显示如何处理列P
或R
中的点击次数(或箭头移动)。进入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
中的数据假设。我使用代码几次将值更改为显示的内容。