Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перенести значения из строки - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Перенести значения из строки (Формулы/Formulas)
Перенести значения из строки
Obla4ko Дата: Пятница, 08.07.2016, 19:41 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Добрый день.

Имеется таблица - Детализация тел.разговоров. В ней порядка 20-и тысяч записей.
Стоит задача привести таблицу в удобочитаемый вид, а именно там где встречается в столбце "Код" значение "8495" перенести его в строку с номером, а значение "8499" оставить не тронутым.

Номера с кодом "8499" отображаются полностью, а вот "8495" обрезает.

Делаю это все при помощи макроса:

[vba]
Код
For Each c In Worksheets("Лист1").Range("A4:A6").Cells
c.Value = "8495" + CStr(c.Value)
Next
[/vba]

Но все бы да ничего, только вот записей очень много((

Помогите, чем можете.
[moder]Читаем Правила форума. Оформляем код тегами, прикладываем нормальный пример. Исправлено[/moder]
К сообщению приложен файл: _1.xlsx(9Kb)


Сообщение отредактировал Obla4ko - Суббота, 09.07.2016, 08:33
 
Ответить
СообщениеДобрый день.

Имеется таблица - Детализация тел.разговоров. В ней порядка 20-и тысяч записей.
Стоит задача привести таблицу в удобочитаемый вид, а именно там где встречается в столбце "Код" значение "8495" перенести его в строку с номером, а значение "8499" оставить не тронутым.

Номера с кодом "8499" отображаются полностью, а вот "8495" обрезает.

Делаю это все при помощи макроса:

[vba]
Код
For Each c In Worksheets("Лист1").Range("A4:A6").Cells
c.Value = "8495" + CStr(c.Value)
Next
[/vba]

Но все бы да ничего, только вот записей очень много((

Помогите, чем можете.
[moder]Читаем Правила форума. Оформляем код тегами, прикладываем нормальный пример. Исправлено[/moder]

Автор - Obla4ko
Дата добавления - 08.07.2016 в 19:41
Pelena Дата: Суббота, 09.07.2016, 08:47 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9856
Репутация: 2254 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Здравствуйте.
Можно формулой в доп. столбце
Код
=ЕСЛИ(C2=8495;C2&A2;A2)

Потом скопировать/вставить как значения на место первого столбца
К сообщению приложен файл: _1-1-.xlsx(10Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Можно формулой в доп. столбце
Код
=ЕСЛИ(C2=8495;C2&A2;A2)

Потом скопировать/вставить как значения на место первого столбца

Автор - Pelena
Дата добавления - 09.07.2016 в 08:47
Obla4ko Дата: Суббота, 09.07.2016, 09:43 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Pelena, да, хороший способ, только если таблица небольшая. У меня записей около 20-и тысяч). Я в макросе меняю значение
Код
Range("A4:A6")
так мне кажется быстрее. Сегодня дошел до 6-и тысяч %)


Сообщение отредактировал Obla4ko - Суббота, 09.07.2016, 09:46
 
Ответить
СообщениеPelena, да, хороший способ, только если таблица небольшая. У меня записей около 20-и тысяч). Я в макросе меняю значение
Код
Range("A4:A6")
так мне кажется быстрее. Сегодня дошел до 6-и тысяч %)

Автор - Obla4ko
Дата добавления - 09.07.2016 в 09:43
Pelena Дата: Суббота, 09.07.2016, 10:05 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9856
Репутация: 2254 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Формулу распространить на 20000 ячеек гораздо быстрее, на мой взгляд. Например, двойным кликом по маркеру заполнения (правый нижний угол ячейки с формулой)
Или ещё способы:
Быстрое заполнение диапазона значениями или формулами


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеФормулу распространить на 20000 ячеек гораздо быстрее, на мой взгляд. Например, двойным кликом по маркеру заполнения (правый нижний угол ячейки с формулой)
Или ещё способы:
Быстрое заполнение диапазона значениями или формулами

Автор - Pelena
Дата добавления - 09.07.2016 в 10:05
Karataev Дата: Суббота, 09.07.2016, 14:45 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 226 ±
Замечаний: 0% ±

Excel
Данный макрос сам определяет, сколько строк с данными на листе, и не нужно в коде изменять номер последней строки:
[vba]
Код
Sub Макрос()

    Dim arr1(), arr2(), lr As Long, i As Long
    
    Application.ScreenUpdating = False
    
    lr = Columns("C").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arr1() = Range("C2:C" & lr).Value
    arr2() = Range("A2:A" & lr).Value
    
    For i = 1 To UBound(arr1)
        If arr1(i, 1) = 8495 Then
            arr2(i, 1) = CDbl(8495 & arr2(i, 1))
        End If
    Next
    
    Range("A2").Resize(UBound(arr2)).Value = arr2()
        
    Application.ScreenUpdating = True
    
End Sub
[/vba]


 
Ответить
СообщениеДанный макрос сам определяет, сколько строк с данными на листе, и не нужно в коде изменять номер последней строки:
[vba]
Код
Sub Макрос()

    Dim arr1(), arr2(), lr As Long, i As Long
    
    Application.ScreenUpdating = False
    
    lr = Columns("C").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arr1() = Range("C2:C" & lr).Value
    arr2() = Range("A2:A" & lr).Value
    
    For i = 1 To UBound(arr1)
        If arr1(i, 1) = 8495 Then
            arr2(i, 1) = CDbl(8495 & arr2(i, 1))
        End If
    Next
    
    Range("A2").Resize(UBound(arr2)).Value = arr2()
        
    Application.ScreenUpdating = True
    
End Sub
[/vba]

Автор - Karataev
Дата добавления - 09.07.2016 в 14:45
Obla4ko Дата: Суббота, 09.07.2016, 15:36 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Профессионалы своего дела hands
Большое СПАСИБО ВСЕМ!!!
 
Ответить
СообщениеПрофессионалы своего дела hands
Большое СПАСИБО ВСЕМ!!!

Автор - Obla4ko
Дата добавления - 09.07.2016 в 15:36
Obla4ko Дата: Понедельник, 11.07.2016, 22:01 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
А если в поле "Код" значение не "8495", а "8495777900" то как быть?
К сообщению приложен файл: sample.xlsx(9Kb)
 
Ответить
СообщениеА если в поле "Код" значение не "8495", а "8495777900" то как быть?

Автор - Obla4ko
Дата добавления - 11.07.2016 в 22:01
Karataev Дата: Понедельник, 11.07.2016, 22:08 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 226 ±
Замечаний: 0% ±

Excel
[vba]
Код
Sub Макрос()

    Dim arr1(), arr2(), lr As Long, i As Long
    
    Application.ScreenUpdating = False
    
    lr = Columns("C").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arr1() = Range("C2:C" & lr).Value
    arr2() = Range("A2:A" & lr).Value
    
    For i = 1 To UBound(arr1)
        If InStr(1, CStr(arr1(i, 1)), "8495", vbTextCompare) = 1 Then
            arr2(i, 1) = CDbl(8495 & arr2(i, 1))
        End If
    Next
    
    Range("A2").Resize(UBound(arr2)).Value = arr2()
        
    Application.ScreenUpdating = True
    
End Sub
[/vba]




Сообщение отредактировал Karataev - Понедельник, 11.07.2016, 22:11
 
Ответить
Сообщение[vba]
Код
Sub Макрос()

    Dim arr1(), arr2(), lr As Long, i As Long
    
    Application.ScreenUpdating = False
    
    lr = Columns("C").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arr1() = Range("C2:C" & lr).Value
    arr2() = Range("A2:A" & lr).Value
    
    For i = 1 To UBound(arr1)
        If InStr(1, CStr(arr1(i, 1)), "8495", vbTextCompare) = 1 Then
            arr2(i, 1) = CDbl(8495 & arr2(i, 1))
        End If
    Next
    
    Range("A2").Resize(UBound(arr2)).Value = arr2()
        
    Application.ScreenUpdating = True
    
End Sub
[/vba]

Автор - Karataev
Дата добавления - 11.07.2016 в 22:08
sv2014 Дата: Вторник, 12.07.2016, 00:09 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 156
Репутация: 37 ±
Замечаний: 0% ±

Excel 2013
Obla4ko, еще вариант макроса,кнопки test и повтор

[vba]
Код
Sub test()
     Dim z, i&: z = Range("A1:C" & Range("A" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(z): If z(i, UBound(z, 2)) = "8495" Then z(i, 1) = 8495 & z(i, 1)
    Next
     Range("A1").Resize(UBound(z), UBound(z, 2)) = z
End Sub
[/vba]
К сообщению приложен файл: example_11_07_2.xls(43Kb)
 
Ответить
СообщениеObla4ko, еще вариант макроса,кнопки test и повтор

[vba]
Код
Sub test()
     Dim z, i&: z = Range("A1:C" & Range("A" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(z): If z(i, UBound(z, 2)) = "8495" Then z(i, 1) = 8495 & z(i, 1)
    Next
     Range("A1").Resize(UBound(z), UBound(z, 2)) = z
End Sub
[/vba]

Автор - sv2014
Дата добавления - 12.07.2016 в 00:09
sv2014 Дата: Вторник, 12.07.2016, 00:41 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 156
Репутация: 37 ±
Замечаний: 0% ±

Excel 2013
Obla4ko, добавил вариант с кнопкой test1 для Вашего сообщения7

[vba]
Код
Sub test1()
     Dim z, i&: z = Range("A1:C" & Range("A" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(z): If z(i, UBound(z, 2)) = "8495" Or Left(z(i, UBound(z, 2)), 4) = "8495" Then z(i, 1) = 8495 & z(i, 1)
    Next
     Range("A1").Resize(UBound(z), UBound(z, 2)) = z
End Sub
[/vba]
К сообщению приложен файл: 1733374.xls(44Kb)
 
Ответить
СообщениеObla4ko, добавил вариант с кнопкой test1 для Вашего сообщения7

[vba]
Код
Sub test1()
     Dim z, i&: z = Range("A1:C" & Range("A" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(z): If z(i, UBound(z, 2)) = "8495" Or Left(z(i, UBound(z, 2)), 4) = "8495" Then z(i, 1) = 8495 & z(i, 1)
    Next
     Range("A1").Resize(UBound(z), UBound(z, 2)) = z
End Sub
[/vba]

Автор - sv2014
Дата добавления - 12.07.2016 в 00:41
Obla4ko Дата: Вторник, 12.07.2016, 21:17 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Да, всё работает как надо! hands
А можно извлечь время в отдельный столбец?
К сообщению приложен файл: sample_.xlsx(9Kb)
 
Ответить
СообщениеДа, всё работает как надо! hands
А можно извлечь время в отдельный столбец?

Автор - Obla4ko
Дата добавления - 12.07.2016 в 21:17
Karataev Дата: Вторник, 12.07.2016, 21:29 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 226 ±
Замечаний: 0% ±

Excel
Obla4ko, это уже вопрос по другому файлу, поэтому создайте новую тему.


 
Ответить
СообщениеObla4ko, это уже вопрос по другому файлу, поэтому создайте новую тему.

Автор - Karataev
Дата добавления - 12.07.2016 в 21:29
Obla4ko Дата: Вторник, 12.07.2016, 21:36 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Всё ясно. Тему тогда можно закрыть. Еще раз большое человеческое спасибо.
 
Ответить
СообщениеВсё ясно. Тему тогда можно закрыть. Еще раз большое человеческое спасибо.

Автор - Obla4ko
Дата добавления - 12.07.2016 в 21:36
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Перенести значения из строки (Формулы/Formulas)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!