Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2013, 16:00   #1
AndrewBocha
Новичок
Джуниор
 
Регистрация: 11.01.2013
Сообщений: 2
По умолчанию Из двух столбцов в чередующуюся строку

Доброго времени суток, возник вопрос, который требует вашей помощи.
Ситуация следующая, есть экселевская таблица представленная в виде 2х столбцов А и Б и имеющая в себе множество видов значений, к примеру:

столбец А
дом
улица
кв
Город
Район
и т.д

Столбец Б
13
победы
232
Москва
Северный

Необходимо эти значения переделать в строки:
дом|13|улица|Победы|кв|232|Город|Мо сква|район|Северный|и тд

Копипастом очень долго, данных больше 100к. Помогите пожалуйста, как сделать подобную сортировку, транспортировка через специальную вставку не помогает.

Заранее благодарен за помощь.

Последний раз редактировалось AndrewBocha; 11.01.2013 в 16:03.
AndrewBocha вне форума Ответить с цитированием
Старый 11.01.2013, 16:11   #2
Андрей Долганский
Пользователь
 
Регистрация: 08.01.2013
Сообщений: 10
По умолчанию

копируешь данные в блокнот, заменяешь пробелы на ";" и сохраняешь как csv. потом можно импортировать в excel
Андрей Долганский вне форума Ответить с цитированием
Старый 11.01.2013, 16:48   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

пример файла выкладывайте
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 11.01.2013, 16:54   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Андрей Долганский Посмотреть сообщение
копируешь данные в блокнот, заменяешь пробелы на ";" и сохраняешь как csv. потом можно импортировать в excel
А если адрес будет в Нижнем Новгороде и т.п.? получится, что название города будет разорвано...

Автору: лучше выложите нормальный файл с примером. ваши варианты с

Цитата:
и т.д
не способствуют ускорению процесса.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.01.2013, 19:15   #5
ikki_pf
Форумчанин
 
Регистрация: 25.02.2012
Сообщений: 166
По умолчанию

если, например, данные находятся в диапазонах a1:a5 и b1:b5
Код:
Sub t()
  s = Join(Application.Transpose([a1:a5 & "|" & b1:b5]), "|")
End Sub
ikki_pf вне форума Ответить с цитированием
Старый 11.01.2013, 19:24   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

В ячейках С2:J2 прописываем формулы, собирающие значения в строку.
Растягиваем строку с формулами на весь диапазон (двойной клик по маркеру автозаполнения).
В доп. столбце вводим формулу
Код:
=ОСТАТ(СТРОКА();5)
5 - число полей.
Включаем автофильтр по этому столбцу по числу 2. Копируем столбцы А:J и вставляем как значения на новый лист. Все.
Вложения
Тип файла: rar AndrewBocha.rar (2.7 Кб, 12 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 14.01.2013, 10:44   #7
AndrewBocha
Новичок
Джуниор
 
Регистрация: 11.01.2013
Сообщений: 2
По умолчанию

Прошу прощения что пример сразу не выложил, пришлось отлучиться. Вот пример, есть 2 листа, что есть, и что нужно получить.
Вложения
Тип файла: rar пример.rar (3.8 Кб, 16 просмотров)
AndrewBocha вне форума Ответить с цитированием
Старый 14.01.2013, 11:56   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
=ИНДЕКС(Есть!A1:C13;ЦЕЛОЕ((Столбец()-1)/3)+1;ОСТАТ(Столбец()-1;3)+1)
вот такая формула поможет
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.01.2013, 11:57   #9
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Код написан для книги, выложенной в сообщении #7.
Код:
Sub Procedure_1()

    'В константе "myStart" указываем номер строки,
        'с которой начинаются данные на исходном листе.
    Const myStart As Long = 1

    Dim mySource() As Variant, myTarget() As String
    Dim shSheet_1 As Excel.Worksheet, shSheet_2 As Excel.Worksheet
    Dim myLastRow As Long
    Dim i As Long, j As Long, k As Long
    
    '1. Для удобства написания кода, даём листам имена.
    'Через эти имена будем обращаться к листам.
    Set shSheet_1 = ActiveWorkbook.Worksheets(1)
    Set shSheet_2 = ActiveWorkbook.Worksheets(2)
    
    '2. Определяем, сколько строк с данными на исходном листе,
    'чтобы знать, со сколькими строками работать.
    'Количество строк определяю по столбцу "B".
    'What:="?" - знак вопроса в данном случае - это специальный символ.
    'SearchDirection:=xlPrevious - поиск с конца в начало.
    myLastRow = shSheet_1.Columns("B").Find(What:="?", LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
        MatchCase:=False, SearchFormat:=False).Row

    '3. Код быстрее работает с переменными и массивами,
        'чем с объектами. Ячейки в Excel являются объектами,
        'поэтому помещаем данные из Excel в массив.
    mySource() = shSheet_1.Range("B" & myStart & ":C" & myLastRow).Value
    
    'Сначала сформирую массив "myTarget", который будет
    'содержать сформированные данные. Затем этот массив
    'помещу на лист Excel.
    
    '4. Создаю элементы в массиве "myTarget".
    ReDim myTarget(1 To 1, 1 To UBound(mySource, 1) * 2)
    
    '5. Помещаю данные из массива "mySource" в массив "myTarget".
    For i = 1 To UBound(mySource, 1) Step 1
    
        For j = 1 To UBound(mySource, 2) Step 1
        
            'Формируем порядковый номер элемента в массиве "myTarget".
            k = k + 1
            
            myTarget(1, k) = mySource(i, j)
            
        Next j
        
    Next i
    
    '6. Вывожу массив "myTarget" на лист Excel.
    shSheet_2.Range("B1").Resize(1, UBound(myTarget, 2)).Value = myTarget()
    
End Sub
Скрипт вне форума Ответить с цитированием
Старый 14.01.2013, 13:25   #10
ikki_pf
Форумчанин
 
Регистрация: 25.02.2012
Сообщений: 166
По умолчанию

как вариант
Код:
Sub t()
  With Sheets(1)
    lr = .Cells(.Rows.Count, 2).End(xlUp).Row
    s1 = "'" & .Name & "'!b1:b" & lr
    s2 = "'" & .Name & "'!c1:c" & lr
    s = .[a1] & "|" & Join(Application.Transpose(Evaluate(s1 & " & ""|"" & " & s2)), "|")
  End With
  x = Split(s, "|")
  Sheets(2).[a1].Resize(, UBound(x) + 1).Value = x
End Sub
ikki_pf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнивание двух столбцов чисел Mishael Microsoft Office Excel 11 02.07.2012 10:24
Большее из двух столбцов Lozus Microsoft Office Excel 12 08.06.2012 11:28
Сравнение двух столбцов mGm Microsoft Office Excel 1 15.02.2012 21:39
Из двух столбцов(А,В) в столбец (С) Leha33 Microsoft Office Excel 3 17.12.2010 10:53
Прибавление данніх из двух столбцов gavrylyuk Microsoft Office Excel 3 01.08.2008 11:40