Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 删除选定单元格中的空行_Vba_Excel - Fatal编程技术网

Vba 删除选定单元格中的空行

Vba 删除选定单元格中的空行,vba,excel,Vba,Excel,我试图从excel中的单元格中仅删除空行。以下是我想说的: +-----------------+ +---------------------+ +---------------------+ | EXAMPLE DATA | | EXPLANATION | | EXPECTED RESULT | +-----------------+ +---------------------+ +---------------------

我试图从excel中的单元格中仅删除空行。以下是我想说的:

+-----------------+    +---------------------+    +---------------------+
|  EXAMPLE DATA   |    |    EXPLANATION      |    |   EXPECTED RESULT   |
+-----------------+    +---------------------+    +---------------------+
| cell1_text1     |    | cell1_text1         |    | cell1_text1         |
| cell1_text2     |    | cell1_text2         |    | cell1_text2         |
+-----------------+    +---------------------+    +---------------------+
|                 |    | cell2_empty_line    |    | cell2_text1         | 
| cell2_text1     |    | cell2_text1         |    +---------------------+ 
+-----------------+    +---------------------+    | cell3_text1         | 
| cell3_text1     |    | cell3_text1         |    | cell3_text2         | 
|                 |    | cell3_emptyline     |    +---------------------+ 
| cell3_text2     |    | cell3_text2         |    | cell4_text1         | 
+-----------------+    +---------------------+    +---------------------+ 
|                 |    | cell4_emptyline     |    | cell5_text1         | 
|                 |    | cell4_emptyline     |    +---------------------+ 
| cell4_text1     |    | cell4_text1         |    | cell6_text1         | 
+-----------------+    +---------------------+    | cell6_text2         | 
| cell5_text1     |    | cell5_text1         |    | cell6_text3         | 
+-----------------+    +---------------------+    | cell6_text4         | 
| cell6_text1     |    | cell6_text1         |    +---------------------+ 
| cell6_text2     |    | cell6_text2         |
| cell6_text3     |    | cell6_text3         |
|                 |    | cell6_emptyline     |
| cell6_text4     |    | cell6_text4         |
+-----------------+    +---------------------+
我有:

如何测试行是否不包含任何其他字母,并仅删除单元格中的该行? 如何仅将该宏应用于当前选定的单元格?

这样可以:

与其替换回车符,不如在回车符上拆分,然后循环并仅用具有值的项替换该值

Sub RemoveCarriageReturns()
    Dim MyRange As Range
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    For Each MyRange In ActiveSheet.UsedRange
        Dim textArr() As String
        textArr = Split(MyRange.Value, Chr(10))
        MyRange.Value = ""
        For i = LBound(textArr) To UBound(textArr)
            If textArr(i) <> "" Then
                If MyRange.Value = "" Then
                    MyRange.Value = textArr(i)
                Else
                    MyRange.Value = MyRange.Value & Chr(10) & textArr(i)
                End If
            End If
        Next i
    Next

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Sub-RemoveCarriageReturns()
将MyRange变暗为Range
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
对于ActiveSheet.UsedRange中的每个MyRange
Dim textArr()作为字符串
textArr=Split(MyRange.Value,Chr(10))
MyRange.Value=“”
对于i=LBound(textArr)到UBound(textArr)
如果textArr(i)“,则
如果MyRange.Value=”“,则
MyRange.Value=textArr(i)
其他的
MyRange.Value=MyRange.Value&Chr(10)&textArr(i)
如果结束
如果结束
接下来我
下一个
Application.ScreenUpdating=True
Application.Calculation=xlCalculationAutomatic
端接头
这样就可以了:

与其替换回车符,不如在回车符上拆分,然后循环并仅用具有值的项替换该值

Sub RemoveCarriageReturns()
    Dim MyRange As Range
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    For Each MyRange In ActiveSheet.UsedRange
        Dim textArr() As String
        textArr = Split(MyRange.Value, Chr(10))
        MyRange.Value = ""
        For i = LBound(textArr) To UBound(textArr)
            If textArr(i) <> "" Then
                If MyRange.Value = "" Then
                    MyRange.Value = textArr(i)
                Else
                    MyRange.Value = MyRange.Value & Chr(10) & textArr(i)
                End If
            End If
        Next i
    Next

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Sub-RemoveCarriageReturns()
将MyRange变暗为Range
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
对于ActiveSheet.UsedRange中的每个MyRange
Dim textArr()作为字符串
textArr=Split(MyRange.Value,Chr(10))
MyRange.Value=“”
对于i=LBound(textArr)到UBound(textArr)
如果textArr(i)“,则
如果MyRange.Value=”“,则
MyRange.Value=textArr(i)
其他的
MyRange.Value=MyRange.Value&Chr(10)&textArr(i)
如果结束
如果结束
接下来我
下一个
Application.ScreenUpdating=True
Application.Calculation=xlCalculationAutomatic
端接头

您需要定位并删除错误的换行符(例如vbLF、
Chr(10)
或ASCII 010 dec)。如果数据是从外部源复制的,则流氓回车字符(例如vbCR或
Chr(13)
)可能会有背驮,也应清除这些字符

Sub clean_blank_lines()
    Dim rw As Long
    
    With Worksheets("Sheet3")   '<~~SET THIS WORKSHEET REFERENCE PROPERLY!
        For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            With .Cells(rw, 1)
                .Value = Replace(.Value2, Chr(13), Chr(10))
                Do While Left(.Value2, 1) = Chr(10): .Value = Mid(.Value2, 2): Loop
                Do While CBool(InStr(1, .Value, Chr(10) & Chr(10)))
                    .Value = Replace(.Value2, Chr(10) & Chr(10), Chr(10))
                Loop
                Do While Right(.Value2, 1) = Chr(10): .Value = Left(.Value2, Len(.Value2) - 1): Loop
            End With
            .Rows(rw).EntireRow.AutoFit
        Next rw
    End With
End Sub
Sub clean_blank_line()
变暗rw为长

使用工作表(“Sheet3”)时,您需要查找并删除错误的换行符(例如vbLF、
Chr(10)
或ASCII 010 dec)。如果数据是从外部源复制的,则流氓回车字符(例如vbCR或
Chr(13)
)可能会有背驮,也应清除这些字符

Sub clean_blank_lines()
    Dim rw As Long
    
    With Worksheets("Sheet3")   '<~~SET THIS WORKSHEET REFERENCE PROPERLY!
        For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            With .Cells(rw, 1)
                .Value = Replace(.Value2, Chr(13), Chr(10))
                Do While Left(.Value2, 1) = Chr(10): .Value = Mid(.Value2, 2): Loop
                Do While CBool(InStr(1, .Value, Chr(10) & Chr(10)))
                    .Value = Replace(.Value2, Chr(10) & Chr(10), Chr(10))
                Loop
                Do While Right(.Value2, 1) = Chr(10): .Value = Left(.Value2, Len(.Value2) - 1): Loop
            End With
            .Rows(rw).EntireRow.AutoFit
        Next rw
    End With
End Sub
Sub clean_blank_line()
变暗rw为长

对于工作表(“Sheet3”)“您只有一个在-----------行之间移动值,对吗?您只有一个在------行之间移动值,对吗?”?