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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2015, 23:14   #1
diop
Пользователь
 
Регистрация: 09.01.2015
Сообщений: 26
По умолчанию Сцепление текстовых значений при двух условиях

ЗДРАВСТВУЙТЕ.

необходимо сцепить текстовые ячейки в столбце "итоги-1" на листе2
при вводе условий "месяц2" и "значение1"

используя данные листа1

для WORD2003
Вложения
Тип файла: rar итог-5.rar (4.2 Кб, 8 просмотров)
diop вне форума Ответить с цитированием
Старый 22.01.2015, 00:55   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение
Вложения
Тип файла: rar итог-5.rar (10.6 Кб, 9 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.01.2015, 01:13   #3
diop
Пользователь
 
Регистрация: 09.01.2015
Сообщений: 26
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
см.вложение
спасибо за интересное решение задачи.
а можно через формулу и массивы.

ибо если изменить значения на первом листе то необходимо также обновление данных столбца "итог-1"
diop вне форума Ответить с цитированием
Старый 22.01.2015, 01:58   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

собственно, все уже было и в первом файле, только подойти с другой стороны
Вложения
Тип файла: rar итог-5.rar (10.3 Кб, 14 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.01.2015, 08:15   #5
diop
Пользователь
 
Регистрация: 09.01.2015
Сообщений: 26
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
собственно, все уже было и в первом файле, только подойти с другой стороны

прошу извинения, Игорь,
но я так делал, то тогда почему при изменении на Лист1 автоматически не изменяются данные на Лист2.
diop вне форума Ответить с цитированием
Старый 22.01.2015, 16:13   #6
diop
Пользователь
 
Регистрация: 09.01.2015
Сообщений: 26
По умолчанию

Цитата:
Сообщение от diop Посмотреть сообщение
прошу извинения, Игорь,
но я так делал, то тогда почему при изменении на Лист1 автоматически не изменяются данные на Лист2.
то как можно заставить автоматически обновлять данные.
diop вне форума Ответить с цитированием
Старый 22.01.2015, 17:08   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

может как-то так
Вложения
Тип файла: rar итог-5.rar (10.6 Кб, 13 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.01.2015, 21:50   #8
diop
Пользователь
 
Регистрация: 09.01.2015
Сообщений: 26
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
может как-то так
а что если переделать следующую функцию под следующие параметры

диапазон указывает не 1 столбец, а два которые стоят рядом, а критерий не 1 ячейка а две (стоящие рядом "С4:D4" напримет)

'---------------------------------------------------------------------------------------
' Procedure : СцепитьЕсли
' Author : The_Prist(Дмитрий); http://www.excel-vba.ru
' Purpose : Функция сцепляет данные из диапазона, указанного критерием Диапазон_сцепления
' в том случае, если ячейка из критерия Диапазон входит в условие
' указанное Критерием. В качекстве Критерия может быть ссылка на ячейку,
' либо текст/число, либо операторы сравнения
' (как все привыкли в СУММЕСЛИ, СЧЁТЕСЛИ и т.д. - "<>""",">8" и пр.).
'---------------------------------------------------------------------------------------
Function СцепитьЕсли(ByRef Диапазон As Range, ByVal Критерий As String, ByRef Диапазон_сцепления As Range, Optional Разделитель As String = " ") As String
Dim li As Long, sStr As String, avItem, avDateArr(), avRezArr(), lUBnd As Long
If Диапазон.Count > 1 Then
avDateArr = Intersect(Диапазон, Application.Caller.Parent.UsedRange ).Value
avRezArr = Intersect(Диапазон_сцепления, Application.Caller.Parent.UsedRange ).Value
If Диапазон.Rows.Count = 1 Then
avDateArr = Application.Transpose(avDateArr)
avRezArr = Application.Transpose(avRezArr)
End If
Else
avDateArr(1, 1) = Диапазон.Value
avRezArr(1, 1) = Диапазон_сцепления.Value
End If
lUBnd = UBound(avDateArr, 1)
'Опрееделяем вхождение операторов сравнения в Критерий
Dim objRegExp As Object, objMatches As Object
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = False: objRegExp.Pattern = "=|<>|=>|>=|<=|=<|>|<"
Set objMatches = objRegExp.Execute(Критерий)
'Если есть вхождения
If objMatches.Count > 0 Then
Dim sStrMatch As String
sStrMatch = objMatches.Item(0)
Критерий = Replace(Replace(Критерий, sStrMatch, "", 1, 1), Chr(34), "", 1, 2)
Select Case sStrMatch
Case "="
For li = 1 To lUBnd
If avDateArr(li, 1) = Критерий Then
If Trim(avRezArr(li, 1)) <> "" Then _
sStr = sStr & IIf(sStr <> "", Разделитель, "") & avRezArr(li, 1)
End If
Next li
Case "<>"
For li = 1 To lUBnd
If avDateArr(li, 1) <> Критерий Then
If Trim(avRezArr(li, 1)) <> "" Then _
sStr = sStr & IIf(sStr <> "", Разделитель, "") & avRezArr(li, 1)
End If
Next li
Case ">=", "=>"
For li = 1 To lUBnd
If avDateArr(li, 1) >= Критерий Then
If Trim(avRezArr(li, 1)) <> "" Then _
sStr = sStr & IIf(sStr <> "", Разделитель, "") & avRezArr(li, 1)
End If
Next li
Case "<=", "=<"
For li = 1 To lUBnd
If avDateArr(li, 1) <= Критерий Then
If Trim(avRezArr(li, 1)) <> "" Then _
sStr = sStr & IIf(sStr <> "", Разделитель, "") & avRezArr(li, 1)
End If
Next li
Case ">"
For li = 1 To lUBnd
If avDateArr(li, 1) > Критерий Then
If Trim(avRezArr(li, 1)) <> "" Then _
sStr = sStr & IIf(sStr <> "", Разделитель, "") & avRezArr(li, 1)
End If
Next li
Case "<"
For li = 1 To lUBnd
If avDateArr(li, 1) < Критерий Then
If Trim(avRezArr(li, 1)) <> "" Then _
sStr = sStr & IIf(sStr <> "", Разделитель, "") & avRezArr(li, 1)
End If
Next li
End Select
Else 'Если нет вхождения
For li = 1 To lUBnd
If avDateArr(li, 1) Like Критерий Then
If Trim(avRezArr(li, 1)) <> "" Then _
sStr = sStr & IIf(sStr <> "", Разделитель, "") & avRezArr(li, 1)
End If
Next li
End If
СцепитьЕсли = sStr
End Function
diop вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет количества ячеек при двух условиях tigov Microsoft Office Excel 2 22.10.2013 12:52
Сцепление двух списков ННадежда Microsoft Office Excel 6 25.01.2011 17:02
Сохранение и загрузка в файл текстовых значений и значений типа Boolean krikaved Общие вопросы Delphi 1 16.03.2010 07:53
Деление элементов двух массивов при зад. условиях Leona_L Microsoft Office Excel 6 03.04.2009 20:52
Слияние двух текстовых файлов nataly_ukr Общие вопросы Delphi 5 26.12.2007 16:45