2013-02-13 2 views
0

Лист Excel существует со списком имен машин в столбце A в Sheet1.Сравните значения из файла с столбцом в Excel и обновите другой столбец

Имеется текстовый файл со списком компьютеров, которые выведены из эксплуатации.

Мне нужно отметить все выведенные из эксплуатации машины как «DECOM» в листе Excel под столбцом B на том же листе (лист1).

Вот что у меня есть.

Sub ImportTextFileContents() 
Dim strg As Variant 
Dim EntireLine As String 

FName = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "Choose File to Import") 

Open FName For Input Access Read As #1 
i = 1 
While Not EOF(1) 
    Line Input #1, EntireLine 
    strg = EntireLine 

    If (Sheets("Sheet1").Range("A").Value = strg) Then 
    Sheets("Sheet1").Range("B" & i).Value = "DECOM" 
    End If 

    i = i + 1 
Wend 
EndMacro: 

On Error GoTo 0 
Application.ScreenUpdating = True 

Close #1 
End Sub 
+0

Почему вы не импортируете содержимое файл в электронную таблицу, а затем использовать формулу (например, 'countif')? Я думаю, что это намного проще. –

+0

Вероятно, предпочтительнее избегать импорта данных в электронную таблицу или создания временных таблиц, которые нужно убить позже, ради эффективности. Кроме того, OP должен будет использовать функцию функции MATCH, а не функцию CountIf, чтобы идентифицировать машины, перечисленные в TXT-файле. –

ответ

0

Попробуйте что-то вроде этого:

Sub ImportTextFileContents() 
Dim strg As Variant 
Dim EntireLine As String 
Dim DecomMachines() as String 
Dim rngExcel as Range 
Dim cell as Range 

FName = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "Choose File to Import") 

Open FName For Input Access Read As #1 

'Create an array to contain the list of Decommissioned machines from the TXT file 

i = 1 
While Not EOF(1) 
    Line Input #1, EntireLine 
    strg = EntireLine 
    ReDim Preserve DecomMachines(0 to i-1) 
    DecomMachines(i-1) = strg 
    i = i + 1 
Wend  

'Set the range variable over which we need to iterate: 
Set rngExcel = Sheets("Sheet1").Range("A1",Range("A1").End(xlDown).Address) '<-- modify as needed 

For each cell in rngExcel  
'Check to see if this cell.value exists in the array we built, above: 
    If Not IsError(Application.Match(Cstr(cell.Value),DecomMachines,False)) Then 
     'if the name exists in the DecomMachines array, then we need to mark it as decommissioned. 
     cell.Offset(0,1).Value = "DECOM" 
    Else: 
     'it doesnot exist in the TXT file, so ignore it 
    End If 
Next  

EndMacro: 

On Error GoTo 0 
Application.ScreenUpdating = True 

Close #1 
End Sub 

Это создает массив, содержащий все машины, определенных в файле TXT, а затем итерацию по диапазону ячеек в колонке А, тестирование, чтобы увидеть если каждое значение ячейки существует в массиве. Если это действительно существует, то мы знаем, что он помечается как выведенный из эксплуатации в столбце B (cell.Offset(0,1)), и если он не существует, мы просто переходим к следующей ячейке в столбце A.

+0

Это работало точно так же, как я хочу ... с некоторыми незначительными дополнениями, которые были необходимы. Спасибо, Дэвид! – user811433

Смежные вопросы