我在这里问了一个相关的问题。
阿德莱德爵士为我提供了这个非常有用的解决方案。
所以现在,在这种几乎相似的情况下,我的工作簿中有2个excel表格。
[Xsheet] [1] Sheet1
我将遍历Sheet1中的名称和描述列,以查看它是否与XSheet的名称或描述列中的值匹配(该列中可能有无限的数据行)。如果这样做,那么Sheet1中的“那个”行将被复制到新的Sheet2中。
我在以前的编码(由阿德莱德爵士提供)中做了一些修改,
Sub Procedure2()
Dim xsht As Worksheet
Dim sht As Worksheet 'original sheet
Dim newsht As Worksheet 'sheet with new data
Set xsht = ThisWorkbook.Worksheets("Xsheet")
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
'Set dat = sht.Range("code").Cells(1,1)
Set main = xsht.Range("A1")
Set dat = sht.Range("A1")
Set newdat = newsht.Range("A1")
'initialise counters
i = 1
j = 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 dat.Offset(i, 0).Value <> "" 'loop row till code data goes blank
If ((main.Offset(i, 0).Value = dat.Offset(i, 4).Value Or _
main.Offset(i, 1).Value = dat.Offset(i, 5).Value) And dat.Offset(i, 6).Value = "active") Then 'check conditions
newdat.Offset(j, 0).Value = dat.Offset(i, 0).Value 'copy code
newdat.Offset(j, 1).Value = dat.Offset(i, 2).Value 'copy title
newdat.Offset(j, 2).Value = dat.Offset(i, 3).Value 'copy date
newdat.Offset(j, 3).Value = dat.Offset(i, 4).Value 'copy name
newdat.Offset(j, 4).Value = dat.Offset(i, 5).Value 'copy descr
newdat.Offset(j, 5).Value = dat.Offset(i, 6).Value 'copy status
j = j + 1
End If
i = i + 1
Loop
提供的任何建议将不胜感激。谢谢你。
输出嗨,我试图运行更新的代码。
这是我的输出,但是有一个无效的情况,这是不正确的。
正确的输出应为4566、4987、4988。
我已经检查了代码,Idk出了什么问题
我没有Xsheet链接,因为我没有足够的声誉来制作2个以上的超链接
现在,我遍历Sheet1以查看其是否与Xsheet中的列匹配。
4566,它与名称col中的“ Adam”相匹配(因为它是名称或描述,所以如果名称匹配则为匹配),并且(必须是活动的),所以它为
in。4899,Edward是一个匹配项(或任何描述),但不匹配和主动,所以没有。
4987,与4566相同,它的Adam和active。
4988,Kris(不是比赛名称),但是al在Xsheet的描述中是有效的,所以它处于活动状态。4989
,Chris不是比赛名称,ttr不是比赛描述,即使是活动情况(我也不会接受) )
到目前为止,感谢您的指导。对此,我真的非常感激。
因此,在找出您真正在做什么之后。问题很简单:
“如果在数据表中找到了主列表上的名称或描述,并且该名称或描述也处于活动状态,则将其复制到新的表上”。
这是您最近评论的代码修订版。
Sub Procedure2()
Dim xsht As Worksheet
Dim sht As Worksheet 'original sheet
Dim newsht As Worksheet 'sheet with new data
Set xsht = ThisWorkbook.Worksheets("Xsheet")
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
'Set dat = sht.Range("code").Cells(1,1)
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
End Sub
修订后的代码有四个更改。通过在OUTER循环中添加了检查,以在“名称”字段中包含空格Or main.Offset(i, 1).Value <> ""
。在If语句中,将信息的评估位置从i到i_value更改为i到j_value。在新工作表中添加了第三个计数器,用于将数据放置到新数据中,以便将数据复制到Sheet2。最后是嵌套循环(循环内的循环)。循环外:逐行查看主列表(xSheet);永不重复。内部循环:查看数据表以从上至下进行比较;重复“主列表”中的每个新行。
您甚至可以将If语句更改为考虑“活动”与“活动”或“ A”或“ a”。这是一个方便使用的下拉列表的地方,但这本身就是另一个问题。
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" Or dat.Offset(j, 6).Value = "Active") Then
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句