VBA只对文本进行排序,忽略带有公式的单元格

时间:2013-09-27 13:51:42

标签: excel vba excel-vba

我有一张包含约150列的非常大的纸张,其中大多数都包含公式。当我想对我输入到不使用公式的单元格的数据进行排序时,它会弄乱整个工作表。 - 输入单元格不在一起

目前,我在VBA中的解决方案是将单元格复制到另一个(隐藏)工作表,排序并将其全部放回原处。我觉得这对于看似简单的任务来说太过分了。有没有更聪明的方法来解决这个问题?

修改

qua @varocarbas我尝试了以下代码:

Private Sub sortInputButton_Click()
    ' This sub sorts the inpur, without messing up the references [hopefully]
    Dim rowCount As Integer
    Dim colCount As Integer

    rowCount = countItems
    colCount = 180

    Dim inputRange As Range
    Set inputRange = Sheets("Input").Range("A3")
    Set inputRange = inputRange.Resize(rowCount, colCount)

    Dim targetRange As Range

    On Error Resume Next ' If range is nothing, throws an error - we don't want that
    Set targetRange = inputRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If targetRange.Cells.count > 0 Then
        Sheets("Input").Select
        targetRange.Select
        Call targetRange.Sort(Sheets("Input").Range("A3"), xlAscending)
    End If

End Sub

但这给了我错误the command you chose cannot be performed with multiple selections. Select a single range and click the command again.

1 个答案:

答案 0 :(得分:0)

您可以使用SpecialCells

Dim targetRange As Range
On Error Resume Next 'In case of not finding any cell under the requested conditions.
Set targetRange = inputRange.SpecialCells(xlCellTypeConstants)

inputRange包含所有单元格,targetRange只包含不包含公式的单元格。

更新:

Dim targetRange As Range
On Error Resume Next ' If range is nothing, throws an error - we don't want that
Set targetRange = inputRange.SpecialCells(xlCellTypeConstants)
Call targetRange.Sort(targetRange.Cells(1, 1), xlAscending)
'targetRange.Sort targetRange.Cells(1, 1), xlAscending -> alternative not requiring "Call"

您不需要On Error GoTo 0,也不需要targetRange.Cells.count(如果targetRange没有单元格,On Error Resume Next会抓住它 - >这就是我包含此行的原因; SpecialCells有这个小限制)。您不需要任何.Select电话。可能会引发.Sort中的错误的是Sheets("Input").Range("A3"),我用targetRange的第一个单元格(无论它是什么)取而代之。