Excel VBA union 从列中删除数据

Excel VBA union deletes data from column

我正在做的事情非常简单——选择一个列的并集,其中包含存储为文本的数字并转换它们。每次运行时,所有偶数联合编号的数据列都会被清除。

Union(Columns(19), Columns(22), Columns(25), Columns(28), Columns(31), Columns(34), Columns(37), Columns(40), Columns(43), Columns(46)).Select
With Selection
.Value = .Value
End With

虽然我多次查看了我的整个代码,但还是无法理解为什么这会表现得如此奇怪。非常感谢任何帮助。

尽量避免使用 Select,并充分限定您的范围。这使事情更容易诊断并且更可靠...

Dim myRange As Range
With ThisWorkbook.Sheets("Sheet1")
    Set myRange = Union(.Columns(19), .Columns(22), .Columns(25)) ' etc.
End With

现在,如果您要尝试将文本转换为数字,最好使用 NumberFormat 属性,如此处所述:What are .NumberFormat Options In Excel VBA?

遍历范围区域和数字格式:

Dim area As Range
For Each area In myRange.Areas
    area.NumberFormat = 0 ' for numbers, could still use area.Value = area.Value
Next area

不连续范围的 Value 属性 仅 returns 该范围的第一个区域。然后,当您尝试将该值(在本例中为数组)分配回不连续的范围时,您会得到奇怪的结果。对于这种特殊情况,每隔一列将获得第一个区域中第一个单元格的值。

您应该遍历范围内的区域。

For each rArea in Selection.Areas
   rarea.value2 = rarea.value2
Next rarea