Расширенная сортировка в Excel - PullRequest
2 голосов
/ 22 октября 2011

У меня быстрый вопрос.

У меня есть лист Excel ..., который содержит описания определенных элементов: Например:

1) Awesome mirror
2) Another Awesome mirror
3) beautiful table
4) Pretty beautiful lovely sofa
5) one more mirror

and so on...

Итак, скажем, я хочу разместить всезеркала вместе, все таблицы вместе ... и так далее ... так что в основном это то, что может вернуть мне все экземпляры, которые содержат слово "зеркало".

Есть какие-нибудь идеи о том, как решить эту проблему?

Ответы [ 4 ]

3 голосов
/ 22 октября 2011

Вы можете использовать формулу решения, как показано ниже:

=SUM(COUNTIF(A1,"*"&{"table","mirror","sofa"}&"*")*{1,100,1000})

даст
table оценку 1
mirror оценку 100
sofa aоценка 1000

, позволяющая легко выполнять числовую сортировку.

Если возможно, что ячейка может содержать как mirror, так и sofa, тогда она получит оценку 101. В этом случаеВы можете либо:

  • быть счастливым иметь отдельный список множественных совпадений
  • Я мог бы дополнительно адаптировать формулу, если вы можете указать, как вы хотите обрабатывать множественные совпадения.

enter image description here

2 голосов
/ 22 октября 2011

Другая возможность - ADO. Это вернет две строки, когда элемент встречается дважды. Также можно поиграть с другим столбцом в ToFind, который допускает Not Like: Like '%' & [ToFind] & '%' And Not Like '%' & [NotToFind] & '%'

Input

enter image description here

Результат

enter image description here

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

''This is not the best way to refer to the workbook
''you want, but it is very convenient for notes
''It is probably best to use the name of the workbook.

strFile = ActiveWorkbook.FullName

''Note that if HDR=No, F1,F2 etc are used for column names,
''if HDR=Yes, the names in the first row of the range
''can be used.
''
''This is the Jet 4 connection string, you can get more
''here : http://www.connectionstrings.com/excel

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

''[ToFind] is a named range, but it does not have to be.
strSQL = "SELECT DISTINCT [List], [ToFind] " _
       & "FROM [Sheet1$A:A] a, " _
       & "[ToFind] b " _
       & "WHERE List Like '%' & [ToFind] & '%'"

rs.Open strSQL, cn, 3, 3


''Pick a suitable empty worksheet for the results

Worksheets("Sheet2").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
0 голосов
/ 22 октября 2011

Если вы просто хотите отобразить все «Таблицы» в своем списке, почему бы не использовать тип конечного типа Автофильтр «Таблица» в поле поиска. Таким образом, будут отображаться только элементы со словом «Таблица» в строке. Все остальные ряды будут скрыты.

С уважением,

Роберт

0 голосов
/ 22 октября 2011

Вы можете создать новый столбец и использовать этот UDF:

Function WhatIsIt(LineItem As Range, AllThings As Range) As String
    Dim rv As String, c As Range
    Dim v As String, thing As String

    v = UCase(LineItem.Cells(1).Value)
    rv = ""

    If Len(v) > 0 Then
        For Each c In AllThings.Cells
            thing = c.Value
            If Len(thing) > 0 And InStr(v, UCase(thing)) > 0 Then
                rv = thing
                Exit For
            End If
        Next c
    End If
    WhatIsIt = rv
End Function

«AllThings» - это диапазон со списком того, что вы хотите найти.Удостоверьтесь, чтобы поместить более длинные сроки сначала:«диван-стол» должен стоять перед «диваном» или «столом».

Обратите внимание, что он может использовать некоторые улучшения: он также будет возвращать совпадения, когда термин является частью другого слова в описании элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...