VBA仅对文本进行排序,忽略带公式的单元格
我有一个非常大的表格,大约有150列,其中大部分包含公式。当我想对输入到不使用公式的单元格中的数据进行排序时,会把整个表格弄乱。-输入单元格不在一起 目前,我在VBA中的解决方案是将单元格复制到另一个(隐藏)工作表中,排序并将其全部放回原处。我只是觉得这对于一个看似简单的任务来说太多了。有没有更聪明的方法来解决这个问题 编辑 qua@varocabas我尝试了以下代码:VBA仅对文本进行排序,忽略带公式的单元格,vba,excel,Vba,Excel,我有一个非常大的表格,大约有150列,其中大部分包含公式。当我想对输入到不使用公式的单元格中的数据进行排序时,会把整个表格弄乱。-输入单元格不在一起 目前,我在VBA中的解决方案是将单元格复制到另一个(隐藏)工作表中,排序并将其全部放回原处。我只是觉得这对于一个看似简单的任务来说太多了。有没有更聪明的方法来解决这个问题 编辑 qua@varocabas我尝试了以下代码: Private Sub sortInputButton_Click() ' This sub sorts the in
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
但是这给了我一个错误
您选择的命令不能用多个选项执行。选择一个范围,然后再次单击该命令。
您可以使用特殊单元格
:
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"
你不需要
错误转到0
,也不需要targetRange.Cells.count
(如果targetRange
没有单元格,错误恢复下一步将捕获它->这就是我包括这一行的原因;SpecialCells
有这个小限制)。您不需要任何。请选择其中一个呼叫。大概引起.Sort
错误的是表单(“输入”).Range(“A3”)
,我用targetRange
(无论是什么)的第一个单元格替换了它。这一点起初似乎有效,但我发现它只有在输入详细信息之前才有效。然后我得到了这个错误:您选择的命令不能用多个选项执行。选择一个区域,然后再次单击命令。
我有6个用户输入的数据单元格,然后是20x[formula][input]
,后面还有很多。我的观点是,输入和公式是混合的。@Kentora我不理解这个问题。你能用你试过的代码更新你的问题吗?这样我就可以帮你了?这个解决方案应该可以不受任何限制地工作。@Kentora另外,我还包括了一个错误捕获,因此它在任何情况下都不能输出错误(在最坏的情况下,它不会工作)。我现在更新了这个问题。我遇到的问题不是Specialcells
命令,而是排序本身。@Kentora OK。代码中有各种冗余部分,但无论如何都应该可以工作。问题很可能是由您用作排序参考的图纸(“输入”).Range(“A3”)引起的,尽管targetRage中可能不存在(可能有公式)。将更新我的答案现在与代码,我希望你会发现有用的。