向您请求一些更高级的excel VBA向导的帮助。
情况:我是各种医疗管理员。由于我的个人跟踪器确实包含很多HIPPA,因此HIPPA显然是我关心的问题,并且整个“需要知道”的内容很重要。我需要有一个工作簿供我的下属人员查看,而不会违反HIPPA
我有一本包含大量数据的工作簿。我希望单独的工作簿(Book2)从A列(患者单位)和B列(他们的名字)中提取名称,如果它们满足来自单独列的数字或文本条件的话(我们将其称为D列)。
我知道我可以过滤,然后复制/粘贴他们所需的列表或数据,但是这对于5个独立的单元(每个单元有100多个患者)来说很费时间。如果有可能,我希望与Book2共享该选项,让他们在名称旁边留下评论。这个想法只是更新BookA,因此可以实时获取最新名称。
我尝试了VBA并根据我的标准对其进行了自定义,但似乎找不到任何有效的方法。任何帮助表示赞赏。
* OP注意-在这整个宏方面,我还是一个新手。我还没写自己的代码,只是偷了别人的努力。以前的需求已经成功完成了。
答案 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”中,则只需更改名称即可满足您的需求。
花点时间仔细阅读它,不要花一些评论来帮助您更好地了解它的工作方式。