【问题标题】:Swapping fixed values交换固定值
【发布时间】:2019-11-08 09:35:29
【问题描述】:

我尽量简化场景,

有没有办法交换列中的唯一值?

意思是说A列,我有A到Z,在A1到A26,然后当说,我在A1输入J(最初是A)时,A10(J)的单元格将自动交换显示一个 A?或者我在 Z 的位置输入 B 并且 Z 将自动出现在 B 因此交换

目的是交换值,以便我的程序在尝试不同的主题时可以相应地计算

【问题讨论】:

标签: excel data-structures data-analysis


【解决方案1】:

请参阅 cmets 中给出的建议,了解您的问题被否决的原因。但是,我觉得你描述的案例很有趣,所以我试了一下。将以下代码插入到 VBA 中的工作表模块中。

Dim oldVal As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then oldVal = Target.Value2
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Range("A1:A26")

    If Target.Cells.Count = 1 And Not Intersect(Target, rng) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Dim newVal As String
        newVal = Target.Value2
        Target.Value2 = oldVal

        Dim newValRng As Range
        Set newValRng = rng.Find(newVal, LookAt:=xlWhole, MatchCase:=True)
        If Not newValRng Is Nothing Then
            newValRng.Value2 = oldVal
            Target.Value2 = newVal
        Else
            MsgBox ("Please enter a value that is already in range " & rng.Address)
        End If

        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub

稍微解释一下发生了什么:每次用户在工作簿中选择一个单元格时,该单元格的值都会存储在oldVal 中。为了超级安全,您还可以在 Workbook_Open 上执行此操作,以覆盖用户在更改值之前未更改选择的边缘情况。

然后,当单元格发生更改时,新值将存储在newVal 中,并且更改会被还原。接下来,识别带有newVal 的单元格。如果不存在这样的单元格,则会显示错误消息并且不会发生任何更改。如果找到一个单元格,则为其分配值oldVal,并重做用户的原始更改。

【讨论】:

  • 感谢沙尔克的评论,我是论坛的新手,没有注意到那些发帖要求。将确保展示我所做的工作。只是试图通过保持简单而不使场景过于复杂
  • 别担心,我们都在这里学习。我的代码解决了你的问题吗?
  • 嗨 Schalk,代码有效,非常棒,感谢您的帮助
  • 很高兴为您提供帮助,请考虑接受答案并点赞,这样其他人可能会觉得这更好
  • 好的,我投了赞成票并点击了勾,但网站告诉我,我的声誉太低了,无法产生任何影响?
猜你喜欢
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2012-09-11
相关资源
最近更新 更多