Excel 宏不会删除所有空白单元格
这是一个较长的查询,因为我包含了失败的代码 问题是:当我将文本文件导入excel后,我的工作表中包含许多“空白”单元格。我以前在其他地方成功地使用过下面的代码,但这次对我不起作用Excel 宏不会删除所有空白单元格,excel,excel-2010,vba,Excel,Excel 2010,Vba,这是一个较长的查询,因为我包含了失败的代码 问题是:当我将文本文件导入excel后,我的工作表中包含许多“空白”单元格。我以前在其他地方成功地使用过下面的代码,但这次对我不起作用 Range("b1:AZ60").Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Delete shift:=xlToLeft 我在网上搜索了一下,在下面找到了一些建议的解决方案。在上面的代码之前,我试着运行下面4段代码中的每一段,以清
Range("b1:AZ60").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete shift:=xlToLeft
我在网上搜索了一下,在下面找到了一些建议的解决方案。在上面的代码之前,我试着运行下面4段代码中的每一段,以清除假定空白单元格的内容,但到目前为止没有任何效果
第一-----------------------------
Set rng = Intersect(Selection, Selection.Parent.UsedRange)
For Each C In rng
If Trim(C) = "" Then
C.ClearContents
End If
Next C
For Each aCell In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
If Not aCell.Value Like "*[! ]*" Then aCell.ClearContents
Next
For Each C In rng
If IsEmpty(C) Then
C.Delete shift:=xlToLeft
Else
ActiveCell.Select
End If
Next C
我已经用c值替换了上面的饰件,但什么都没有
If C.Value <> "" Then
三号-------------------------
Set rng = Intersect(Selection, Selection.Parent.UsedRange)
For Each C In rng
If Trim(C) = "" Then
C.ClearContents
End If
Next C
For Each aCell In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
If Not aCell.Value Like "*[! ]*" Then aCell.ClearContents
Next
For Each C In rng
If IsEmpty(C) Then
C.Delete shift:=xlToLeft
Else
ActiveCell.Select
End If
Next C
4号-------------------
Set rng = Intersect(Selection, Selection.Parent.UsedRange)
For Each C In rng
If Trim(C) = "" Then
C.ClearContents
End If
Next C
For Each aCell In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
If Not aCell.Value Like "*[! ]*" Then aCell.ClearContents
Next
For Each C In rng
If IsEmpty(C) Then
C.Delete shift:=xlToLeft
Else
ActiveCell.Select
End If
Next C
最后,我找到了这个干净的函数,但这似乎不起作用
Set rng = Intersect(Selection, Selection.Parent.UsedRange)
For Each C In rng
If Not IsError(C) Then
C.Value = MEGACLEAN(C)
End If
Next C
'
'
'
End Sub
-----------------------------------------
Function MEGACLEAN(varVal As Variant)
Dim NewVal As Variant
If IsMissing(varVal) Then Exit Function
NewVal = Trim(varVal) 'remove spaces
NewVal = Application.WorksheetFunction.Clean(NewVal) 'remove most unwanted characters
NewVal = Application.WorksheetFunction.Substitute(NewVal, Chr(127), "") 'remove
ASCII#127
NewVal = Application.WorksheetFunction.Substitute(NewVal, Chr(160), "") 'remove
ASCII#160
MEGACLEAN = NewVal
End Function
也许这与我从中导入的文本文件有关,但由于我仍有一些空白单元格,所有这些都不能令人满意地工作。任何帮助都将不胜感激 找出这些空白单元格中的字符 选择一个单元格并运行下面的GetSelectionContents宏:
Sub GetSelectionContents()
MsgBox sAnalyseString(selection)
End Sub
Function sAnalyseString(sSTR As String) As String
Dim lLoop As Long, sTemp As String
For lLoop = 1 To Len(sSTR)
sTemp = sTemp & ", " & Asc(Mid(sSTR, lLoop, 1))
Next
sAnalyseString = Mid(sTemp, 2)
End Function
然后,一旦你有了神秘角色,在运行删除宏之前替换它
Activesheet.usedrange.Replace What:=chr32,Replacement:=,LookAt:=xlPart_
SearchOrder:=xlByColumns,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False不确定我是否应该回答我自己的问题,但我把上面的代码弄乱了,并将其与我找到的一个mcaro混合,得出了以下代码,速度相当慢,但它似乎对我起到了作用。谢谢你的所有意见
Set rangetext = Cells.SpecialCells( _
xlCellTypeConstants, _
xlTextValues)
For Each rangesheet In rangetext
If Trim(rangesheet.Value) = "" Then
rangesheet.ClearContents
End If
Next
Set rangetext = Nothing
Set rangesheet = Nothing
Range("b1:AZ60").Select
Set rng = Intersect(Selection, Selection.Parent.UsedRange)
For Each C In rng
If IsEmpty(C) Then
C.FormulaR1C1 = "=0"
If C.Value = 0 Then
C.ClearContents
C.Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete shift:=xlToLeft
End If
End If
Next C
你能张贴你的文本文件的样本吗?还是一个Excel文件的样本,包括空白的CysOR,你是否已经尝试进入空白的单元格中,看看里面的字符是什么导致它们出现空白,但不是吗?我打赌有一个回车会把事情搞糟。试着在空白细胞上替换掉CaReige ReutsChink细胞,看看它们是否真的与LeRangeA1在即时窗口中。如果结果不是零,则表示单元格并非真正为空。如果要检查实际文本,请将i=1到lenrangeA1的代码设置为:?ascmidrangeA1,i,1;;:下一步将向您展示字符的ascii值希普·皮尔森在他的网站上有一个有用的插件,名为,它将标记charactersHi@nutsch。我试过你的密码。Msgbox对一些细胞没有报告,而对其他细胞则报告了一系列的32秒。我发现32是一个空格的ASCII符号。我认为修剪功能可以处理空间?