Преобразование столбца словосочетаний.
Данил777
Дата: Четверг, 08.02.2018, 02:55 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Здравствуйте! Есть столбец словосочетаний и не только. Который нужно преобразовать в столбец с отсортированными словами из которых удалены дубли. Символ разделения является пробел. Есть ли возможность сделать такое автоматически? Если да то прошу помочь. В программе я не разбираюсь поэтому не судите строго.
Здравствуйте! Есть столбец словосочетаний и не только. Который нужно преобразовать в столбец с отсортированными словами из которых удалены дубли. Символ разделения является пробел. Есть ли возможность сделать такое автоматически? Если да то прошу помочь. В программе я не разбираюсь поэтому не судите строго. Данил777
Ответить
Сообщение Здравствуйте! Есть столбец словосочетаний и не только. Который нужно преобразовать в столбец с отсортированными словами из которых удалены дубли. Символ разделения является пробел. Есть ли возможность сделать такое автоматически? Если да то прошу помочь. В программе я не разбираюсь поэтому не судите строго. Автор - Данил777 Дата добавления - 08.02.2018 в 02:55
Pelena
Дата: Четверг, 08.02.2018, 10:38 |
Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19184
Репутация:
4420
±
Замечаний:
±
Excel 365 & Mac Excel
Здравствуйте. Мало, что понятно из примера. Вручную покажите в файле желаемый результат
Здравствуйте. Мало, что понятно из примера. Вручную покажите в файле желаемый результат Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Здравствуйте. Мало, что понятно из примера. Вручную покажите в файле желаемый результат Автор - Pelena Дата добавления - 08.02.2018 в 10:38
Данил777
Дата: Четверг, 08.02.2018, 12:21 |
Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Pelena, Здравствуйте! В файле примере в столбце А - исходные данные, а в столбце В - результат. А вручную я сначала этот столбец А выделяю и разделяю функцией "текст по столбцам" разделителем использую пробел. Затем все отдельные слова что получились я копирую в один столбец. Далее его выделяю и сортирую используя функцию "сортировка от А до Я" и затем удаляю дубли. И это у меня получается столбец В. то что мне и нужно.
Pelena, Здравствуйте! В файле примере в столбце А - исходные данные, а в столбце В - результат. А вручную я сначала этот столбец А выделяю и разделяю функцией "текст по столбцам" разделителем использую пробел. Затем все отдельные слова что получились я копирую в один столбец. Далее его выделяю и сортирую используя функцию "сортировка от А до Я" и затем удаляю дубли. И это у меня получается столбец В. то что мне и нужно. Данил777
Ответить
Сообщение Pelena, Здравствуйте! В файле примере в столбце А - исходные данные, а в столбце В - результат. А вручную я сначала этот столбец А выделяю и разделяю функцией "текст по столбцам" разделителем использую пробел. Затем все отдельные слова что получились я копирую в один столбец. Далее его выделяю и сортирую используя функцию "сортировка от А до Я" и затем удаляю дубли. И это у меня получается столбец В. то что мне и нужно. Автор - Данил777 Дата добавления - 08.02.2018 в 12:21
abtextime
Дата: Четверг, 08.02.2018, 15:36 |
Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация:
117
±
Замечаний:
0% ±
Excel 2010
Посмотрите (блоком сортировке в массиве не заморочился, просто дернул код из макрорекордера Перед запуском макроса выделите ячейки в первом столбце (работает по диапазону Selection) Результат работы пишет во второй столбец [vba]Код
Public Sub Разбор() Dim W() As String Dim A(0 To 1000) As String Counter = 0 For i = 1 To Selection.Rows.Count W = Split(Selection.Cells(i, 1).Value) For j = 0 To UBound(W) For k = 1 To Counter If W(j) = A(k) Then Exit For Next k If k = Counter + 1 Then A(Counter) = W(j) If k = Counter + 1 Then Counter = k Next j Next i For i = 0 To Counter Selection.Cells(i + 1, 2).Value = A(i) Selection.Cells(i + 1, 2).NumberFormat = "@" Next i Columns("B:B").Select ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("B1:B10000") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист1").Sort .SetRange Range("B1:B10000") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
Посмотрите (блоком сортировке в массиве не заморочился, просто дернул код из макрорекордера Перед запуском макроса выделите ячейки в первом столбце (работает по диапазону Selection) Результат работы пишет во второй столбец [vba]Код
Public Sub Разбор() Dim W() As String Dim A(0 To 1000) As String Counter = 0 For i = 1 To Selection.Rows.Count W = Split(Selection.Cells(i, 1).Value) For j = 0 To UBound(W) For k = 1 To Counter If W(j) = A(k) Then Exit For Next k If k = Counter + 1 Then A(Counter) = W(j) If k = Counter + 1 Then Counter = k Next j Next i For i = 0 To Counter Selection.Cells(i + 1, 2).Value = A(i) Selection.Cells(i + 1, 2).NumberFormat = "@" Next i Columns("B:B").Select ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("B1:B10000") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист1").Sort .SetRange Range("B1:B10000") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
[/vba] abtextime
Сообщение отредактировал abtextime - Четверг, 08.02.2018, 15:39
Ответить
Сообщение Посмотрите (блоком сортировке в массиве не заморочился, просто дернул код из макрорекордера Перед запуском макроса выделите ячейки в первом столбце (работает по диапазону Selection) Результат работы пишет во второй столбец [vba]Код
Public Sub Разбор() Dim W() As String Dim A(0 To 1000) As String Counter = 0 For i = 1 To Selection.Rows.Count W = Split(Selection.Cells(i, 1).Value) For j = 0 To UBound(W) For k = 1 To Counter If W(j) = A(k) Then Exit For Next k If k = Counter + 1 Then A(Counter) = W(j) If k = Counter + 1 Then Counter = k Next j Next i For i = 0 To Counter Selection.Cells(i + 1, 2).Value = A(i) Selection.Cells(i + 1, 2).NumberFormat = "@" Next i Columns("B:B").Select ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("B1:B10000") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист1").Sort .SetRange Range("B1:B10000") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
[/vba] Автор - abtextime Дата добавления - 08.02.2018 в 15:36
Данил777
Дата: Четверг, 08.02.2018, 16:24 |
Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
abtextime, Круто! Спасибо большое!
abtextime, Круто! Спасибо большое! Данил777
Ответить
Сообщение abtextime, Круто! Спасибо большое! Автор - Данил777 Дата добавления - 08.02.2018 в 16:24
abtextime
Дата: Четверг, 08.02.2018, 16:37 |
Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация:
117
±
Замечаний:
0% ±
Excel 2010
ОК, только лучше последний фрагмент кода заменить на нормальную сортировку в массиве A (их немало можно найти) и вставить перед [vba]Код
For i = 0 To Counter Selection.Cells(i + 1, 2).Value = A(i) Selection.Cells(i + 1, 2).NumberFormat = "@" Next i
[/vba] Так универсальнее будет, а то макрос сильно привязан к конкретному листу и ко второму столбцу
ОК, только лучше последний фрагмент кода заменить на нормальную сортировку в массиве A (их немало можно найти) и вставить перед [vba]Код
For i = 0 To Counter Selection.Cells(i + 1, 2).Value = A(i) Selection.Cells(i + 1, 2).NumberFormat = "@" Next i
[/vba] Так универсальнее будет, а то макрос сильно привязан к конкретному листу и ко второму столбцу abtextime
Ответить
Сообщение ОК, только лучше последний фрагмент кода заменить на нормальную сортировку в массиве A (их немало можно найти) и вставить перед [vba]Код
For i = 0 To Counter Selection.Cells(i + 1, 2).Value = A(i) Selection.Cells(i + 1, 2).NumberFormat = "@" Next i
[/vba] Так универсальнее будет, а то макрос сильно привязан к конкретному листу и ко второму столбцу Автор - abtextime Дата добавления - 08.02.2018 в 16:37
abtextime
Дата: Четверг, 08.02.2018, 16:42 |
Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация:
117
±
Замечаний:
0% ±
Excel 2010
И, да макрос чувствителен к регистру, так что он ДОМ, Дом и дом посчитает за разные слова Чтобы этого избежать, можно [vba]Код
W = Split(Selection.Cells(i, 1).Value)
[/vba] заменить на [vba]Код
W = Split(LCase(Selection.Cells(i, 1).Value))
[/vba]
И, да макрос чувствителен к регистру, так что он ДОМ, Дом и дом посчитает за разные слова Чтобы этого избежать, можно [vba]Код
W = Split(Selection.Cells(i, 1).Value)
[/vba] заменить на [vba]Код
W = Split(LCase(Selection.Cells(i, 1).Value))
[/vba] abtextime
Сообщение отредактировал abtextime - Четверг, 08.02.2018, 16:48
Ответить
Сообщение И, да макрос чувствителен к регистру, так что он ДОМ, Дом и дом посчитает за разные слова Чтобы этого избежать, можно [vba]Код
W = Split(Selection.Cells(i, 1).Value)
[/vba] заменить на [vba]Код
W = Split(LCase(Selection.Cells(i, 1).Value))
[/vba] Автор - abtextime Дата добавления - 08.02.2018 в 16:42
Данил777
Дата: Пятница, 09.02.2018, 16:53 |
Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
abtextime, Хорошо заменю спасибо!
abtextime, Хорошо заменю спасибо! Данил777
Ответить
Сообщение abtextime, Хорошо заменю спасибо! Автор - Данил777 Дата добавления - 09.02.2018 в 16:53