VBA для выбора строки на основе двух критериев; Одно точное значение, а другое значение является одним из нескольких из списка на другом листе

#excel #vba

#excel #vba

Вопрос:

Предоставленный код в настоящее время скопирует строку и поместит ее на другой лист, если код найдет строку, содержащую как «OlsonJo» (значение =) в одной ячейке, так и другую ячейку, содержащую «UT-*» (значение, подобное (thx, S. Craner)).

Я хотел бы изменить этот код, чтобы он по-прежнему включал значение =»OlsonJo», однако вторые критерии были бы из списка. Например, если строка содержит «OlsonJo», а второй критерий равен одному из этих в списке ниже (который находится на другом листе в рабочей книге).

 UHS-Committee
UHS-Admin-Managing UHS Services
UHS-Admin-Meetings with staff
UHS-Admin-Communicating w/staff
UHS-Admin-Update Lab Test Formul
UHS-Admin-Write Procedure Manual
UHS-Admin-Candidate Interview
UHS-Admin-Consult Emp amp; Rev Qual
UHS-Admin-Scheduling functions
UHS-Admin-Strategic Lab Plan
UHS-Admin-Budget Planning
UHS-Admin-Equip Select amp; Acquis.
UHS-Admin-Test Select amp; Valid.
UHS-Sup/Ment Res/Fell-Sup Paamp;Oth
UHS-Sup/Ment Res/Fell-1-1, Did
UHS-Sup/Ment Res/Fell-Sign O Case
UHS-Res/Fell-Interv ACGME pos
UHS-Res/Fell-Oth Act;Ad Res Prog
UHS-QA-Design/Analyze Lab QA Act
UHS-QA-Interpret Qual. Data/Rep
UHS-QA-Rev. Ext PT,QC,QM,amp; QAP
UHS-QA- Rev Investing Record lab events deviations
UHS-QA-Lab/Hospital Accred Act.
UHS-Autopsy-UHS Patient Autopsy
UHS-Analy-Clin Inform/Analy
UHS-Analy-Clin Inform EPIC Build
UHS-Analy-Proc.Improvem Act
UHS-Analy-Pop Hlth/Interd Coll
UHS-Analy-Clin Lab Util Mngt
  

затем скопируйте эту строку и поместите ее на указанный лист!

Мне не удалось найти руководство, которое включает в себя извлечение из списка параметров. Еще раз, заранее благодарю вас за ваше время!

 Sub FindOlsonUT()   
    Dim i, LastRow
    LastRow = Sheets("Sheet1").Range("A" amp; Rows.Count).End(xlUp).Row 'this line finds the last row used in a sheet.

    Sheets("Sheet2").Range("A2:M1000").ClearContents 'this line clears the contents of Sheet2 from A2 to M1000.

    For i = 2 To LastRow
        If Sheets("Sheet1").Cells(i, "D").Value = "OlsonJo" And Sheets("Sheet1").Cells(i, "H").Value Like "UT-*" Then 'the two criteria are in this line; exactly "OlsonJo" and contains "UT-"
            Sheets("Sheet1").Cells(i, "D").EntireRow.Copy Destination:=Sheets("Sheet2").Range("A" amp; Rows.Count).End(xlUp).Offset(1) 'destination is Sheet 2
        End If
    Next i
End Sub
  

Комментарии:

1. Вы все еще тестируете столбец H для списка UHS?

2. Да, это так. Столбец H. Спасибо!

3. вы не можете просто изменить Sheets("Sheet1").Cells(i, "H").Value Like "UT-*" на Sheets("Sheet1").Cells(i, "H").Value Like "UHS-*" ?

4. Я бы хотел… В столбце H листа 1 есть больше строк, начинающихся с «UHS-«, которые не соответствуют приведенным мной примерам. Эти конкретные задачи — это те, которые необходимо извлечь из большего набора данных. Еще раз спасибо!

5. Сколько существует других «UHS-«?

Ответ №1:

Это долгий путь вокруг сарая, но это работает. Разделено на подразделы. Один подраздел ищет все строки с одним из 8 или 9 различных значений, таких как «UHS-

 If Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Admin*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Sup/Ment Res/Fell-*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Res/Fell-*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-QA-*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Sup*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Autopsy-UHS Patient Autopsy" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Analy-*" Then
  

и копирует эти строки на Лист2.

Второй подраздел разделяет эти задачи на разные листы по пользователям.

 Sub FindFiebelkornUHSAOA()
Dim i, LastRow
LastRow = Sheets("Sheet2").Range("A" amp; Rows.Count).End(xlUp).Row 'this line finds the last row used in a sheet.
Sheets("Sheet3").Range("A2:M1000").ClearContents 'this line clears the contents of Sheet3 from A11 to M1000. 
For i = 11 To LastRow
If Sheets("Sheet2").Cells(i, "D").Value = "FiebelkornKr" Then 
Sheets("Sheet2").Cells(i, "D").EntireRow.Copy Destination:=Sheets("Sheet3").Range("A" 
amp; Rows.Count).End(xlUp).Offset(1) '
End If
Next i
End Sub
  

Назначение — лист 3 для строк, содержащих FiebelkornKr.

Вот код, который достигает результата, который я ищу. К сожалению, я должен применить это к 40-50 пользователям.

 Option Explicit
Sub PathDocsTimeSheets()
Call ExtractUHSAOA
Call FindFiebelkornUHSAOA
Call FindFiebelkornUHSClinCare
Call FindGreebonUHSAOA
Call FindGreebonUHSClinCare
End Sub

Sub ExtractUHSAOA()
Dim i, LastRow
LastRow = Sheets("Sheet1").Range("A" amp; Rows.Count).End(xlUp).Row 'this line finds the last row used in a sheet.
Sheets("Sheet2").Range("A11:M1000").ClearContents f 
Sheet2 from A11to M1000.
For i = 11 To LastRow
If Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Admin*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Sup/Ment Res/Fell-*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Res/Fell-*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-QA-*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Sup*" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Autopsy-UHS Patient Autopsy" Or 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Analy-*" Then
Sheets("Sheet1").Cells(i, "D").EntireRow.Copy Destination:=Sheets("Sheet2").Range("A" amp; Rows.Count).End(xlUp).Offset(1) 'destination is Sheet2
End If
Next i
End Sub


Sub FindFiebelkornUHSAOA()
Dim i, LastRow
LastRow = Sheets("Sheet2").Range("A" amp; Rows.Count).End(xlUp).Row 'this line finds the last row used in a sheet.
Sheets("Sheet3").Range("A2:M1000").ClearContents 'this line clears the contents of Sheet3 from A11 to M1000.
For i = 11 To LastRow
If Sheets("Sheet2").Cells(i, "D").Value = "FiebelkornKr" Then 
Sheets("Sheet2").Cells(i, "D").EntireRow.Copy Destination:=Sheets("Sheet3").Range("A" 
amp; Rows.Count).End(xlUp).Offset(1) 'destination is Sheet 3
End If
Next i
End Sub

Sub FindFiebelkornUHSClinCare()
Dim i, LastRow
LastRow = Sheets("Sheet1").Range("A" amp; Rows.Count).End(xlUp).Row 'this line finds the last row used in a sheet.
Sheets("Sheet4").Range("A11:M1000").ClearContents
For i = 11 To LastRow
If Sheets("Sheet1").Cells(i, "D").Value = "FiebelkornKr" And 
Sheets("Sheet1").Cells(i, "H").Value Like "UHS-Clin*" Then 'finds rows that have both "FiebelkornKr" exactly in column D and another cell that contains "UHS-Clin" in column H.
Sheets("Sheet1").Cells(i, "D").EntireRow.Copy Destination:=Sheets("Sheet4").Range("A" 
amp; Rows.Count).End(xlUp).Offset(1) 'destination is Sheet4
End If
Next i
End Sub
  

Спасибо за предложения и комментарии.