我需要知道如何根据第三个单元格的内容交换 Excel 中两个相邻单元格的内容

我需要知道如何根据第三个单元格的内容交换 Excel 中两个相邻单元格的内容

我正在尝试根据第三个单元格的内容在 Excel 中的两个单元格之间交换内容。因此,我在 Excel 中有一列 - 假设为 C 列。我想根据 C 列中相应单元格中是否有“S”来交换 A 列和 B 列中相应单元格的值。我不是 VB 专家,但我有这两个宏,我正在尝试重新处理它们。第一个宏在 Sheet 模块中,如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range("C1"), Target) Is Nothing Then
        If IsNumeric(Target.Value) And Target.Value = "S" Then
            Call swap
        End If
    End If
End Sub

第二个在标准模块中,如下所示:

Sub swap()
 Dim cellVal
 cellVal = ActiveCell.Value
 ActiveCell.Value = ActiveCell.Offset(0, 1).Value
 ActiveCell.Offset(0, 1).Value = cellVal
End Sub

由于某种原因,它无法正常工作。有人能帮我吗?我认为这是因为我在第一个宏中有“.Count”,而我正在寻找“S”,但我不知道要将其更改为什么。任何帮助都将不胜感激。

答案1

嗯,我不确定你为什么要支票Target.Cells.Count,但如果你需要的话我会把它留在里面。

我在您的代码中看到的主要问题是,您正在检查 C 列的值是否为数字值,但您想要的是字符串。因此,IsNumeric(Target.Value)当您在 C 列中输入“S”时,您的代码始终返回 false。所以我已经将其删除了。

以下代码适用于整个 C 列:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then
        Exit Sub
    End If

    If Not Intersect(Range("$C:$C"), Target) Is Nothing Then
        If Target.Value = "S" Then
            swap Target
        End If
    End If
End Sub

Sub swap(rng As Range)
    Dim cellVal As String
    cellVal = rng.Offset(0, -2).Value
    rng.Offset(0, -2).Value = rng.Offset(0, -1).Value
    rng.Offset(0, -1).Value = cellVal
End Sub

相关内容