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

Вход

Регистрация

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

 

= Мир MS Excel/Сцепить значения одних ячеек, если сходятся данный в других - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Сцепить значения одних ячеек, если сходятся данный в других
AlexanderSh88 Дата: Понедельник, 28.09.2015, 21:58 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Здравствуйте. Можно ли написать макрос для решения данной задачи?
Я выделяю диапазон данных и запускаю макрос.
Макрос должен сцепить значения (через знак +) третьего и четвертого столбца, при условии, что совпадает первый и второй столбец. Если первый и второй столбец не совпадает, то ничего сцеплять не надо. Также должны удалиться пустые строки со смещением вверх. Прикрепил пример. В листе "Исходный", показано состояние до запуска макроса. В листе "Результат" показан результат после применения макроса. Выделенный диапазон A2-D21 (Лист "Исходный")
К сообщению приложен файл: 9465175.xlsx (11.9 Kb)


AlexanderSh88

Сообщение отредактировал AlexanderSh88 - Понедельник, 28.09.2015, 21:59
 
Ответить
СообщениеЗдравствуйте. Можно ли написать макрос для решения данной задачи?
Я выделяю диапазон данных и запускаю макрос.
Макрос должен сцепить значения (через знак +) третьего и четвертого столбца, при условии, что совпадает первый и второй столбец. Если первый и второй столбец не совпадает, то ничего сцеплять не надо. Также должны удалиться пустые строки со смещением вверх. Прикрепил пример. В листе "Исходный", показано состояние до запуска макроса. В листе "Результат" показан результат после применения макроса. Выделенный диапазон A2-D21 (Лист "Исходный")

Автор - AlexanderSh88
Дата добавления - 28.09.2015 в 21:58
Hugo Дата: Понедельник, 28.09.2015, 22:38 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3859
Репутация: 819 ±
Замечаний: 0% ±

365
Здравствуйте. Можно написать макрос, и не особо сложно написать используя scripting.dictionary. Но работать под Маком не будет. Пока не исзвестна система - может не стоит время тратить?

P.S. Хотя написал:
[vba]
Код
Option Explicit

Sub tt()
      Dim a(), i&, t$, d1 As Object, d2 As Object, k
      a = Selection.Value
      Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1
      Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1

      For i = 1 To UBound(a)
          t = Trim(a(i, 1)) & "|" & Trim(a(i, 2))
          If Len(t) > 1 Then
              d1.Item(t) = IIf(Len(Trim(a(i, 3))), d1.Item(t) & "+" & Trim(a(i, 3)), d1.Item(t))
              d2.Item(t) = IIf(Len(Trim(a(i, 4))), d2.Item(t) & "+" & Trim(a(i, 4)), d2.Item(t))
          End If
      Next
      With Sheets("Результат")
          .UsedRange.Offset(1).Clear
          i = 1
          For Each k In d1.keys
              i = i + 1
              .Cells(i, 1).Resize(, 2) = Split(k, "|")
              .Cells(i, 3) = Mid(d1.Item(k), 2)
              .Cells(i, 4) = Mid(d2.Item(k), 2)
          Next
      End With

End Sub
[/vba]
Выгрузка собранного на лист "Результат", но можно и на исходный выгружать - замените в коде название листа.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Понедельник, 28.09.2015, 23:42
 
Ответить
СообщениеЗдравствуйте. Можно написать макрос, и не особо сложно написать используя scripting.dictionary. Но работать под Маком не будет. Пока не исзвестна система - может не стоит время тратить?

P.S. Хотя написал:
[vba]
Код
Option Explicit

Sub tt()
      Dim a(), i&, t$, d1 As Object, d2 As Object, k
      a = Selection.Value
      Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1
      Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1

      For i = 1 To UBound(a)
          t = Trim(a(i, 1)) & "|" & Trim(a(i, 2))
          If Len(t) > 1 Then
              d1.Item(t) = IIf(Len(Trim(a(i, 3))), d1.Item(t) & "+" & Trim(a(i, 3)), d1.Item(t))
              d2.Item(t) = IIf(Len(Trim(a(i, 4))), d2.Item(t) & "+" & Trim(a(i, 4)), d2.Item(t))
          End If
      Next
      With Sheets("Результат")
          .UsedRange.Offset(1).Clear
          i = 1
          For Each k In d1.keys
              i = i + 1
              .Cells(i, 1).Resize(, 2) = Split(k, "|")
              .Cells(i, 3) = Mid(d1.Item(k), 2)
              .Cells(i, 4) = Mid(d2.Item(k), 2)
          Next
      End With

End Sub
[/vba]
Выгрузка собранного на лист "Результат", но можно и на исходный выгружать - замените в коде название листа.

Автор - Hugo
Дата добавления - 28.09.2015 в 22:38
AlexanderSh88 Дата: Понедельник, 28.09.2015, 23:52 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
а как его применять?
Я создал макрос, вставил этот код, потом выделяю диапазон А2-D21, применяю макрос, что - то мелькнуло, но ничего не изменилось


AlexanderSh88
 
Ответить
Сообщениеа как его применять?
Я создал макрос, вставил этот код, потом выделяю диапазон А2-D21, применяю макрос, что - то мелькнуло, но ничего не изменилось

Автор - AlexanderSh88
Дата добавления - 28.09.2015 в 23:52
Hugo Дата: Вторник, 29.09.2015, 00:00 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3859
Репутация: 819 ±
Замечаний: 0% ±

365
А что Вы хотели изменить на листе "Результат"? :)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеА что Вы хотели изменить на листе "Результат"? :)

Автор - Hugo
Дата добавления - 29.09.2015 в 00:00
AlexanderSh88 Дата: Вторник, 29.09.2015, 00:55 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
а сейчас понял, спасибо :)
я лист "Результат" создал просто для примера. т.е. на самом деле есть только один лист.
В выделенном диапазоне сцепляются третий и четвертый столбцы, если первый и второй одинаковые. Мне сделали вот такой вариант. только здесь таблицы нужно вводить не по вертикали, а по горизонтали :) Прикрепил.
К сообщению приложен файл: MergeSortFood.xlsm (18.5 Kb)


AlexanderSh88

Сообщение отредактировал AlexanderSh88 - Вторник, 29.09.2015, 00:56
 
Ответить
Сообщениеа сейчас понял, спасибо :)
я лист "Результат" создал просто для примера. т.е. на самом деле есть только один лист.
В выделенном диапазоне сцепляются третий и четвертый столбцы, если первый и второй одинаковые. Мне сделали вот такой вариант. только здесь таблицы нужно вводить не по вертикали, а по горизонтали :) Прикрепил.

Автор - AlexanderSh88
Дата добавления - 29.09.2015 в 00:55
  • Страница 1 из 1
  • 1
Поиск:

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