Уважаемые, посоветуйте макрос, который бы удалял строку, если у неё начало текста строго в одной колонке E точно такое-же как у другой строки в количестве N символов. Надо удалять строка которая с меньшим числом символом
1 Текст1 Медицина в Германии во времена Третьего Рейха История европейской медицины. Какие эксперименты проводились в Нацистской ... 2 Текст2 Медицина в Германии во времена Третьего Рейха История европейской медицины. Какие эксперименты проводились в Нацистской Германии, как это отразилось на развитии медицины.
Уважаемые, посоветуйте макрос, который бы удалял строку, если у неё начало текста строго в одной колонке E точно такое-же как у другой строки в количестве N символов. Надо удалять строка которая с меньшим числом символом
1 Текст1 Медицина в Германии во времена Третьего Рейха История европейской медицины. Какие эксперименты проводились в Нацистской ... 2 Текст2 Медицина в Германии во времена Третьего Рейха История европейской медицины. Какие эксперименты проводились в Нацистской Германии, как это отразилось на развитии медицины.Jingo
Сообщение отредактировал Jingo - Пятница, 20.10.2017, 06:31
Sub DeleteDubls() Const intDataCol = 1 Const intMaxRow = 50 Dim i%, j% Dim strValue1$, strValue2$ For i = 2 To intMaxRow - 1 strValue1 = Trim(Cells(i, intDataCol)) For j = i + 1 To intMaxRow strValue2 = Trim(Cells(j, intDataCol)) [b] If Left(strValue1, 10) = Left(strValue2, 10) Then Cells(j, intDataCol).Delete shift:=xlUp[/b] End If Next Next End Sub
[/vba]
что тут поправить чтобы заработало?)
[vba]
Код
Sub DeleteDubls() Const intDataCol = 1 Const intMaxRow = 50 Dim i%, j% Dim strValue1$, strValue2$ For i = 2 To intMaxRow - 1 strValue1 = Trim(Cells(i, intDataCol)) For j = i + 1 To intMaxRow strValue2 = Trim(Cells(j, intDataCol)) [b] If Left(strValue1, 10) = Left(strValue2, 10) Then Cells(j, intDataCol).Delete shift:=xlUp[/b] End If Next Next End Sub
Jingo, Добрый день, оформите код в своём сообщении, в соответствии с правилами форума тегами (нажав "Правка", выделите код в сообщении и нажмите на панели вверху кнопку #) , да и файл пример не помешает с тем что есть и что хотите получить.
Jingo, Добрый день, оформите код в своём сообщении, в соответствии с правилами форума тегами (нажав "Правка", выделите код в сообщении и нажмите на панели вверху кнопку #) , да и файл пример не помешает с тем что есть и что хотите получить.Shurf
Сообщение отредактировал Shurf - Пятница, 20.10.2017, 06:54
Sub DeleteDubls() Const intDataCol = 1 Const intMaxRow = 50 Dim i%, j% Dim strValue1$, strValue2$ For i = intMaxRow To 2 Step -1 strValue1 = Trim(Cells(i, intDataCol)) For j = 2 To i - 1 strValue2 = Trim(Cells(j, intDataCol)) If Left(strValue1, 10) = Left(strValue2, 10) Then If Len(strValue1) > Len(strValue2) Then Cells(j, intDataCol).Delete shift:=xlUp Else Cells(i, intDataCol).Delete shift:=xlUp End If End If Next Next End Sub
[/vba]
Jingo, попробуйте так: [vba]
Код
Sub DeleteDubls() Const intDataCol = 1 Const intMaxRow = 50 Dim i%, j% Dim strValue1$, strValue2$ For i = intMaxRow To 2 Step -1 strValue1 = Trim(Cells(i, intDataCol)) For j = 2 To i - 1 strValue2 = Trim(Cells(j, intDataCol)) If Left(strValue1, 10) = Left(strValue2, 10) Then If Len(strValue1) > Len(strValue2) Then Cells(j, intDataCol).Delete shift:=xlUp Else Cells(i, intDataCol).Delete shift:=xlUp End If End If Next Next End Sub
Sub БезХвоста_InExSu() ActiveSheet.Copy With ActiveSheet arr = .[a1].CurrentRegion.Value Dim Z: Z = .[a1].CurrentRegion.Sort(.[a1], xlAscending, Header:=xlYes) For i = .[a1].CurrentRegion.Rows.Count To 2 Step -1 If InStr(.Cells(i, 1), .Cells(i - 1, 1)) > 0 Then _ .Rows(i - 1).Delete Next End With End Sub
[/vba]
Привет! Раз примера нет, намоделировал сам себе.
[vba]
Код
Option Explicit
Dim arr(), i
Sub БезХвоста_InExSu() ActiveSheet.Copy With ActiveSheet arr = .[a1].CurrentRegion.Value Dim Z: Z = .[a1].CurrentRegion.Sort(.[a1], xlAscending, Header:=xlYes) For i = .[a1].CurrentRegion.Rows.Count To 2 Step -1 If InStr(.Cells(i, 1), .Cells(i - 1, 1)) > 0 Then _ .Rows(i - 1).Delete Next End With End Sub