将静态公式转换为选择代码VBA宏

时间:2019-03-29 15:31:51

标签: excel vba excel-formula

我正在使用记录处理工具,遇到了问题。

我们的一位客户为我们提供了包含换行符的原始数据-使其在格式化之前无法使用。不幸的是,无法使用运行清除功能的简单解决方案,因为它会删除过程中16位帐号的最后一位。希望每个最终用户在移植数据以将其格式化为文本字符串时都记得保留目标格式,这也不是真正的选择。

因此,这是我寻求帮助的请求: 通过使用此公式,我可以得到一个干净的值

    =IF(RIGHT(A2,1)=" ",LEFT(A2,LEN(A2)-1),A2)    

我现在需要将其转换为一个宏,该宏会将所选单元格的cell.value更改为公式的结果。但是在将我的头撞到墙上8个小时之后,我只是不知道该怎么做。任何帮助深表感谢!

3 个答案:

答案 0 :(得分:0)

您在VBA中的公式:

Sub Klean()
    Dim Cell As Range
    For Each Cell In Selection
        v = Cell.Value
        If Right(v, 1) = " " Then
            v = Left(v, Len(v) - 1)
            Cell.Value = v
        End If
      Next Cell
End Sub

答案 1 :(得分:0)

您需要一个对给定单元格进行迭代的函数。您可以使用当前选中的任何单元格来调用该函数。

Option Explicit

Sub DoSomethingCool()

    CleanCellText Selection
    '--- or ---
    CleanCellText ActiveSheet.Range("A1:Z20")

End Sub

Public Sub CleanCellText(ByRef thisRange As Range)
    Dim cell As Range
    For Each cell In thisRange
        If Right$(cell.Value, 1) = " " Then
            cell.Value = Left$(cell.Value, Len(cell.Value) - 1)
        End If
    Next cell
End Sub

答案 2 :(得分:0)

非常感谢大家如此迅速和翔实的回应!

我设法确定了问题-事实证明,除了回车符外,原始数据还在数据前面包含一个制表符空间,这引起了所有问题,并且拒绝通过修整或手动编辑进行编辑!这是我嵌入的宏按钮解决问题的最终代码:

Private Sub CommandButton6_Click()
    Dim Rng As Range
    Set Rng = Selection
    For Each cell In Rng
    If IsEmpty(cell.Value) = False Then
    cell.Value = Replace(cell.Value, Chr(9), "'")
    End If
    Next cell
End Sub

我已将制表符空间设置为用撇号代替,以使最终值不会像在我使用clean函数时发生的那样被截断。

再次感谢大家!