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

Вход

Регистрация

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

 

= Мир MS Excel/Заполнение ячеек в столбце таблицы необходимой формулой - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнение ячеек в столбце таблицы необходимой формулой (Макросы/Sub)
Заполнение ячеек в столбце таблицы необходимой формулой
Ivm747 Дата: Вторник, 30.06.2015, 14:37 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день!
Сразу скажу, что я не программист, поэтому заранее извиняюсь за "неправильный" язык.
Помогите пожалуйста решить такую задачу:
Я скачиваю в формате excel таблицу, в которой есть реквизиты фирм. В таблице есть столбец, в котором в одном поле совмещены инн и наименование фирмы. Мне необходимо выделить ИНН в отдельный столбец. Я сделал макрос, который создает новый столбец, а затем при помощи цикла вставляет формулу с текстовой функцией в каждую строку столбца. Все работает, но крайне долго, так как размер таблицы бывает по 6-15 тыс строк. Я пробовал вариант с созданием в первой строке формулы, а затем копированием ее во все строки - тоже очень долго. Я предполагаю, что есть способ это сделать гораздо быстрее. Выложить файл не могу, так как выход в сеть с рабочей машины запрещен.
Может быть кто подскажет такой способ?
Заранее спасибо
 
Ответить
СообщениеДобрый день!
Сразу скажу, что я не программист, поэтому заранее извиняюсь за "неправильный" язык.
Помогите пожалуйста решить такую задачу:
Я скачиваю в формате excel таблицу, в которой есть реквизиты фирм. В таблице есть столбец, в котором в одном поле совмещены инн и наименование фирмы. Мне необходимо выделить ИНН в отдельный столбец. Я сделал макрос, который создает новый столбец, а затем при помощи цикла вставляет формулу с текстовой функцией в каждую строку столбца. Все работает, но крайне долго, так как размер таблицы бывает по 6-15 тыс строк. Я пробовал вариант с созданием в первой строке формулы, а затем копированием ее во все строки - тоже очень долго. Я предполагаю, что есть способ это сделать гораздо быстрее. Выложить файл не могу, так как выход в сеть с рабочей машины запрещен.
Может быть кто подскажет такой способ?
Заранее спасибо

Автор - Ivm747
Дата добавления - 30.06.2015 в 14:37
SLAVICK Дата: Вторник, 30.06.2015, 15:03 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Пробуйте Текст по столбцам, на вкладке "данные".
Или сделайте похожий пример из нескольких строк, чтобы было понятно чем ИНН отделен от названия в ячейке :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеПробуйте Текст по столбцам, на вкладке "данные".
Или сделайте похожий пример из нескольких строк, чтобы было понятно чем ИНН отделен от названия в ячейке :D

Автор - SLAVICK
Дата добавления - 30.06.2015 в 15:03
Макрописец Дата: Вторник, 30.06.2015, 19:47 | Сообщение № 3
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
Может быть кто подскажет такой способ?

Быстрее будет собирать данные в МАССИВ в макросе, в нём уже выделять ИНН и выгружать его в отдельный столбец. Конкретней без примера (не нужен весь файл - набросайте 2-3 строки с данными вида как у Вас и прикрепите к своему следующему сообщению) сказать не могу.


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!

Сообщение отредактировал Макрописец - Вторник, 30.06.2015, 19:49
 
Ответить
Сообщение
Может быть кто подскажет такой способ?

Быстрее будет собирать данные в МАССИВ в макросе, в нём уже выделять ИНН и выгружать его в отдельный столбец. Конкретней без примера (не нужен весь файл - набросайте 2-3 строки с данными вида как у Вас и прикрепите к своему следующему сообщению) сказать не могу.

Автор - Макрописец
Дата добавления - 30.06.2015 в 19:47
Ivm747 Дата: Среда, 01.07.2015, 08:42 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Данные в столбце имеют вид: "3444276501 / ООО Весна"; либо "776505240375 / ИП Иванов П.С." И так несколько тысяч строк
 
Ответить
СообщениеДанные в столбце имеют вид: "3444276501 / ООО Весна"; либо "776505240375 / ИП Иванов П.С." И так несколько тысяч строк

Автор - Ivm747
Дата добавления - 01.07.2015 в 08:42
Макрописец Дата: Среда, 01.07.2015, 09:54 | Сообщение № 5
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
Ivm747,
И ничего не понятно. Неужели трудно создать файл, написать пару строк с данными как есть, и как нужно, чтобы они располагались - и выложить сюда?


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!
 
Ответить
СообщениеIvm747,
И ничего не понятно. Неужели трудно создать файл, написать пару строк с данными как есть, и как нужно, чтобы они располагались - и выложить сюда?

Автор - Макрописец
Дата добавления - 01.07.2015 в 09:54
Ivm747 Дата: Среда, 01.07.2015, 13:22 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Извините, я Вам пишу с планшета(яблоко). Я не знаю как на нем создать файл, а потом еще и прикрепить его. Да и чего непонятного? В ковычках- содержание ячейки. В следующих ковычках - содержание второй строки столбца. И так далее. Мне нужно отделить в отдельный столбец ИНН ( цифровое значение) от наименования ( буквенное значение). Разделены они слэшем и пробелами вокруг него. Цифровое значение необходимо чтобы потом данные можно было систематизировать.
 
Ответить
СообщениеИзвините, я Вам пишу с планшета(яблоко). Я не знаю как на нем создать файл, а потом еще и прикрепить его. Да и чего непонятного? В ковычках- содержание ячейки. В следующих ковычках - содержание второй строки столбца. И так далее. Мне нужно отделить в отдельный столбец ИНН ( цифровое значение) от наименования ( буквенное значение). Разделены они слэшем и пробелами вокруг него. Цифровое значение необходимо чтобы потом данные можно было систематизировать.

Автор - Ivm747
Дата добавления - 01.07.2015 в 13:22
Manyasha Дата: Среда, 01.07.2015, 13:27 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Пробуйте Текст по столбцам, на вкладке "данные".

чем такой вариант не устроил?
Или Вам принципиально макросами?


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
Пробуйте Текст по столбцам, на вкладке "данные".

чем такой вариант не устроил?
Или Вам принципиально макросами?

Автор - Manyasha
Дата добавления - 01.07.2015 в 13:27
Макрописец Дата: Среда, 01.07.2015, 13:56 | Сообщение № 8
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
Manyasha,
Судя по первом посту - да
Ivm747,
Включите макрорекордер, затем выполните Текст по столбцам, на вкладке "данные", выключите макрорекордер, посмотрите получившийся код и скопируйте его в другой макрос (если это нужно.


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!
 
Ответить
СообщениеManyasha,
Судя по первом посту - да
Ivm747,
Включите макрорекордер, затем выполните Текст по столбцам, на вкладке "данные", выключите макрорекордер, посмотрите получившийся код и скопируйте его в другой макрос (если это нужно.

Автор - Макрописец
Дата добавления - 01.07.2015 в 13:56
Ivm747 Дата: Среда, 01.07.2015, 14:32 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Мне кажется вариант с массивом будет поинтереснее. Если использовать данные по столбцам- то придется пользоваться циклом, а это займет столько же времени, сколько текстовая функция через цикл.
А макрос хочу создать, потому, что алгоритм обработки файлов одинаковый, файлов бывает много. Каждый раз нажимать кнопки - глупо
 
Ответить
СообщениеМне кажется вариант с массивом будет поинтереснее. Если использовать данные по столбцам- то придется пользоваться циклом, а это займет столько же времени, сколько текстовая функция через цикл.
А макрос хочу создать, потому, что алгоритм обработки файлов одинаковый, файлов бывает много. Каждый раз нажимать кнопки - глупо

Автор - Ivm747
Дата добавления - 01.07.2015 в 14:32
RAN Дата: Среда, 01.07.2015, 14:37 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Включить рекордер.
Скопировать столбец в нужное место.
Выполнить текст по столбцам с разделителем "/", второй столбец пропустить.
Выключить рекордер.
Макрос готов.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВключить рекордер.
Скопировать столбец в нужное место.
Выполнить текст по столбцам с разделителем "/", второй столбец пропустить.
Выключить рекордер.
Макрос готов.

Автор - RAN
Дата добавления - 01.07.2015 в 14:37
Макрописец Дата: Среда, 01.07.2015, 14:48 | Сообщение № 11
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
RAN,
А я разве не тоже самое сказал? И не будет тут никаких циклов. Но юзеру нужны массивы.


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!
 
Ответить
СообщениеRAN,
А я разве не тоже самое сказал? И не будет тут никаких циклов. Но юзеру нужны массивы.

Автор - Макрописец
Дата добавления - 01.07.2015 в 14:48
RAN Дата: Среда, 01.07.2015, 14:52 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Цитата Макрописец, 01.07.2015 в 14:48, в сообщении № 11
Но юзеру нужны массивы.

Юзеру не нужны массивы. Юзеру нужно чтобы работало, и желательно быстро.
Текст по столбцам будет, как минимум, не медленнее массивов, а, скорее всего, несколько шустрее.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Цитата Макрописец, 01.07.2015 в 14:48, в сообщении № 11
Но юзеру нужны массивы.

Юзеру не нужны массивы. Юзеру нужно чтобы работало, и желательно быстро.
Текст по столбцам будет, как минимум, не медленнее массивов, а, скорее всего, несколько шустрее.

Автор - RAN
Дата добавления - 01.07.2015 в 14:52
Макрописец Дата: Среда, 01.07.2015, 14:53 | Сообщение № 13
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
RAN,
Тоже так думаю, так как циклов не будет.


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!
 
Ответить
СообщениеRAN,
Тоже так думаю, так как циклов не будет.

Автор - Макрописец
Дата добавления - 01.07.2015 в 14:53
Ivm747 Дата: Пятница, 03.07.2015, 08:56 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
В целом получилось с данными по столбцам. Только пришлось вынести это деление за основную таблицу, потому что в тексте наименования клиента может попасться слэш и тогда появляется больше двух столбцов, и соответственно плывет остальная часть таблицы. Но всё равно большое спасибо за советы!
 
Ответить
СообщениеВ целом получилось с данными по столбцам. Только пришлось вынести это деление за основную таблицу, потому что в тексте наименования клиента может попасться слэш и тогда появляется больше двух столбцов, и соответственно плывет остальная часть таблицы. Но всё равно большое спасибо за советы!

Автор - Ivm747
Дата добавления - 03.07.2015 в 08:56
SLAVICK Дата: Пятница, 03.07.2015, 09:34 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
потому что в тексте наименования клиента может попасться слэш

Советую следующий раз использовать разделители более экзотичные типа:
"|" а лучше : "||" "//" - у меня работают на ура. :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
потому что в тексте наименования клиента может попасться слэш

Советую следующий раз использовать разделители более экзотичные типа:
"|" а лучше : "||" "//" - у меня работают на ура. :D

Автор - SLAVICK
Дата добавления - 03.07.2015 в 09:34
sv2014 Дата: Пятница, 03.07.2015, 14:41 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Ivm747, вам необходим макрос такого типа.Если данные в столбце A,-в столбце B выводится ИНН,можно поменять
в цикле значение индекса суммирования под ваши нужды.Я также пишу с планшета(яблоко)-все получается.
С уважением к модератору и участникам обсуждения:

[vba]
Код
Sub exrt_inn()
Dim w, i%
For i = 1 To 2
w = Split(Range("A" & i).Value, Chr(32))
Range("B" & i) = w(0)
Next i
End Sub
[/vba]
К сообщению приложен файл: example_3_07_in.xlsm (14.3 Kb)
 
Ответить
СообщениеIvm747, вам необходим макрос такого типа.Если данные в столбце A,-в столбце B выводится ИНН,можно поменять
в цикле значение индекса суммирования под ваши нужды.Я также пишу с планшета(яблоко)-все получается.
С уважением к модератору и участникам обсуждения:

[vba]
Код
Sub exrt_inn()
Dim w, i%
For i = 1 To 2
w = Split(Range("A" & i).Value, Chr(32))
Range("B" & i) = w(0)
Next i
End Sub
[/vba]

Автор - sv2014
Дата добавления - 03.07.2015 в 14:41
Udik Дата: Пятница, 03.07.2015, 15:22 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Я пробовал вариант с созданием в первой строке формулы, а затем копированием ее во все строки - тоже очень долго


Не понял, что долго - раскопировать формулу, или пересчёт самих формул? Вот сейчас сделал тест для 10 000 строк - всё в течение пары секунд.

формула
Код

=ЛЕВСИМВ(RC[-1];НАЙТИ(" / ";RC[-1];1)-1)


тема про копирование в диапазон http://www.excelworld.ru/publ/hacks/workspace/quick_fill/21-1-0-93


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Пятница, 03.07.2015, 15:25
 
Ответить
Сообщение
Я пробовал вариант с созданием в первой строке формулы, а затем копированием ее во все строки - тоже очень долго


Не понял, что долго - раскопировать формулу, или пересчёт самих формул? Вот сейчас сделал тест для 10 000 строк - всё в течение пары секунд.

формула
Код

=ЛЕВСИМВ(RC[-1];НАЙТИ(" / ";RC[-1];1)-1)


тема про копирование в диапазон http://www.excelworld.ru/publ/hacks/workspace/quick_fill/21-1-0-93

Автор - Udik
Дата добавления - 03.07.2015 в 15:22
sv2014 Дата: Пятница, 03.07.2015, 16:19 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Ivm747, эти два варианта вышеуказанного макроса можно применять при любом количестве строк
ваших данных,счетчик цикла менять не надо..Предполагается,что ваши данные,начиная с ячейки A1 сплошным потоком(макрос1),либо с промежутками пустых строк(макрос2).

[vba]
Код
Sub extr_inn1()
Dim w, i&, j&
j = Range("A1").End(xlDown).Row
  For i = 1 To j
    w = Split(Range("A" & i).Value, Chr(32))
    Range("B" & i) = w(0)
  Next i
End Sub
[/vba]

[vba]
Код
Sub exrt_inn2()
Dim w, i&, j&
j = Range("A" & Cells.Rows.Count).End(xlUp).Row
  For i = 1 To j
    w = Split(Range("A" & i).Value, Chr(32))
    Range("B" & i) = w(0)
  Next i
End Sub
[/vba]
 
Ответить
СообщениеIvm747, эти два варианта вышеуказанного макроса можно применять при любом количестве строк
ваших данных,счетчик цикла менять не надо..Предполагается,что ваши данные,начиная с ячейки A1 сплошным потоком(макрос1),либо с промежутками пустых строк(макрос2).

[vba]
Код
Sub extr_inn1()
Dim w, i&, j&
j = Range("A1").End(xlDown).Row
  For i = 1 To j
    w = Split(Range("A" & i).Value, Chr(32))
    Range("B" & i) = w(0)
  Next i
End Sub
[/vba]

[vba]
Код
Sub exrt_inn2()
Dim w, i&, j&
j = Range("A" & Cells.Rows.Count).End(xlUp).Row
  For i = 1 To j
    w = Split(Range("A" & i).Value, Chr(32))
    Range("B" & i) = w(0)
  Next i
End Sub
[/vba]

Автор - sv2014
Дата добавления - 03.07.2015 в 16:19
sv2014 Дата: Пятница, 03.07.2015, 16:35 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Ivm747, Уточню,второй макрос,если в ваших данных есть пустые строки,к сожалению нет вашего файл примера

[vba]
Код
Sub exrt_inn2()
Dim w, i&, j&
j = Range("A" & Cells.Rows.Count).End(xlUp).Row
On Error Resume Next
   For i = 1 To j
     w = Split(Range("A" & i).Value, Chr(32))
     Range("B" & i) = w(0)
   Next i
End Sub
[/vba]


Сообщение отредактировал sv2014 - Пятница, 03.07.2015, 16:36
 
Ответить
СообщениеIvm747, Уточню,второй макрос,если в ваших данных есть пустые строки,к сожалению нет вашего файл примера

[vba]
Код
Sub exrt_inn2()
Dim w, i&, j&
j = Range("A" & Cells.Rows.Count).End(xlUp).Row
On Error Resume Next
   For i = 1 To j
     w = Split(Range("A" & i).Value, Chr(32))
     Range("B" & i) = w(0)
   Next i
End Sub
[/vba]

Автор - sv2014
Дата добавления - 03.07.2015 в 16:35
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнение ячеек в столбце таблицы необходимой формулой (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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