Извлечение из CSV с определенными несколькими значениями - PullRequest
1 голос
/ 02 июня 2019

Итак, у меня есть CSV-файл, который содержит пол местоположения имен и адреса электронной почты, поэтому мне нужно отфильтровать его, чтобы иметь только электронные письма США, есть ли возможность извлечь электронные письма, основанные на сырье, которое содержит штат или город США?так, например, в столбце местоположения есть «Ely-Nevada», и я хочу извлечь его, с одним значением это не так сложно, но как сделать с несколькими значениями, как каждый штат и город США (я могу получить целоесписок здесь: https://www.britannica.com/topic/list-of-cities-and-towns-in-the-United-States-2023068)

Итак, я попробовал программу CSVed, но трудно указать каждую страну, которая мне не нужна, и т. д. *

С этим кодом VBA они удаляютraws с конкретными значениями:

Sub Delete_All_Rows_IF_Cell_Contains_Certain_String_Text()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 1000
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 3).Value = "Certain data to delete here" Then
            Rows(iCntr).Delete
        End If
    Next
End

можно ли не удалять, а сохранять все raw, но значений должно быть несколько, может ли кто-нибудь помочь в этом?

1 Ответ

0 голосов
/ 02 июня 2019

Одним из простых способов было бы иметь список местоположений, которые вы хотите сохранить на отдельном листе, затем добавить дополнительный столбец к исходным данным и выполнить VLOOKUP (или INDEX/MATCH), затем отфильтровать иудалять.Для одного процесса, это то, что я бы сделал.

Для решения VBA, что-то вроде этого, но вам все еще нужен этот список допустимых мест на отдельном листе:

Sub setDeleteNonUsa()
'Assuming 4 columns:
'A: [names]
'B: [location]
'C: [gender]
'D: [email]

Dim wb As Workbook: Set wb = ActiveWorkbook 'Alternative options: ThisWorkbook or Workbooks("book name")

Dim wsData As Worksheet: Set wsData = wb.Worksheets("Sheet1")
Dim wsLocs As Worksheet: Set wsLocs = wb.Worksheets("Sheet2")

'Declare and set the variable to hold the last row values
Dim lRowData As Long: lRowData = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
Dim lRowLocs As Long: lRowLocs = wsLocs.Cells(wsLocs.Rows.Count, "A").End(xlUp).Row

'Declare and set an array to hold the current data (Column A:D, Sheet1)
Dim arrData As Variant: arrData = wsData.Range("A1:D" & lRowData) 'allocate the data to the array

'Declare and set an array to hold the acceptable locations (column A, Sheet2)
Dim arrLocs As Variant: arrLocs = wsLocs.Range("A1:A" & lRowLocs) 'allocate the locations to the array

'Process the data
Dim Rd As Long, Rl As Long
For Rd = UBound(arrData) To LBound(arrData) + 1 Step -1 'Iterate through each row of the data, skipping headings
    For Rl = LBound(arrLocs) + 1 To UBound(arrLocs) 'Iterate through each row of the locs, skipping headings
        If arrData(Rd, 2) = arrLocs(Rl, 1) Then Exit For 'location match, skip to next
        If Rl = UBound(arrLocs) Then wsData.Cells(Rd, 1).EntireRow.Delete 'we got to last one, no location match
    Next Rl
Next Rd

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...