Страницы: 1
RSS
Объединение данных в таблице
 
Вечер добрый)

Есть отчет (прикрепил)

В нем список клиентов и сумма, которую оплатил каждый клиент
Из программы отчет выгружается криво, делает разбивку по счетам клиентов и в итоге вместо того чтобы видеть сколько (например за 6 мес) оплатил  1 клиент, я вижу 4 строки с одним и тем же клиентом https://yadi.sk/i/JkF2hkeQLC0_Wg (руками нереально все списки суммировать)

Необходимо объединить данные таким образом, чтобы имя клиента не повторялось в отчете, и при этом все данные по нему суммировались в 1 строку с его именем
Также необходимо отделить нумерацию списка от наименования клиента

Подскажите, как такое сделать плз
Заранее благодарен!
 
bigfoot, в файле покажите как должно быть
 
А "Абдуллаева Н.И". и "Абдуллаева Наталия Ивановна" - это один и тот же клиент или разные?  
 
Ну, если текст как числа преобразовать в числа (заменить неразрывные пробелы и пробелы на пусто, точку на запятую), плюс, регулярками вытащить наименование клиента, то потом можно простой сводной подбить суммы.
 
А как дальше именно объединение сделать?

Цитата
_Igor_61 написал:  это один и тот же клиент или разные?
В идеале одни и те же, но думаю только наш мозг может видеть это))
Для таблиц это будут разные клиенты
 
Цитата
bigfoot написал:
А как дальше
Всё просто. Изучить.
 
Цитата
artyrH написал:
в файле покажите как должно быть
https://yadi.sk/i/MJhxKBqaf6ej_w
 
Код
Sub iRead()
Dim a&, txt$, t$, arr(), b&, c%, t1$, ArrF(), x%
a = 1
With Application.FileDialog(msoFileDialogFilePicker)
  .AllowMultiSelect = False: .Show
  t = .SelectedItems(1)
End With
If Len(t) = 0 Then Exit Sub
Open t For Input As #a
Do
  Line Input #a, txt
  txt = Replace(txt, Chr(34), "")
  If Left(txt, 1) Like "#" Then
    b = b + 1: ReDim Preserve arr(1 To b): c = 1: t1 = ""
    Do While Mid$(txt, c, 1) Like "#"
      t1 = t1 & Mid$(txt, c, 1): c = c + 1
    Loop
    'If Mid$(txt, c, 1) = "w" Then c = c + 1
    txt = t1 & ";" & Mid$(txt, c)
    arr(b) = Split(txt, ";"): t1 = arr(b)(UBound(arr(b))): t = ""
    If InStr(t1, ".") Then t1 = Left$(t1, InStr(t1, ".") - 1)
    For x = 1 To Len(t1)
      If Mid$(t1, x, 1) Like "#" Then t = t & Mid$(t1, x, 1)
    Next
    If Len(t) > 0 Then arr(b)(UBound(arr(b))) = CDbl(t)
  End If
Loop Until EOF(a)
Close #a
ReDim ArrF(1 To b, 1 To UBound(arr(1)) + 1)
For a = 1 To b
  For b = 1 To UBound(ArrF, 2)
    If b - 1 <= UBound(arr(a)) Then ArrF(a, b) = arr(a)(b - 1)
  Next
Next
[A:F].Clear
With [A1].Resize(UBound(ArrF), UBound(ArrF, 2))
 .Value = ArrF: .Borders.LineStyle = 1
End With
[A1].CurrentRegion.EntireColumn.AutoFit
End Sub
Изменено: Anchoret - 22.02.2019 21:31:24
 
Андрей VG, в данном случае наверное не поможет :)
Кроме Абдуллаевой (#3) там еще встречаются типа 3880Ярыгин Олег Иванович и 3881Ярыгин Олег Иванович, похоже, что нужно либо выгрузку настраивать, либо объяснять операторам по вводу данных, что у одного и того же клиента не должно быть разных имен  :)  
 
Цитата
_Igor_61 написал:
там еще встречаются типа 3880Ярыгин Олег Иванович и 3881Ярыгин Олег Иванович
Игорь, а что с ними не так? Сводная строится. Там разве что регулярку нужно подправить - не всё просмотрел. Лучше
Код
FClientReg.Pattern = "\d*w?(.+)"
 
pq
 
Anchoret, открывается пустой файл
видимо к меня не хватает знаний что-то там настроить)
то что выше написан код, я к сожалению не понимаю в этом ничего, даже не представляю куда его применять))
Если не сложно и это пояснимо, дайте комент плз

Цитата
Андрей VG написал:  Сводная.xlsx  (231.67 КБ)
Андрей, в этом файле все отлично получилось, спасибо большое!!)
Как мне применить это для других моих таблиц?
 
bigfoot, чтобы модераторы после Вас не убирали, почитайте, что такое цитата и когда она нужна.

И нужно предложить название темы, отражающее суть Вашей задачи (сейчас название общее). Модераторы заменят.
 
Цитата
bigfoot написал: это пояснимо, дайте комент плз
Цитата
bigfoot написал: Как мне применить это для других моих таблиц?
Опять же эта информация есть на сайте.
 
Наверное,я неправильно понял - из стартового сообщения понял так, что нужно сделать список клиентов (удалить дубликаты), и в строку напротив каждого вывести все значения, которые встречаются у этого клиента в исходной таблице, т.е. писать макрос. А наверное достаточно суммы  :)  
 
bigfoot, в этой части выгрузки полная каша:
Код
3395ФБГУ Центр Системы Мониторинга Рыболовства и Связи;4 100.000
ФГАУ УПРАВЛЕНИЕ ПО ОРГАНИЗАЦИИ И;
3396ПРОВЕДЕНИЮ СПОРТИВНЫХ МЕРОВПРИЯТИЙ;28 951.000
3397ФГАУ УПРАВЛЕНИЕ ПО ОРГАНИЗАЦИИ И;36 650.000
ФГАУ УПРАВЛЕНИЕ ПО ОРГАНИЗАЦИИ ИПРОВЕДЕНИЮ СПОРТИВНЫХ МЕРОВПРИЯТИЙ;
3398ПРОВЕДЕНИЮ СПОРТИВНЫХ МЕРОВПРИЯТИЙ;57 151.010
ФГАУ УПРАВЛЕНИЕ ПО ОРГАНИЗАЦИИ И;
3399ПРОВЕДЕНИЮ СПОРТИВНЫХ МЕРОВПРИЯТИЙ;40 332.000
3400ФГБОУ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО;289 815.000
ОБРАЗ.РОССИЙСКИЙ УНИВ-ТДРУЖБЫ НАРОДОВ;
3401РЫБОЛОВСТВА И СВЯЗИФГБУ ЦЕНТР СИСТЕМЫ МОНИТОРИНГА;34 315.000

Думаю, как её победить...

Да, и по кнопке в файле нужно выбрать файл *csv для выгрузки на лист. А приведенный выше макрос именно такие файлы и обрабатывает.

Пока вариант с суммированием по дублям в списке такой:
Скрытый текст
Изменено: Anchoret - 22.02.2019 23:52:24
Страницы: 1
Наверх