我有一张包含约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.
答案 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
的第一个单元格(无论它是什么)取而代之。