用于条件复制彼此不相邻的列的VBA代码

时间:2016-03-07 22:01:07

标签: excel vba excel-vba conditional

项目大师

Project Master

在使用VBA的MS Excel中,我希望在同一工作簿中的工作表之间进行条件复制方面的一些帮助。根据附图,我在工作表“Master”上有一个项目的主列表。对于列I(缺陷)中具有“是”的所有项目,我想复制A列(工程包发行日期),B(项目编号),E(城市)和H(合同价值)中的值。 )到同一工作簿中的另一个工作表“缺陷”。 你能提供一个编码,可以: a)折叠所有行,因此“缺陷”工作表中没有空行;和 b)保留所有行,如果“缺陷”列有“否”,则“主”工作表中的相关行将被复制为“缺陷”工作表中的空行, 如果可能的话。 请帮我编写代码 - 我对宏有非常基本的了解,并且在学习如何编写代码的过程中。 谢谢&此致,CK

2 个答案:

答案 0 :(得分:1)

试试这个让你入门。此外,在将来,请发布您拥有的代码,您遇到的错误或您遇到的具体问题,而不是要求代码来解决问题。如果你没有表明你已经付出了一些努力来自己提出解决方案,那么这里有很多其他的海报会简单地投票给你或删除你的帖子。

Sub CopyValues()

'Declare variables
'Declare sheet variables
Dim Masterws as Worksheet
Dim Defectws as worksheet

'Declare counter variables
Dim I as Integer
Dim n as Integer

'Set value of sheet variables
Set Masterws=ThisWorkbook.Sheets("Master")
Set Defectws=ThisWorkbook.Sheets("Defects")

'Set value of counter to track first available row on Defects sheet
n=1

'Start a For loop to check each row on Master sheet, starting with row 2
For I = 2 to WorksheetFunction.CountA(Masterws.Columns.EntireColumn(1))

    'If the cells in row I, column I have a value of, "Yes," then execute some code. If not, continue on.
    If Cells(I, "I").value= "Yes" Then

        'Set the value of cells in row n of the Defects sheet to the corresponding values of row I in the Master sheet. If n is replaced with I, then the value of cells in row I on Defects will be set to the values of Row I on Master, leaving blank rows where no, "Yes," was found because no copying took place.
        Defectws.Cells(n,"A").Value=Masterws.cells(I,"A")
        Defectws.Cells(n,"B").Value=Masterws.cells(I,"B")
        Defectws.Cells(n,"C").Value=Masterws.cells(I,"E")
        Defectws.Cells(n,"D").Value=Masterws.cells(I,"H")

        'Add 1 to the n counter. The next time a row is found in the Master sheet with, "Yes," it will be written to the next available row down on the Defects sheet.
        n=n+1

    End If

'End of the For loop. Move on to the next row on Master sheet
Next

End Sub

答案 1 :(得分:0)

@ asp8811感谢您的代码,它运作良好。很抱歉,我之前没有提到我已经拥有的东西 - 我是Stack Overflow的新手,而且是编码新手 - 我的代码将继续开始。以下是我到目前为止 - 将您的代码和答案结合到我之前提出的另一个问题中。你的代码很好,让我能够选择我选择的列,不像我下面的那样 - 它打印A和H之间的所有列。我的挑战是我想保留行(作为空行)如果有a"不"在缺陷列中 - 这是我在下面的内容,但我也想报告那些彼此不相邻的列,并且能够像你一样选择列。

def initialize(special_var)
  @special_var = special_var
end

def filename
  "#{@special_var}.#{file.extension}"
end