2016-01-25 1 views
2

У меня есть два файла, скажем F1 и F2.Как скопировать строки, если столбец содержит определенный текст/значение в Excel?

Если данные в столбце 1 из F1 соответствуют столбцу 1 из F2, вставьте столбец2 из F1 в F2.

Например.

file F1 has 
    column1 column2 
    X  value1 
    Y  value2 
    Z  value3 



file F2 has 
    column1 column2 
    Y   key1 
    Z   key2 
    X   key3 

Я пытаюсь вставить новый столбец в F2 выглядеть следующим образом:

column1 column2 column3 
X   value1 key3 
Y   value2 key1 
Z   value3 key2 

Это achievable в одном файле. Как это сделать в нескольких файлах в excel/libreoffice?

+1

Почему бы не использовать VLOOKUP(), который ссылается на другой файл? –

+0

В столбце 1 есть 100 строк. Кстати, не могли бы вы написать это как ответ? –

+1

Я согласен с @Scott Craner, что 'VLOOKUP' - ваш лучший вариант. Для масштабирования этого значения до 100 строк строк это не проблема. – nbayly

ответ

2

Как указано в комментариях, VLOOKUP может использовать другие файлы. Вот как это выглядит в LibreOffice:

enter image description here

Формула в изображении:

=VLOOKUP(A1,'file:///C:/Users/JimStandard/Desktop/F1.ods'#$Sheet1.A$1:B$3,2) 

В $ признаки облегчают заполнить формулу вниз, перетаскивая квадрат в нижнем правом углу ячейки C1.

+0

Благодарим вас за ответ. Есть ли какое-либо обходное решение, если для ключа1 больше значения? Напр. ожидаемый результат: 'Y key1 value2 value4' –

+0

Вы имеете в виду, если в F1 есть строка, например' Y value4', а также 'Y value2'? –

+1

VLOOKUP получает только одно значение за ключ. Одним из хороших способов обработки нескольких значений является использование базы LibreOffice. Он может выполнять запрос в электронной таблице Calc. Или вы можете написать макрос, чтобы справиться с этим, как это было предложено в другом ответе. –

1

Предполагая, что F1 и F2 Excel листы в книге, вы можете создать макрос с этим кодом в VBA и адаптировать его к вашим потребностям

Public Sub CopyColumns() 

    Dim init As Range 
    Dim nameColumn As String 
    Dim i As Integer 
    Dim n As Integer 
    Dim array1(3) As String 
    Dim array2(2, 3) As String  'We declare two dimensional array 

    Sheets("NameOfF1Sheet").Activate 

    i = 0 

    Range("A1").Select 'Suppose the start cell of the row that contains the text "column1" in F1 file 

    nameColumn = "column1" 'Search column name to copy 

    Do 
     If ActiveCell.Value = nameColumn Then 
      ActiveCell.offset(1, 0).Select 
      Do 
       array2(1, i) = ActiveCell.Value     'Copy data in array2 from column1 
       array2(2, i) = ActiveCell.offset(0, 1).Value 'Copy data in array2 from column2 
       i = i + 1 
      Loop Until IsEmpty(ActiveCell) = True 
     Else 
      ActiveCell.offset(0, 1).Select 
     End If 
    While IsEmpty(ActiveCell) = True 'Copy while there is data in column1 

    Sheets("NameOfF2Sheet").Activate 'Sheet change 

    i = 0 
    n = 0 

    Range("A1").Select  'Suppose the start cell of the row that contains the text "column1" in F2 file 

    nameColumn = "column1" 'Search column name to paste 

    Do 
     If ActiveCell.Value = nameColumn Then 

      init = ActiveCell.Address 

      ActiveCell.offset(0, 1).Select  'Copy all column2 
      Do 
       array1(n) = ActiveCell.Value 
       n = n + 1 
       ActiveCell.offset(1, 0).Select 
      While IsEmpty(ActiveCell) = True 

      Range(init).Select 

      ActiveCell.offset(0, 2).Value = "column3" 'Rename old "column2" as "column3" 
      ActiveCell.offset(1, 2).Select 

      n = 0 

      Do         'Paste all rows of "column2" in "column3" 
       ActiveCell.Value = array1(n) 
       n = n + 1 
       ActiveCell.offset(1, 0).Select 
      Loop Until n < 3 

      Range(init).Select 

      ActiveCell.offset(1, 1).Select 
      Do 
       If ActiveCell.Value = array2(1, i) Then 
        ActiveCell.offset(0, 2).Value = array2(2, i) 'Paste data in column2 from array2 
       End If 
       i = i + 1 
      Loop Until i < 3 
     Else 
      ActiveCell.offset(0, 1).Select 
     End If 
    While IsEmpty(ActiveCell) = True 

End Sub 

Я надеюсь, что вы служите, я новичок, и мой первый ответ!

+0

Спасибо за первый ответ! Этот совет будет просто советом для будущей работы с Calc, этот код будет более чистым и будет выполняться быстрее, используя функции API .getDataArray и '.setDataArray', вместо того, чтобы тянуть и устанавливать значения по одному за раз. – Lyrl

+0

Благодарю вас за совет! –

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