Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Excel 删除单元格,但不删除行_Excel_Vbscript_Vba - Fatal编程技术网

Excel 删除单元格,但不删除行

Excel 删除单元格,但不删除行,excel,vbscript,vba,Excel,Vbscript,Vba,我有一个excel工作表,其中我从其他工作表中将数据拉入每个工作表的单独列中。我试图在我的任何一列中找到任何重复项并删除所有重复项例如:如果代码12gb中有三个,我想留下一个12gb。我想这样做,以便我可以自动计算有多少唯一值,然后自动填充一个图形。我尝试了许多不同的公式来实现这一点,但我认为需要VBA代码,但我以前从未使用过这种编码,因此我不确定该怎么做。下面是我的excel工作表的三列示例:我无法发布图像/excel工作表 12gb sdf vfg 22rg

我有一个excel工作表,其中我从其他工作表中将数据拉入每个工作表的单独列中。我试图在我的任何一列中找到任何重复项并删除所有重复项例如:如果代码12gb中有三个,我想留下一个12gb。我想这样做,以便我可以自动计算有多少唯一值,然后自动填充一个图形。我尝试了许多不同的公式来实现这一点,但我认为需要VBA代码,但我以前从未使用过这种编码,因此我不确定该怎么做。下面是我的excel工作表的三列示例:我无法发布图像/excel工作表

12gb        sdf     vfg
22rg        tttyhg  dsf
dfg455      ggff    df
fgfg        fff     vcs
4redd       ccv     dfgh
56ff        66hg    66y
yygf        66y     56ff
66ygt       yggfg   12gb
ghhg        
            vfg     

这是一个黑客宏,它依赖于特定的列和位置,所以我不太喜欢这个解决方案

它是通过记录我所做的手工任务生成的

添加一行以表示列的结尾 将第2列和第3列复制到第1列的末尾。 删除a列中的重复项 然后再次手动创建3列。基于添加的列末注释。


现在假设行数据不相关。如果是。。。这是行不通的。当Excel删除重复项时。

您可以这样做,尽管我相信还有更优雅的方法。原则上,我只是在检查值是否不在数组中后将每个值放入数组中:

Sub del_values()
Dim last_row, last_col, size, y As Integer
Dim arr() As Variant

'finding the last row and last column and calculating the possible size of the array

last_row = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
last_col = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
size = last_row * last_col
y = 0

'adjusting the array-size    
ReDim arr(size)

For Each cell In ActiveSheet.Range(Cells(1, 1), Cells(last_row, last_col))

'avoiding blank cells
If cell.Value > "" Then

'checking if value is already in the array - if not, add it to the array and increase y - if it is, clear the contents of the cell
If IsError(Application.Match(cell.Value, arr, 0)) Then
arr(y) = cell.Value
y = y + 1
Else
Cells(cell.Row, cell.Column).ClearContents
End If
End If
Next
End Sub
我不确定你想对包含重复项的单元格做什么,所以我只是清除了内容——你当然可以用

Cells(cell.Row, cell.Column).delete

顺便说一下,如果您想直接使用y,y等于唯一值的数目。

如果这是一次性的事情。。。手动将3列设为1。然后使用数据删除重复项。然后将1列放回3列。如果需要多次执行此操作,请录制宏。正在执行此操作。您使用的Excel版本是什么?
Cells(cell.Row, cell.Column).delete