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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2012, 15:17   #1
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
Вопрос Объединение нескольких ячеек диапазона в одну

Подскажите пожалуйста.

есть диапазон ячеек (A1:A25) с числами. Нужно скопировать их в одну ячейку через запятую. через формулу с использованием &", "& это слишком долго получается. можно ли как-то средствами VBA это реализовать?

Заранее спасибо.
tibhar940 вне форума Ответить с цитированием
Старый 24.09.2012, 15:57   #2
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Sub Collect()
Dim i As Long
Dim count As String

count = vbNullString
For i = 1 To 25
If count = vbNullString Then
count = Cells(i, 1).Value
Else
count = count & ", " & Cells(i, 1).Value
End If
Next
[B1].Value = count
End Sub

Последний раз редактировалось Vja4eslav; 24.09.2012 в 16:08.
Vja4eslav вне форума Ответить с цитированием
Старый 24.09.2012, 15:58   #3
WIC
Форумчанин Подтвердите свой е-майл
 
Регистрация: 21.09.2007
Сообщений: 138
По умолчанию

СЦЕПИТЬ() не пробовали?
запятую можно в ячейку вбить и использовать как ссылку.
WIC вне форума Ответить с цитированием
Старый 24.09.2012, 16:07   #4
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Vja4eslav Посмотреть сообщение
Sub Collect()
Dim i As Long
Dim count As String

count = vbNullString
For i = 1 To 25
If count = vbNullString Then
count = Cells(i, 1).Value
Else
count = count & "," & Cells(i, 1).Value
End If
Next
[B1].Value = count
End Sub
Спасибо, а где здесь указание на то, что это диапазон A1:A25 не пойму.
Можно ли тоже самое сделать для выделенных ячеек?
tibhar940 вне форума Ответить с цитированием
Старый 24.09.2012, 16:16   #5
ikki_pf
Форумчанин
 
Регистрация: 25.02.2012
Сообщений: 166
По умолчанию

меня недавно плохому научили

Код:
Sub t()
  [b1] = Join(Application.Transpose([a1:a25]), ",")
End Sub
ikki_pf вне форума Ответить с цитированием
Старый 24.09.2012, 16:29   #6
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от ikki_pf Посмотреть сообщение
меня недавно плохому научили

Код:
Sub t()
  [b1] = Join(Application.Transpose([a1:a25]), ",")
End Sub
Очень даже хорошее. А можно ли тоже самое сделать для выделенного диапазона?
tibhar940 вне форума Ответить с цитированием
Старый 24.09.2012, 16:32   #7
ShAM66
Форумчанин
 
Регистрация: 24.02.2012
Сообщений: 160
По умолчанию

Можно так:
Код:
Sub Collect1()
Dim c
Dim count As String

count = vbNullString
For Each c In Selection.Value
If count = vbNullString Then
count = c
Else
count = count & "," & c
End If
Next
[b1].Value = count
End Sub
ShAM66 вне форума Ответить с цитированием
Старый 24.09.2012, 16:35   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Function JoinRange(rg As Range) As String
  If rg.Rows.Count > rg.Columns.Count Then JoinRange = Join(Application.Transpose(rg), ",") _
    Else JoinRange = Join(Application.Transpose(Application.Transpose(rg)), ",")
End Function
rg - диапазон-вектор (строка либо столбец с данными)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.09.2012, 16:41   #9
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Код:
Function JoinRange(rg As Range) As String
  If rg.Rows.Count > rg.Columns.Count Then JoinRange = Join(Application.Transpose(rg), ",") _
    Else JoinRange = Join(Application.Transpose(Application.Transpose(rg)), ",")
End Function
rg - диапазон-вектор (строка либо столбец с данными)
Что-то не совсем пойму как это использовать.
tibhar940 вне форума Ответить с цитированием
Старый 24.09.2012, 16:52   #10
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
А можно ли тоже самое сделать для выделенного диапазона?
Вполне. Например, так:

Код:
  Dim A()
  A = Selection
  For I = 1 To UBound(A)
    [A9].Offset(I) = Join(Application.Index(A, I, 0), ";")
  Next I
объединяет значения по строкам диапазона

Цитата:
Что-то не совсем пойму как это использовать.
Вставьте функцию в проект, а ниже (например) сделайте подобную процедуру:
Код:
Sub SelectionJoin
  MsgBox JoinRange(Selection)  
End Sub
p.s. с макросом Игоря, во избежание ошибок, выделяйте лишь один столбец или строку.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 24.09.2012 в 16:57.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объединение нескольких ячеек в одну batto29 Microsoft Office Excel 2 07.12.2011 05:12
Объединение нескольких строк в одну knzhukov Microsoft Office Access 4 06.06.2011 07:52
Объединение нескольких таблиц в одну книгу Gregory_Colbert Microsoft Office Excel 6 14.09.2010 10:24
Объединение нескольких БД в одну БД GhostBZ БД в Delphi 4 01.09.2009 09:00
Объединение данных из диапазона ячеек Lal Microsoft Office Excel 8 12.08.2009 11:24