Здравствуйте. Есть необходимость в чистке файла эксель от повторяющихся значений. К примеру есть таблица с большим количеством данных типа (Значение1;15 | Значение2;14 | Значение3;12). Можно ли сделать так чтобы в ячейках удалялось (Значение1; Значение2; Значение3) и далее по списку, а оставались только 15, 14, 12?
Наиболее близкое решение что я нашел, это тема - http://www.excelworld.ru/forum/10-36631-1 но там удаляется полностью вся ячейка, а мне нужно чтобы ячейка оставалась и удалялось только ненужная информация из ячейки.
Здравствуйте. Есть необходимость в чистке файла эксель от повторяющихся значений. К примеру есть таблица с большим количеством данных типа (Значение1;15 | Значение2;14 | Значение3;12). Можно ли сделать так чтобы в ячейках удалялось (Значение1; Значение2; Значение3) и далее по списку, а оставались только 15, 14, 12?
Наиболее близкое решение что я нашел, это тема - http://www.excelworld.ru/forum/10-36631-1 но там удаляется полностью вся ячейка, а мне нужно чтобы ячейка оставалась и удалялось только ненужная информация из ячейки.moebus
Сообщение отредактировал moebus - Вторник, 03.11.2020, 05:38
это всё в одной ячейке? Можно попробовать через Найти/Заменить: Найти_|*; (пробел - верт.черта - звёздочка - точка с запятой)-- Заменить на,_ (запятая - пробел) -- Заменить все, и потом ещё Найти (*; -- Заменить на ( Если не угадала, прикладывайте файл с примером
это всё в одной ячейке? Можно попробовать через Найти/Заменить: Найти_|*; (пробел - верт.черта - звёздочка - точка с запятой)-- Заменить на,_ (запятая - пробел) -- Заменить все, и потом ещё Найти (*; -- Заменить на ( Если не угадала, прикладывайте файл с примеромPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Function iReplace(cell$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "Значение\d+;" iReplace = Replace(.Replace(cell, ""), "|", ",") End With End Function
[/vba]
Цитата
оставались только 15, 14, 12
UDF [vba]
Код
Function iReplace(cell$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "Значение\d+;" iReplace = Replace(.Replace(cell, ""), "|", ",") End With End Function
Можно попробовать через Найти/Заменить: Найти _|*; (пробел - верт.черта - звёздочка - точка с запятой)-- Заменить на ,_ (запятая - пробел) -- Заменить все, и потом ещё Найти (*; -- Заменить на (
Не понял до конца зачем пробелы и звездочки... Понял что в поиске/замене есть возможность указать не одно значение а несколько, я прав? если да то пожалуй можно как-то выкрутится. Файл для примера https://yadi.sk/i/ohZNyyJrhxAhnw Там далее, если потянуть вправо есть характеристики, из них нужно поудалять всякие (EV000154;EV007990;EV008336;EV006404;EV006531;EV003188) а сами значения оставить.
Можно попробовать через Найти/Заменить: Найти _|*; (пробел - верт.черта - звёздочка - точка с запятой)-- Заменить на ,_ (запятая - пробел) -- Заменить все, и потом ещё Найти (*; -- Заменить на (
Не понял до конца зачем пробелы и звездочки... Понял что в поиске/замене есть возможность указать не одно значение а несколько, я прав? если да то пожалуй можно как-то выкрутится. Файл для примера https://yadi.sk/i/ohZNyyJrhxAhnw Там далее, если потянуть вправо есть характеристики, из них нужно поудалять всякие (EV000154;EV007990;EV008336;EV006404;EV006531;EV003188) а сами значения оставить.moebus
UDF Function iReplace(cell$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "Значение\d+;" iReplace = Replace(.Replace(cell, ""), "|", ",") End With End Function
За решение спасибо, буду пытаться постичь как это реализовать))
UDF Function iReplace(cell$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "Значение\d+;" iReplace = Replace(.Replace(cell, ""), "|", ",") End With End Function
За решение спасибо, буду пытаться постичь как это реализовать))moebus
Если то, что нужно удалить, отделяется точкой с запятой, то можно так:
[vba]
Код
Private Sub trash_del() 'удаляем все до первой точки с запятой в выделенном фрагменте Dim c As Range For Each c In Selection.Cells If InStr(1, c.Value, ";") > 0 Then c.Value = Right(c.Value, Len(c.Value) - InStr(1, c.Value, ";")) End If Next End Sub
[/vba]
Если то, что нужно удалить, отделяется точкой с запятой, то можно так:
[vba]
Код
Private Sub trash_del() 'удаляем все до первой точки с запятой в выделенном фрагменте Dim c As Range For Each c In Selection.Cells If InStr(1, c.Value, ";") > 0 Then c.Value = Right(c.Value, Len(c.Value) - InStr(1, c.Value, ";")) End If Next End Sub