Макрос excel через запятую

 

Всем доброго времени суток!
До сих пор обходился «стандартными» приемами Excel-я, ранее не сталкивался с необходимостью в «програмировании» (макросоми), подсказали что в моем случае именно нужен макрос, рассмотрел пример с «крыжиками»- здорово, «крыжуется»  :)  )) примерно об этом и шла речь, только как в одну «объединенную» ячейку (лист2, B4-C6) уместить значение из нескольких (через запятую, как на выноске) причем с другого листа (B6-B9) той же книги, как это бедет (может) выглядеть в совокупности с моей задачей?
Думаю, что реализованное решение, найдет применение!
Хочу выразить благодарность «проекту»!!!
(некоторые приемы «с сайта» мне помогли, например «крыжики» (кстати в файле именно «этот» пример),
«выпадающий вспсок»- с клавиатуры очень удобно, и некоторые другие «вещицЫ»!!!)

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

#2

21.08.2013 21:44:09

Код
=VLOOKUPCOUPLE(Лист1!A2:B9;1;"a";2;", ")

VLOOKUPCOUPLE — это UDF из копилки.

http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=42447&MID=358178#message358178

Изменено: Hugo21.08.2013 21:47:04

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Огромное СПАСИБО!
разобрался что к чему по поводу:»VLOOKUPCOUPLE», одна беда (=VLOOKUPCOUPLE(Лист1!A2:B9;1;»a»;2;», »  ;)  ) в моем 2007м «экселе» почемуто не хотит работать, тем неменее принцип понятен, а вот (Прикрепленные файлы
В одну ячейку.xlsm (21.47 КБ)) работает!!! что косается ф»У»рмулировок, то скажу так: в любом «деле» есть свои «мастера», и если «плотник» обращается к «каменьщику» или «слесарю», это не говорит о том, что «плотник» плохой, а о том, что другой «мастер» — «свое дело знает лучше», от «туда» и результат!!!
Еще раз, ВСЕМ ОГРОМНОЕ СПАСИБО!!!
С Уважением!

Изменено: Valdemar100622.08.2013 19:58:39

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

#6

22.08.2013 20:35:03

Должно работать и в 2007 — у меня работает.
Может макросы запрещены?
Можно код разместить в personal.xlsm и использовать  без разрешения макросов — только чуть синтаксис будет другой, с указанием файла — настраивайте через мастер формул.

Я тут тоже создал макрос, перебором всех значений в ячейке, исходные данные в столбце А, Результаты выводятся в ячейку С3
Sub prov()
r = 2
Text = «»
Sum = 0
dlina = CInt(InputBox(«введите число цифр»))
    While Cells(r, 1).Value <> «»
    Sum = 0
        If Len(Cells(r, 1).Value) = dlina Then
            For i = 1 To dlina
            Select Case Mid(Cells(r, 1).Value, i, 1)
                Case 0
                Sum = Sum + 1
                Case 1
                Sum = Sum + 1
                Case 2
                Sum = Sum + 1
                Case 3
                Sum = Sum + 1
                Case 4
                Sum = Sum + 1
                Case 5
                Sum = Sum + 1
                Case 6
                Sum = Sum + 1
                Case 7
                Sum = Sum + 1
                Case 8
                Sum = Sum + 1
                Case 9
                Sum = Sum + 1
            End Select
            Next i
            End If
            If Sum = dlina Then
            Text = Text & «, » & Cells(r, 1).Value
            End If
        r = r + 1
    Wend
Cells(3, 2).Value=»Результат»
Cells(3, 3).Value = Right(Text, Len(Text) — 2)
End Sub

7 / 7 / 4

Регистрация: 20.02.2015

Сообщений: 170

1

Выстроить значения через запятую

29.09.2015, 13:49. Показов 4845. Ответов 9


Студворк — интернет-сервис помощи студентам

Добрий день!

Есть отчет. нужно значения колонки С(Лист1) вистроить на другом листе(Лист2) через запятую и
скопировать ети значения в буфер. при етом если значение ячейки С равно 0(ноль), т
о такие значения проигнорировать(не вистраивать через запятую)



0



Vlad999

3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

29.09.2015, 14:27

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

собрать в переменную можно так

Visual Basic
1
2
3
4
5
6
7
Sub vvv()
Dim n$, s As Range
For Each s In Range("C2:C32").SpecialCells(xlCellTypeConstants, 23)
  If s <> 0 Then n = n & " " & s.Value
Next
n=Replace(Trim(n)," ",", ")
End Sub

потом n можно выгружать куда угодно.
например
Sheets(«Лист2»).Range(«A1»)=n



0



7 / 7 / 4

Регистрация: 20.02.2015

Сообщений: 170

29.09.2015, 14:52

 [ТС]

3

Vlad999
out of memory



0



4 / 4 / 3

Регистрация: 29.09.2015

Сообщений: 10

29.09.2015, 15:13

4

попробуйте..



0



7 / 7 / 4

Регистрация: 20.02.2015

Сообщений: 170

29.09.2015, 15:18

 [ТС]

5

Viv26
все работает
а можно в макрос добавить копирование ети значения в буфер



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

29.09.2015, 15:36

6

а поиск зачем? изучайте, для чего вообще копируете в буфер?



0



7 / 7 / 4

Регистрация: 20.02.2015

Сообщений: 170

29.09.2015, 15:55

 [ТС]

7

Vlad999
в буфер копирую для вставки в программу для анализа
а так можна?
Range(«A4»).Select
Selection.Copy



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

29.09.2015, 16:05

8

по идее можно, только селекты уберите
Range(«A4»).Copy



0



7 / 7 / 4

Регистрация: 20.02.2015

Сообщений: 170

29.09.2015, 16:28

 [ТС]

9

спасибо
все работает



0



AlexM

2640 / 1697 / 694

Регистрация: 04.09.2015

Сообщений: 3,367

29.09.2015, 17:05

10

еще вариант без цикла

Visual Basic
1
2
3
4
5
Sub Macros()
Dim AArray
AArray = Range([C2], Range("C" & Rows.Count).End(xlUp)).Value
Sheets(2).Range("A1") = Replace(WorksheetFunction.Trim(Replace(" " & Join(Application.Transpose(AArray), " ") & " ", " 0 ", "")), " ", ",")
End Sub



0



Макрос для копирования и объединения ячеек через запятую

Автор Посетитель 22.03.2023, 22 марта 2023, 12:43


Посетитель 22.03.2023

  • Посетитель форума
  • Сообщения: 2
  • Записан

Здравствуйте

Хотелось бы попросить помощи в написании макроса для Excel, так как в работе по тегированию мультимедийного контента постоянно используется одна и та же операция и хотелось бы максимально ускорить процесс ее выполнения.
Суть операции: выделение с зажатым CTRL и копирование ячеек в столбце таблицы Excel (ячейки могут быть как смежными, так и не смежными, но они всегда находятся в одном столбце) и вставка содержимого скопированных ячеек через запятую с пробелом в ячейку в другой таблице Excel.

Сейчас я копирую выделенные ячейки и вставляю их в столбец промежуточной таблицы Excel с такой формулой:
=ОБЪЕДИНИТЬ(«, «;1; A1:A30 )

А затем копирую получившуюся ячейку и уже вставляю ее в финальную таблицу.

Хотелось бы создать макрос, который позволит убрать эти лишние действия с промежуточной таблицей. Буду очень благодарен за помощь.



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

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



Посетитель 22.03.2023

  • Посетитель форума
  • Сообщения: 2
  • Записан

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


  • Форум по VBA, Excel и Word

  • VBA, Excel

  • VBA, макросы в Excel

  • Макрос для копирования и объединения ячеек через запятую

Список ячеек через запятую из переменных.(Несмежные)

Amon

Дата: Четверг, 27.09.2018, 15:59 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 65


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день уважаемые форумчане.

Вот код из модуля файла примера.

[vba]

Код

    Dim exam As Range    ‘Сюда назначаю список ячеек не по порядку идущих
    Dim ws As Worksheet
        Set ws = Workbooks(«Пример.xlsm»).Worksheets(«Sheet1»)
    Dim c%: c = 9              ‘ Тут указываю первую строку вместо 9 тут стоит rng.row которая прилетала с другой функции ( Не суть)
        Dim mm(1 To 17) As Range  ‘Сюда заливаю адреса строк по порядку
            Set mm(1) = ws.Range(«A» & c)   ‘Мне нужна колонка А и строка которая найдена была другой функцией в данном примере 9
                For i = 2 To 17                        ‘ Тут по порядку циклом назначение в массив
                    Set mm(i) = ws.Range(«A» & c + i — 1)   
                Next i
                      Set exam = Application.Union(mm(1), mm(4), mm(3))      ‘Как эту строку записать что-то типа ws.[mm(1),mm(4),mm(3)] ? Лист и номера назначенных строк в колонке А их всегда больше двух
                    ‘ Просто проблема в том что я глуп и сколько не читаю понять не могу. Union иногда пропускает первый диапазон( Почему не знаю)
                    ‘ Если просто указывать ws.[A9,A12,A11] все работает, а с массивом не получается помогите пожалуйста.

[/vba]

К сообщению приложен файл:

0120344.xlsm
(18.6 Kb)

 

Ответить

StoTisteg

Дата: Четверг, 27.09.2018, 16:57 |
Сообщение № 2

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

Это отрадно. А в чём состоит вопрос?


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

Amon

Дата: Четверг, 27.09.2018, 17:02 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 65


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Нужно указываться адреса строк в столбце динамически. При явном указании все работает например ws.[A3,A1,A9] — Так работает, и все ок. Но номер строки меняется постоянно. Я нахожу шапку и от нее уже назначаю адреса строк.

 

Ответить

StoTisteg

Дата: Четверг, 27.09.2018, 17:17 |
Сообщение № 4

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

А в чём проблема сделать динамический массив типа[vba][/vba]и работать с ним?


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

Amon

Дата: Четверг, 27.09.2018, 17:31 |
Сообщение № 5

Группа: Пользователи

Ранг: Участник

Сообщений: 65


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Проблема в моих знаниях, точнее в их отсутствии.(
А как вывести список ячеек? ws.(«cls(1),cls(2),cls(3)») ?

Сообщение отредактировал AmonЧетверг, 27.09.2018, 17:31

 

Ответить

Gustav

Дата: Четверг, 27.09.2018, 20:29 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Amon, выбирайте что по душе:
[vba]

Код

Sub aaa()
    Dim rng  As Range
    Dim addr As String

        Range(«A1») = 1
    Range(«C1») = 3
    Range(«E1») = 5

        Set rng = Union(Range(«A1»), Range(«C1»), Range(«E1»))
    Debug.Print WorksheetFunction.Sum(rng) ‘= 9

        addr = rng.Address(False, False)
    Debug.Print addr ‘= A1,C1,E1

        Debug.Print WorksheetFunction.Sum(Worksheets(1).Range(addr)) ‘= 9 — как раз случай ws.Range(«A1,C1,E1») = ws.[A1,C1,E1]
    Debug.Print WorksheetFunction.Sum(Worksheets(1).[A1,C1,E1]) ‘= 9

        Debug.Print Application.Evaluate(«=SUM(A1,C1,E1)») ‘= 9
    Debug.Print [=SUM(A1,C1,E1)] ‘= 9
End Sub

[/vba]
Мне кажется, Ваши случаи — те, в которых можно использовать аргумент в виде текстовой строки.


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Amon

Дата: Пятница, 28.09.2018, 10:54 |
Сообщение № 7

Группа: Пользователи

Ранг: Участник

Сообщений: 65


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Gustav, Все равно я хоть убей не понимаю как назначить диапазон
Что я делаю не так подскажите пожалуйста?
[vba]

Код

Sub nasd()
    Dim exam As Range
    Dim ws As Worksheet
        Set ws = Workbooks(«Пример.xlsm»).Worksheets(«Sheet1»)
    Dim c%: c = 9
        Dim mm(1 To 17) As Range
           Set mm(1) = ws.Range(«A» & c)

                            For i = 2 To 17
                    Set mm(i) = ws.Range(«A» & c + i — 1)
                Next i
                Stop
                    Set rng = Union(mm(3), mm(1), mm(17), mm(4))  
         Dim addr$:addr = rng.Address(False, False)                       
                ‘Set exam = ws & «.» & «[» & addr & «]»                ‘Так объект не поддерживает данный метод
                ‘Set exam = addr                    ‘Type missmach
End Sub

[/vba]

[vba]

Код

Set rng = Union(mm(3), mm(1), mm(17), mm(4))  ‘ И вот опять..  тут 4 диапазона A11,A9,A25,A12
Dim addr$:addr = rng.Address(False, False)   ‘ Но эта строка дает мне A9,A25,A11:A12 , а мне нужно использовать их именно в таком порядке как я написал

[/vba]

Сообщение отредактировал AmonПятница, 28.09.2018, 11:02

 

Ответить

boa

Дата: Пятница, 28.09.2018, 11:40 |
Сообщение № 8

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

Amon,
так вы их так и собирайте, как хотите
[vba]

Код

Dim addr$: addr = mm(3).Address(False, False) & «,» & _
                  mm(1).Address(False, False) & «,» & _
                  mm(17).Address(False, False) & «,» & _
                  mm(4).Address(False, False)

[/vba]
только зачем? не понятны дальнейшие действия с полученной строкой.


 

Ответить

Amon

Дата: Пятница, 28.09.2018, 12:11 |
Сообщение № 9

Группа: Пользователи

Ранг: Участник

Сообщений: 65


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

boa, С одни разобрались.
Как теперь назначить диапазон ? [vba]

Код

Set exam = ws.Range(addr)  

[/vba] Заработало вроде спасибо большое.
Дальнейшие действия со строкой — Список этих ячеек необходим для прохождения теста по ним. нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.

Сообщение отредактировал AmonПятница, 28.09.2018, 12:12

 

Ответить

Gustav

Дата: Пятница, 28.09.2018, 14:08 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.

[vba]

Код

Dim cell As Range

For Each cell In exam.Cells
    Debug.Print cell.Address(0, 0)
Next cell

[/vba]


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макрос excel функция или
  • Макрос excel функция в макросе
  • Макрос excel формулу в строку
  • Макрос excel форматирование ячеек
  • Макрос excel форматирование таблица