使范围内的所有单元格值均为负

时间:2019-02-08 19:31:06

标签: excel vba

我目前正在尝试做两件事。

1)在两列中交换值。这些值最初列为经度,然后是纬度。我希望首先列出“谷歌纵横”,并在代码的第一部分中做到这一点。

2)问题区域。经度以正值发布,但必须为负,因为负值将提供正确的位置。我在

上找到了答案

Convert column positive values to negative values VBA

使范围内的所有值均为负,并在范围内包括空白单元格值。我尝试更改代码以满足我的需要,但遇到运行时错误'1004'-对象'_Global'的方法'Range'失败。

如果有人可以帮助我,将不胜感激!

Public Sub CorrectLongitude()

    Dim tempRange As Variant
    Dim Longitude As Range
    Dim Latitude As Range

    '1) Swap Longitude and Latitude

    Worksheets("Raw_Data").Activate

    Set Longitude = Worksheets("Raw_Data").UsedRange.Columns("AR")
    Set Latitude = Worksheets("Raw_Data").UsedRange.Columns("AS")

    tempRange = Longitude.Cells
    Longitude.Cells.Value = Latitude.Cells.Value
    Latitude.Cells.Value = tempRange

    '2) Make Longitude values negative
    'Variable "Latitude is used as Latitude now contains the longitude values from above

    For Each Latitude In Range(Range("AS"), Range("AS" & Rows.Count).End(xlUp))

        If Not IsEmpty(Latitude.Value) Then If IsNumeric(Latitude.Value) Then Latitude.Value = -Abs(Latitude.Value)

        Next

End Sub

1 个答案:

答案 0 :(得分:1)

您实际上是在调用范围Range(Range("AS"),Range("AS1000"))。您缺少第一行引用。

For Each Latitude In Range(Range("AS1"), Range("AS" & Rows.Count).End(xlUp))

编辑:一个个人建议,不要使用For each Latitude,因为您将Latitude定义为其他地方的范围,这可能会使VBA /您自己感到困惑。我通常会做Dim cel as Range // For each cel in ...。如果您尝试在Latitude.Cells.Value循环之后使用For,则结果将与之前调用时大不相同。

假设使用For each cel in Latitude中的UsedRange包含了您需要的所有已使用行,您也许可以进行Set Latitude = ...