Vba Excel:使用OR列条件而不复制行

Excel新手

这是为此的更新版本

上面的解决方案是好的,直到我意识到当我输入海量数据时,for循环会生成重复的行(这是不需要的结果)

我在网上找到了一些方法来删除重复的行。

ActiveSheet.Range(“ A:F”)。RemoveDuplicates列:= 1,标题:= xlNo

但这会浪费时间来生成更新的数据,然后再删除重复的数据。

我的LOGIC是否造成重复?

现在让我举例说明我的问题,

code name description status    
4566 Adam al          active

因为亚当是一场比赛,而且很活跃,所以我得到4566;记录。
但按照我的逻辑,我又得到了4566。

谢谢你。关于功能/方法或代码的任何建议将不胜感激。

编辑
代码是这组数据中的唯一值。我有Xsheet,其中两列都是独立且不均匀的,但没有重复项(此表是动态的)。

  • Sheet1是生成的原始数据,是一个动态数据库。
  • Xsheet和Sheet1都是未排序的随机数据。

我正在尝试做的事情。

如果在数据表(Sheet1)中找到了主列表(Xsheet)上的名称或说明,并且该名称或描述也处于活动状态,则将其复制到没有重复的新表中(相同的代码与Sheet2相同)。由于某些代码具有匹配的“名称”和“描述”。

显然,重复不是我遇到的唯一问题,但我认为我应该一次解决一个问题。当我没有其他问题的答复时,我为另一个问题创建了一个新问题。

这是Xsheet。

name    description
Adam    al
Edward  dc
Rose    tp
Jen 
Owen    
Jack    
Belle   
Sally   
Cindy   
Max 
Zack    
Moon    
Shawn   

这是Sheet1。

code    operation   title   date    name    description status
4566                Adam    ttr active
4899                Edward  ttp inactive
4987                Adam    dc  active
4988                Kris    al  active
4989                Chris   ttr inactive
5713                Mary    rt  active
5312                Ken     active
3211                John        active
2138                Summer      active
3334                Wendy       active
5417                Adam        active
3355                Belle       active
4773                Adam        active
3288                Ron     inactive
1289                Wincy   dc  active

这是vba。

Sub Procedure2()

Dim xsht As Worksheet
Dim sht As Worksheet 'original sheet
Dim newsht As Worksheet 'sheet with new data

Application.ScreenUpdating = False

Set xsht = ThisWorkbook.Worksheets("Xsheet")
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")

Set main = xsht.Range("A1")
Set dat = sht.Range("A1")
Set newdat = newsht.Range("A1")

'initialise counters
Dim i, j, iRow As Integer   'instantiate and initialize the integers
i = 1
j = 1
iRow = 1

'set heading on sheet2
newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value 'copy code
newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value 'copy title
newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value 'copy date
newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value 'copy name
newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value 'copy descr
newdat.Offset(0, 5).Value = dat.Offset(0, 6).Value 'copy status

Do While main.Offset(i, 0).Value <> "" Or main.Offset(i, 1).Value <> ""

  j = 1     'reset DataSheet pointer

  Do While dat.Offset(j, 0).Value <> ""

    If (main.Offset(i, 0).Value = dat.Offset(j, 4).Value _
    Or main.Offset(i, 1).Value = dat.Offset(j, 5).Value) _
    And dat.Offset(j, 6).Value = "active" Then

      newdat.Offset(iRow, 0).Value = dat.Offset(j, 0).Value 'copy code
      newdat.Offset(iRow, 1).Value = dat.Offset(j, 2).Value 'copy title
      newdat.Offset(iRow, 2).Value = dat.Offset(j, 3).Value 'copy date
      newdat.Offset(iRow, 3).Value = dat.Offset(j, 4).Value 'copy name
      newdat.Offset(iRow, 4).Value = dat.Offset(j, 5).Value 'copy descr
      newdat.Offset(iRow, 5).Value = dat.Offset(j, 6).Value 'copy status
      iRow = iRow + 1
    End If
    j = j + 1     'increment DataSheet pointer; fast moving; changing/resetting
  Loop

  i = i + 1     'increment XSheet pointer; slow moving outer loop; not resetting
Loop

Application.ScreenUpdating = True

End Sub
十亿字节

这是您上次总结我的情况的一句话。
“如果在数据表中找到了主列表上的名称或描述,并且该名称或描述也处于活动状态,则将其复制到新的表上”。

Sub check_listX()

'Set dat = sht.Range("code").Cells(1,1)
Set main = ThisWorkbook.Worksheets("Xsheet").Range("A1")
Set dat = ThisWorkbook.Worksheets("Sheet1").Range("A1")
Set newdat = ThisWorkbook.Worksheets("Sheet2").Range("A1")

'initialise counters
Dim i, j, iRow As Integer   'instantiate and initialize the integers
i = 1
j = 1
iRow = 1

'set heading on sheet2
newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value 'copy code
newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value 'copy title
newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value 'copy date
newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value 'copy name
newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value 'copy descr
newdat.Offset(0, 5).Value = dat.Offset(0, 6).Value 'copy status

Do While main.Offset(i, 0).Value <> "" Or main.Offset(i, 1).Value <> ""

  j = 1     'reset DataSheet pointer

  Do While dat.Offset(j, 0).Value <> ""

  If dat.Offset(j, 6).Value = "active" _
      And main.Offset(i, 0) = dat.Offset(j, 4) _
      Or main.Offset(i, 1) = dat.Offset(j, 5) _
      And dat.Offset(j, 5) <> "" Then

      newdat.Offset(iRow, 0).Value = dat.Offset(j, 0).Value 'copy code
      newdat.Offset(iRow, 1).Value = dat.Offset(j, 2).Value 'copy title
      newdat.Offset(iRow, 2).Value = dat.Offset(j, 3).Value 'copy date
      newdat.Offset(iRow, 3).Value = dat.Offset(j, 4).Value 'copy name
      newdat.Offset(iRow, 4).Value = dat.Offset(j, 5).Value 'copy descr
      newdat.Offset(iRow, 5).Value = dat.Offset(j, 6).Value 'copy status
      iRow = iRow + 1
    End If
    j = j + 1     'increment DataSheet pointer; fast moving; changing/resetting
  Loop

  i = i + 1     'increment XSheet pointer; slow moving outer loop; not resetting
Loop
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel VBA-自动筛选(2列/ 2条条件)复制与条件不匹配的行

来自分类Dev

使用Excel VBA复制列中的范围

来自分类Dev

Excel-VBA。移动公式而不复制它们

来自分类Dev

使用特定条件在excel中使用vba复制数据

来自分类Dev

Excel VBA 按钮。将行从 Sheet1 复制到 Sheet2 / 条件:列值

来自分类Dev

Excel VBA复制并粘贴整个范围与条件?

来自分类Dev

Excel VBA使用自动筛选器复制行

来自分类Dev

使用通配符防止小计行被过滤和复制excel vba

来自分类Dev

使用 VBA 将符合条件的行复制到 Excel 中的两个或多个不同的工作表中

来自分类Dev

使用Excel VBA宏将一行数据复制并粘贴到单独的行和交错的列中

来自分类Dev

获取记录集值而不复制到工作表(Excel VBA)

来自分类Dev

Excel VBA在For循环中复制行

来自分类Dev

Excel VBA 行复制粘贴错误

来自分类Dev

Excel 2010 VBA帮助复制列的范围

来自分类Dev

在Excel-Vba中复制多列

来自分类Dev

excel VBA 上的复制粘贴列

来自分类Dev

如何使用VBA根据条件删除Excel ListObject中的行?

来自分类Dev

Excel VBA复制

来自分类Dev

Excel VBA 复制多行

来自分类Dev

VBA | 遍历每一行,如果列匹配条件,则复制粘贴行

来自分类Dev

将满足条件的数组值复制到另一列excel vba

来自分类Dev

使用Outlook VBA从Excel文件复制/粘贴。

来自分类Dev

在Excel中使用VBA复制粘贴

来自分类Dev

无法使用 VBA 复制 Excel 地图图表

来自分类Dev

VBA复制行的范围

来自分类Dev

复制某些列VBA

来自分类Dev

Excel(或VBA)条件转置行

来自分类Dev

Excel(或VBA)条件转置行

来自分类Dev

使用列函数 - Excel VBA