Добрый день. Подскажите пожалуйста. В столбце А есть данные (4 типа - А2 основной и А3, А4, А5 - вспомогательные), которые необходимо сделать одной строкой (А2 оставляем, а А3 в В2, А4 в С2, А5 в D2). Данные которые уже присутствуют в ячейках В2, С2 и D2 (цифры) должны сохраниться и сместиться в последующие ячейки по строке. После этих манипуляций, строки с ячейками А3, А4, А5 нужно удалить, так как информация в числах в них дублируется.
Добрый день. Подскажите пожалуйста. В столбце А есть данные (4 типа - А2 основной и А3, А4, А5 - вспомогательные), которые необходимо сделать одной строкой (А2 оставляем, а А3 в В2, А4 в С2, А5 в D2). Данные которые уже присутствуют в ячейках В2, С2 и D2 (цифры) должны сохраниться и сместиться в последующие ячейки по строке. После этих манипуляций, строки с ячейками А3, А4, А5 нужно удалить, так как информация в числах в них дублируется.
ramzai, Здравствуйте. Как вариант если я правильно понял вопрос [vba]
Код
Option Explicit
Sub ManipulateWithData() Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets(2) Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Dim i As Long Dim rng As Range Application.ScreenUpdating = False Application.DisplayAlerts = False
If rng.Cells(i, 1).Value Like "*ООО" Then rng.Cells(i, 1).Offset(1, 0).Copy rng.Cells(i, 2) rng.Cells(i, 1).Offset(2, 0).Copy rng.Cells(i, 3) rng.Cells(i, 1).Offset(3, 0).Copy rng.Cells(i, 4)
rng.Cells(i, 1).Offset(3, 0).EntireRow.Delete rng.Cells(i, 1).Offset(2, 0).EntireRow.Delete rng.Cells(i, 1).Offset(1, 0).EntireRow.Delete End If
Next i
.Cells.Columns.AutoFit End With
Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
[/vba] Будет Правильно работать код если в значениях ячеек колонки A будет всегда оканчания на ООО. Удачи.
ramzai, Здравствуйте. Как вариант если я правильно понял вопрос [vba]
Код
Option Explicit
Sub ManipulateWithData() Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets(2) Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Dim i As Long Dim rng As Range Application.ScreenUpdating = False Application.DisplayAlerts = False
cmivadwot, Здравствуйте. А вы вообще вопрос темы прочли до конца? Смотрите ещё раз в файле примере как хочет ТС получить рузультат. Не спроста так ТС показал желаемый результат на Листе должно быть!
cmivadwot, Здравствуйте. А вы вообще вопрос темы прочли до конца? Смотрите ещё раз в файле примере как хочет ТС получить рузультат. Не спроста так ТС показал желаемый результат на Листе должно быть!MikeVol
Подскажите пожалуйста, а если в данных у меня присутствует не только "ООО", но и "ИП", как тогда быть? Это из письма полученое от ramzai [vba]
Код
Option Explicit
Sub ManipulateData() Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets(2) Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Dim lastCol As Long: lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column Dim rng As Range: Set rng = ws.Range("A2:A" & lastRow) Dim i As Long Application.ScreenUpdating = False Application.DisplayAlerts = False
If rng.Cells(i, 1).Value Like "*ООО" _ Or rng.Cells(i, 1).Value Like "*ИП" Then rng.Cells(i, 1).Offset(1, 0).Copy rng.Cells(i, 2) rng.Cells(i, 1).Offset(2, 0).Copy rng.Cells(i, 3) rng.Cells(i, 1).Offset(3, 0).Copy rng.Cells(i, 4)
rng.Cells(i, 1).Offset(3, 0).EntireRow.Delete rng.Cells(i, 1).Offset(2, 0).EntireRow.Delete rng.Cells(i, 1).Offset(1, 0).EntireRow.Delete End If
Next i
.Cells.Columns.AutoFit End With
Else MsgBox "Данные на листе уже реорганизованы! ", vbCritical Exit Sub End If
Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
[/vba] Удачи.
Подскажите пожалуйста, а если в данных у меня присутствует не только "ООО", но и "ИП", как тогда быть? Это из письма полученое от ramzai [vba]
Код
Option Explicit
Sub ManipulateData() Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets(2) Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Dim lastCol As Long: lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column Dim rng As Range: Set rng = ws.Range("A2:A" & lastRow) Dim i As Long Application.ScreenUpdating = False Application.DisplayAlerts = False
let from = Excel.CurrentWorkbook(){[Name="TDSheet"]}[Content], nms={"Организация","ФИО","БИН","Договор"}&List.Skip(Table.ColumnNames(from)), lst=List.Zip({List.Split(from[Организация],4),List.Alternate(Table.ToList(from,List.Skip),3,1,1)}), to = Table.FromList(lst,List.Combine,nms) in to
let from = Excel.CurrentWorkbook(){[Name="TDSheet"]}[Content], nms={"Организация","ФИО","БИН","Договор"}&List.Skip(Table.ColumnNames(from)), lst=List.Zip({List.Split(from[Организация],4),List.Alternate(Table.ToList(from,List.Skip),3,1,1)}), to = Table.FromList(lst,List.Combine,nms) in to
cmivadwot, Вы меня Всё Больше Удевляете и Поражаете! А Постом выше вашего что у меня там написано? Не знаете что ответить Лучше Пройдите мимо! Опять напишите
cmivadwot, Вы меня Всё Больше Удевляете и Поражаете! А Постом выше вашего что у меня там написано? Не знаете что ответить Лучше Пройдите мимо! Опять напишите
Всем спасибо большое, буду пробовать и учиться. Как оказалось, программу Excel я вообще не знал. Это бескрайняя вселенная... Буду опробовать все приведенные результаты, потом обязательно отпишусь.
Всем спасибо большое, буду пробовать и учиться. Как оказалось, программу Excel я вообще не знал. Это бескрайняя вселенная... Буду опробовать все приведенные результаты, потом обязательно отпишусь.ramzai
Сегодня доковырял еще для одного способа, для чайников, выношу его на обсуждение и замечания по нему. Если вариант рабочий, а вроде как рабочий, то возможно он поможет таким же чайникам как и я).
Возможно в вышеуказанных сообщениях заложен алгоритм который я применил, но с формулами у меня не получилось (почему то выдавало ошибку), а по скрипту, предложенному MikeVol все получилось, но там должны быть определенные вводные и точная последовательность, чтобы скрипт правильно сработал - нужно внимательно проверять массив данных на соответствие скрипту и тогда все ОК.
В общем еще один вариант решения моей проблемы.
Сейчас попробую на пальцах объяснить на основе моей таблицы: 1. В таблицу между столбцами "РЕАЛИЗАЦИЯ" и "КОЛИЧЕСТВО РЕАЛИЗАЦИИ" добавляю три новых столбца (как помним, задача стояла в том, чтобы из первого столбца перенести в строку данные (ФИО МЕНЕДЖЕРА, БИН, ДОГОВОР). 2. Далее в новые столбцы в первую строку прописываю ссылки на ячейки с данными из первого столбца. В столбец ФИО МЕНЕДЖЕРА (В2, у кого стиль ссылок R1C1, там чуть по другому) вставляю = и указываю на первый столбец где написано фио менеджера. В столбец БИН (С2) знак = и данные из первого столбца где прописан БИН. В столбец "ДОГОВОР" (D2) данные из первого столбца где указаны данные договора. Это все прописывается в одну строчку, где в первом столбце название фирмы (в моем случае - Bauter ООО). 3. полученные данные из трех столбцов протягиваю вниз на остальные ячейки. Все ячейки трех столбцов заполнились данными. 4. теперь все три ячейки с полученными данными выделяю, копирую и вставляю обратно как значения (вставить как и выбрать значок вставки с цифрами 1,2,3) 5. Ставлю на всю таблицу фильтр и делаю сортировку от А до Я по столбцу БИН. 6. По столбцу БИН удаляю все строки с отличными от БИН данными и вуаля, таблица в нужном нам виде готова!
Сегодня доковырял еще для одного способа, для чайников, выношу его на обсуждение и замечания по нему. Если вариант рабочий, а вроде как рабочий, то возможно он поможет таким же чайникам как и я).
Возможно в вышеуказанных сообщениях заложен алгоритм который я применил, но с формулами у меня не получилось (почему то выдавало ошибку), а по скрипту, предложенному MikeVol все получилось, но там должны быть определенные вводные и точная последовательность, чтобы скрипт правильно сработал - нужно внимательно проверять массив данных на соответствие скрипту и тогда все ОК.
В общем еще один вариант решения моей проблемы.
Сейчас попробую на пальцах объяснить на основе моей таблицы: 1. В таблицу между столбцами "РЕАЛИЗАЦИЯ" и "КОЛИЧЕСТВО РЕАЛИЗАЦИИ" добавляю три новых столбца (как помним, задача стояла в том, чтобы из первого столбца перенести в строку данные (ФИО МЕНЕДЖЕРА, БИН, ДОГОВОР). 2. Далее в новые столбцы в первую строку прописываю ссылки на ячейки с данными из первого столбца. В столбец ФИО МЕНЕДЖЕРА (В2, у кого стиль ссылок R1C1, там чуть по другому) вставляю = и указываю на первый столбец где написано фио менеджера. В столбец БИН (С2) знак = и данные из первого столбца где прописан БИН. В столбец "ДОГОВОР" (D2) данные из первого столбца где указаны данные договора. Это все прописывается в одну строчку, где в первом столбце название фирмы (в моем случае - Bauter ООО). 3. полученные данные из трех столбцов протягиваю вниз на остальные ячейки. Все ячейки трех столбцов заполнились данными. 4. теперь все три ячейки с полученными данными выделяю, копирую и вставляю обратно как значения (вставить как и выбрать значок вставки с цифрами 1,2,3) 5. Ставлю на всю таблицу фильтр и делаю сортировку от А до Я по столбцу БИН. 6. По столбцу БИН удаляю все строки с отличными от БИН данными и вуаля, таблица в нужном нам виде готова!
ramzai, Здравствуйте. прохожий2019 в своём посте #12 написал код для Power Query с помощью которого сразу из другого файла можете вытянуть информацию реарганизованную сразу как вам надо. Необходимо будет лишь чуток разобраться и понять код. Это решение будет самое оптимальное для вас так как через Power Query создаётся запрос с выводом нужного вам результата. В вашем файле примере и так есть 3 запроса, нужно их убить и создать один запрос и будет вам счастье! Удачи.
ramzai, Здравствуйте. прохожий2019 в своём посте #12 написал код для Power Query с помощью которого сразу из другого файла можете вытянуть информацию реарганизованную сразу как вам надо. Необходимо будет лишь чуток разобраться и понять код. Это решение будет самое оптимальное для вас так как через Power Query создаётся запрос с выводом нужного вам результата. В вашем файле примере и так есть 3 запроса, нужно их убить и создать один запрос и будет вам счастье! Удачи.MikeVol