2015-05-01 32 views
0

我有一个电子表格,基本上有两个不同年份的数据集,我将它们放入一个电子表格中进行比较,并将行添加到任意一组数据中。我已经有一个宏,它比较我需要的单元格并插入行以排列数据,有时它会错过某些内容,并且将一行空白行添加到其中一个不应存在的数据集中,然后将所有内容它出了问题。因此,我必须修复区域中的对齐方式,在未对齐后删除相应数据集中的所有空白行,然后重新运行我的宏,希望它不会再次混乱。根据用户选择删除空白行

因此,为了加快空行删除部分,我试图让一个宏为我做这个。例如,我有来自2014年的数据,从ADC和2010年的数据从DEEG。我试图创建另一个宏,这将允许我选择一系列单元格,如DE69:EG69,它将遍历同一列范围中的每一行​​,DE71:EG71等,如果范围内的所有单元格均为空白,请删除范围并向上移动数据。我尝试在网上找到的所有东西似乎都会删除整行,而不仅仅是我选择的范围。

我甚至尝试了一些方法,说它可以通过选择范围并运行宏来工作,但这似乎也不起作用。

因此,我试图记录宏,然后进行所需的编辑,但我仍然有问题。我试图使用其他宏的一些代码来允许输入框弹出,并将列字母放在数据集的开始和结束位置,但目前为止它不工作。

Option Explicit 
Sub delee() 
Dim colX As String 
Dim colX2 As String 
colX = UCase(InputBox("Enter the left column", "Compare Columns", "A")) 
colX2 = UCase(InputBox("Enter the last column", "Compare Columns", "E")) 
    Range(colX & "1000000:" & colX2 & "1000000").Select 
    Selection.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp 
End Sub 

回答

0

所以,如果有人在搜索时发现了这个问题,下面是我用来得到我需要的东西。本质上,一个输入框会出现并询问选择中的第一个单元格和选择中的最后一个单元格,在第一列选择中过滤掉空白,选择并删除空白行。这可能需要一段时间取决于您的数据的大小,但它的工作原理。感谢提供建议和帮助的两位!

Sub deleteblanks() 

Dim colX As String 
Dim zzz As String 
Dim lastRow As Long 


lastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 

MsgBox lastRow 

colX = UCase(InputBox("Enter The Start Of Data To Be Filtered", "Delete Blanks", "A")) 
zzz = UCase(InputBox("Enter The End of Data To Be Filtered(Last Column Last Row)", "Delete Blanks", "AM65500")) 

Range(colX & ":" & zzz).Select 
Selection.AutoFilter 
ActiveSheet.Range(colX & ":" & zzz).AutoFilter Field:=1, Criteria1:="=" 
ActiveWindow.SmallScroll Down:=-3 
Range(colX & ":" & zzz).Select 
Selection.SpecialCells(xlCellTypeVisible).Select 
ActiveSheet.ShowAllData 
Selection.Delete Shift:=xlUp 
End Sub 
0

执行以下操作:在同一行上

“录制宏”

亮点3或4个细胞。

右键单击“删除”,选择“换行”。

单击确定。

然后点击“停止录制”。

进入并查看您的宏。

我结束了与此:

Sub Macro1() 
' 
' Macro1 Macro 
' 

' 
    Range("A5:B5").Select 
    Selection.Delete Shift:=xlUp 
End Sub 

所以,显示你的 “基本常识” ..你需要做两件事情:

1) "Select" your range you want to delete. (sounds like you can build this, since you'll know what row you want, and you know what columns, so just build the string, and: `Range(yourstring).select` 

2) tell it to delete + shift up .. 

希望帮助.. :)

+1

这并没有解决检查空白行问题,这似乎是这里的核心问题。 –

+0

谢谢同上,但拜伦是正确的,主要问题是试图告诉宏只删除某一行的范围,如果所有的单元格都是空白的。 – xcallmeclayx

+0

啊,好吧...没有烦恼..让我想一下更多:) – Ditto

1

给此代码一张

Dim BlankHits as Long 
Dim NormalHits as Long 
For Each Target in Selection 
NormalHits = NormalHits + 1 
    If Target.Value = "" Then 
     BlankHits = BlankHits + 1 
    End If 
    If BlankHits = NormalHits Then 
     Selection.Delete Shift:= xlUp 
    End If 
Next Target 

它目前搜索您选择的单元格。如果你想要通过不同的范围搜索,那么改变选择的范围到你想要的任何范围。希望这可以帮助。

+0

嗨相当,谢谢你的回复!我试过你的代码,但是当我运行它时,我得到了“变量未定义”错误。 – xcallmeclayx

+0

好吧,我得到它运行,但它似乎删除我的选择,如果任何单元格中的选择是空白的,而不是要求他们都是空白的。 – xcallmeclayx

+0

嗯,当我测试它的代码完全符合你的规格。如果选择中的每个单元都是空白的,它只会删除行。所以我不确定你的问题是什么。 – FairlyLegit