Excel Vba(点击按钮)

Excel Vba(点击按钮)

我有一张工作表,其中包含“代码、操作、标题、日期、名称、描述、状态”列。格式都是通用的。

code:4566, 4899, 4987, 4988, 4989  
operation:X,Y,Z,X,Y  
title:XX,YY,ZZ,RR,XXY  
date: (the date column is not blank)  
name:Adam,Edward,Adam,Kris,Chris  
description: (some rows has data for this column, some are blank)  
status: active, inactive, closed

我正在尝试将“名称”列包含“Adam”或“Edward”且“状态”列包含“active”的行复制到仅包含“代码、标题、日期、名称、说明、状态”列的新工作表中。(我不想在新工作表中出现“操作”列)

此时,我不介意行中的某些描述单元格是否为空。我仍然希望它出现在结果中。

最后返回的值只有 2 行:4566 和 4987
我可以手动完成。但我想试试是否可以通过 vba 一键完成(自动化过程)

谢谢。

P/S:抱歉,暂时没有包括我所拥有的内容,这里是

Options Explicit

Sub Button1_Click()

Dim myRow As Long 'for finding last row  
Dim xlast As Integer 'x is the last row  
Dim sht As Worksheet 'original sheet  
Dim newsht As Worksheet 'sheet with new data  

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

myCol = code  
xlast = sht.Cells(Rows.Count, myCol).End(xlUp).Row  
'go through my code column for non-blank

For x = 1 To xlast 'from 1st row till last row  
(tab)    If (sheet.name.Cells() = "Adam" OR "Edward") And (sheet.status.Cells() = "active")  
(tab)    Then newsht.Rows.Value(code,title,date,name,description,status) = sheet.Rows().Value(code,title,date,name,description,status)  
    End If  
Next

End Sub

答案1

您的示例代码存在一些问题:

sheet.name.Cells() = “Adam” 或 “Edward”

  • 您需要一次检查一个单元格,而不是 Cells()
  • 要引用单元格的值,需要引用单元格的 Value 属性,即 sheet.range().value = "Adam"
  • 每个比较(Adam 或 Edward)都需要单独评估,即 range().value = "Adam" OR range().value = "Edward"

newsht.Rows.Value(代码、标题、日期、名称、描述、状态)

  • 值不接受这样的命名范围
  • 此代码未使用迭代器说将数据复制到 sheet2 中的哪一行

尝试以下代码。您可以根据需要将其分配给按钮。您需要更改范围数据新数据以适合您的工作表。您的代码的主要变化是抵消用于遍历各个行和列(从数据块的左上角偏移)以检查每行数据。每个检查或副本都经过明确编码。

Sub macro2()

Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
'Set dat = sht.Range("p9")
Set dat = sht.Range("code").Cells(1, 1)
Set newdat = newsht.Range("c2")

'initialise counters
i = 1
j = 1

'set headings on sheet 2
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 till code data goes blank
  If ((dat.Offset(i, 4).Value = "Adam" Or dat.Offset(i, 4).Value = "Edward") 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


End Sub

相关内容