用于导出/复制粘贴到单独工作簿的Excel宏

时间:2018-08-11 01:57:02

标签: excel vba excel-vba excel-2013

向您请求一些更高级的excel VBA向导的帮助。

情况:我是各种医疗管理员。由于我的个人跟踪器确实包含很多HIPPA,因此HIPPA显然是我关心的问题,并且整个“需要知道”的内容很重要。我需要有一个工作簿供我的下属人员查看,而不会违反HIPPA

我有一本包含大量数据的工作簿。我希望单独的工作簿(Book2)从A列(患者单位)和B列(他们的名字)中提取名称,如果它们满足来自单独列的数字或文本条件的话(我们将其称为D列)。

我知道我可以过滤,然后复制/粘贴他们所需的列表或数据,但是这对于5个独立的单元(每个单元有100多个患者)来说很费时间。如果有可能,我希望与Book2共享该选项,让他们在名称旁边留下评论。这个想法只是更新BookA,因此可以实时获取最新名称。

我尝试了VBA并根据我的标准对其进行了自定义,但似乎找不到任何有效的方法。任何帮助表示赞赏。

* OP注意-在这整个宏方面,我还是一个新手。我还没写自己的代码,只是偷了别人的努力。以前的需求已经成功完成了。

1 个答案:

答案 0 :(得分:0)

下面的代码应该使您入门(从Book2运行);

Sub CopyIfCriteria()
    'Get other workbook and worksheet
    Dim wb As Workbook
    Set wb = Excel.Workbooks("BookA.xlsx")

    Dim ws As Worksheet
    Set ws = wb.Worksheets("Sheet1")

    'Column 1 = A
    Dim unit As Long
    unit = 1

    'Column 2 = B
    Dim name As Long
    name = 2

    'Column 4 = D
    Dim criteria As Long
    criteria = 4

    'Row 1 = 1, change if headers
    Dim firstRow As Long
    firstRow = 1

    'Row n = last row with data
    Dim lastRow As Long
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

    'Current row index on BookA, starts at first row
    Dim copyIndex As Long
    copyIndex = firstRow

    'Current row index on Book2, starts at row 1
    Dim pasteIndex As Long
    pasteIndex = 1

    For copyIndex = firstRow To lastRow
        'Change what the condition is to check if criteria is correct
        If (CBool(ws.Cells(copyIndex, criteria).Value) = True) Then
            'Copy unit and name to the next available row on Book2; pasteIndex
            ws.Cells(copyIndex, unit).Copy Cells(pasteIndex, unit)
            ws.Cells(copyIndex, name).Copy Cells(pasteIndex, name)

            'Use pasteIndex to find what row we're up to on Book2, increment everytime we use a row
            pasteIndex = pasteIndex + 1
        End If
    Next copyIndex
End Sub

假设BookA工作簿已在Excel中打开,那么将简单地得到它,然后遍历每一行。如果D(4)列具有正确的条件,则它将该行的第1列和第2列(A和B)复制到Book2中的下一个未使用的行。

您将打开一个空白Excel文件(从中运行代码),并打开BookA(并在BookA上打开数据)。如果它们不在“ BookA.xlsx”或“ Sheet1”中,则只需更改名称即可满足您的需求。

花点时间仔细阅读它,不要花一些评论来帮助您更好地了解它的工作方式。