VBA-将列值转换为负值

VBA-将列值转换为负值,vba,excel,Vba,Excel,尝试将图纸数据_TC中的整列H从正值转换为负值。范围包括H1:LastRow 我将LastRow作为一个模块,如下所示 Option Explicit Function LastRow(sh As Worksheet) On Error Resume Next LastRow = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _

尝试将图纸数据_TC中的整列H从正值转换为负值。范围包括H1:LastRow

我将LastRow作为一个模块,如下所示

Option Explicit

Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            LookAt:=xlPart, _
                            LookIn:=xlValues, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
    On Error GoTo 0
End Function
下面是我用来转换值的代码:

Worksheets("Data_TC").Activate
Application.ScreenUpdating = False
Application.CutCopyMode = False

For Each cell In Sheets("Data_TC").Range("H" & LastRow(Sheets("Data_TC")))
  If cell.Value > 0 Then
    cell.Value = cell.Value * -1
  End If
Next cell
当我运行时,它会将随机值转换为负值,但仅此而已。知道为什么吗?

试试:

For Each myCell In Sheets("Data_TC").Range("H1:H" & Sheets("Data_TC").Range("H" & Rows.Count).End(xlUp).Row)
    If myCell.Value > 0 Then
        myCell.Value = myCell.Value * -1
    End If
Next myCell
这将遍历H列中的所有单元格,并将正数转换为负数

For Each myCell In Sheets("Data_TC").Range("H1:H" & Sheets("Data_TC").Range("H" & Rows.Count).End(xlUp).Row)
    If myCell.Value > 0 Then
        myCell.Value = myCell.Value * -1
    End If
Next myCell
这将遍历H列中的所有单元格,并将正数转换为负数

您需要一个单元格范围。您要做的是只检查最后一个有值的单元格。尝试更改:

For Each cell In Sheets("Data_TC").Range("H" & LastRow(Sheets("Data_TC")))
致:

你需要有一系列的细胞。您要做的是只检查最后一个有值的单元格。尝试更改:

For Each cell In Sheets("Data_TC").Range("H" & LastRow(Sheets("Data_TC")))
致:


根据我的测试,您可以尝试以下VBA代码:

Option Explicit
Sub convertValue()
Dim cell As Range
Worksheets("Data_TC").Activate
Application.ScreenUpdating = False
Application.CutCopyMode = False
For Each cell In Sheets("Data_TC").Range("H1:H" & LastRow(Sheets("Data_TC")))
  If cell.Value > 0 Then
    cell.Value = cell.Value * -1
  End If
Next cell
End Sub
Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                        After:=sh.Range("A1"), _
                        LookAt:=xlPart, _
                        LookIn:=xlValues, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Row
    On Error GoTo 0
End Function

希望它能帮助您。

根据我的测试,您可以尝试以下VBA代码:

Option Explicit
Sub convertValue()
Dim cell As Range
Worksheets("Data_TC").Activate
Application.ScreenUpdating = False
Application.CutCopyMode = False
For Each cell In Sheets("Data_TC").Range("H1:H" & LastRow(Sheets("Data_TC")))
  If cell.Value > 0 Then
    cell.Value = cell.Value * -1
  End If
Next cell
End Sub
Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                        After:=sh.Range("A1"), _
                        LookAt:=xlPart, _
                        LookIn:=xlValues, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Row
    On Error GoTo 0
End Function

希望它对您有所帮助。

投票以打字错误结束,您的范围仅由一个单元格定义:SheetsData\u TC.RangeH和LastRowSheetsData\u TC应该是SheetsData\u TC.RangeH1:H和LastRowSheetsData\u TC-如果这确实是随机的,然后,您应该提供一些输入和输出示例,以便我们有希望重现您在帖子中描述的问题:投票以键入结束,您的范围仅由单个单元格定义:SheetsData_TC.RangeH&LastRowSheetsData_TC应该是SheetsData_TC.RangeH&LastRowSheetsData_TC-如果这确实是随机的,然后,您应该提供一些示例输入和输出,以便我们有希望重现您在文章中描述的问题: