Excel VBA联合从列中删除数据

时间:2017-07-18 11:38:07

标签: excel-vba excel-2007 vba excel

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

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

我看了很多次我的整个代码都不清楚为什么这表现得如此奇怪。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

尽量避免使用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