I am quite new in working with SQL in VBA and can’t seem to get my query working. I searched around in the forums and tried many different solutions but to no avail.
Here is my code:
Sub RequeteClasseurFerme_Excel2007()
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
Dim CoPo As String
'Définit le classeur fermé servant de base de données
Fichier = ThisWorkbook.Worksheets("Menu").Range("B7").Value
'Nom de la feuille dans le classeur fermé
NomFeuille = "Data"
CoPo = ActiveWorkbook.Worksheets("Menu").Range("B3").Value
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
'-----------------
'Request
request_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE [" & NomFeuille & "$].[CodePostal] LIKE '" & CoPo & "%'"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(request_SQL)
Worksheets("Data2").Range("A1").CopyFromRecordset Rst
'
'... la requête ...
'
'rst.Find
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
I am pretty sure it’s the like since when I remove it, it does return me all the results.
Stavros Jon
1,6852 gold badges6 silver badges17 bronze badges
asked Aug 16, 2018 at 12:47
4
You should always use parameters:
Sub RequeteClasseurFerme_Excel2007()
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim cmd As ADODB.Command
Dim Rst As ADODB.Recordset
Dim CoPo As String
'Définit le classeur fermé servant de base de données
Fichier = ThisWorkbook.Worksheets("Menu").Range("B7").Value
'Nom de la feuille dans le classeur fermé
NomFeuille = "Data"
CoPo = ActiveWorkbook.Worksheets("Menu").Range("B3").Value
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'-----------------
'Request
request_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE [" & NomFeuille & "$].[CodePostal] LIKE ?"
Set cmd = New ADODB.Command
cmd.ActiveConnection = Cn
cmd.CommandText = request_SQL
cmd.Parameters.Append cmd.CreateParameter("@postalCode", adVarChar, adParamInput, 50)
cmd.Parameters("@postalCode").Value = CoPo + "%"
Set Rst = cmd.Execute
Worksheets("Data2").Range("A1").CopyFromRecordset Rst
'
'... la requête ...
'
'rst.Find
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub
answered Aug 16, 2018 at 13:18
Cetin BasozCetin Basoz
21.6k3 gold badges29 silver badges38 bronze badges
When you specify HDR=NO;
in your connection string, you tell the driver that the Excel sheet contains no Header row. In that case, you cannot access columns by their name (simply because they have no name). In that case, the RecordSet contains pseudo fieldnames like F1, F2...
,and you can even use these in a query, eg where [F1] = 'A'"
. But of course a column like CodePostal
is not known and accessing it will throw the error you mentioned in the comments.
I assume, however, that your data has a header row, and in that case, simple change the parameter to HDR=YES;
answered Aug 16, 2018 at 13:18
FunThomasFunThomas
20.1k2 gold badges18 silver badges34 bronze badges
Содержание
- LIKE Operator
- Character Wildcards
- Examples
- Like operator (Microsoft Access SQL)
- Syntax
- Remarks
- Example
- See also
- Support and feedback
- Оператор Like (Microsoft Access SQL)
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
- Оператор Like
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
LIKE Operator
The LIKE operator uses wildcard characters to match patterns in the data.
If the column specified contains a NULL, then the result is undefined
Character Wildcards
Character | Access | SQL Server |
? | single character | |
* | zero or more characters | |
_ | single character | |
% | zero or more characters | |
# | single digit [0-9] | |
[ characters ] | single character in a group of characters | |
[ ! characters ] | single character not in a group of characters |
[A-Z]#[A-C]
Example — doc_title LIKE (‘&EAFE%’)
If you want to include the underscore character as a character to include in your filter you must use the Escape clause. LIKE «%^_%’ ESCAPE ‘^’» is equivalent to LIKE «%_%»
Search conditions can contain either numbers or literal characters. The «%»and «_» can be used in any combination with literal characters. If you need to match the actual characters «%» or «_» then use the Escape option and prefix them with a backslash ()
Literal characters or strings are in single quotation marks
This works in SQL Server but not in Access since the % is interpreted differently
This works in SQL Server but not in Access
—% in SQL Server means any string of zero or more characters
—% in Access is meant to mean zero or more characters, but doesn’t work
This works in Access but not in SQL Server
This works in Access but not in SQL Server
This works in SQL Server but not in Access since the % is interpreted differently
Examples
—This works in SQL Server but not in Access since the % is interpreted differently
—% in SQL Server means any string of zero or more characters
—% in Access is meant to mean zero or more characters, but doesn’t work
=—this works in SQL Server but not in Access
=—_ in SQL Server means any single character
—_ in Access is meant to mean a single character, but doesn’t work
=—this works in Access but not in SQL Server
—* in SQL Server does not mean anything
—* in Access means zero or more characters
=—this works in Access but not in SQL Server
—# in Access means a single digit character 0-9
—# in SQL Server does not mean anything — you can use % and [0-9] to represent the same thing
=—this works in Access but not in SQL Server
—? in SQL Server does not mean anything
—This works in SQL Server but not in Access since the % is interpreted differently
—% in SQL Server means any string of zero or more characters
—% in Access is meant to mean zero or more characters, but doesn’t work
Источник
Like operator (Microsoft Access SQL)
Applies to: Access 2013 | Access 2016
Compares a string expression to a pattern in an SQL expression.
Syntax
expression Like «pattern«
The Like operator syntax has these parts:
Part | Description |
---|---|
expression | SQL expression used in a WHERE clause. |
pattern | String or character string literal against which expression is compared. |
Use the Like operator to find values in a field that match the pattern you specify. For pattern, you can specify the complete value (for example, Like «Smith» ), or you can use wildcard characters to find a range of values (for example, ), or you can use wildcard characters to find a range of values (for example, Like «Sm*») .
In an expression, you can use the Like operator to compare a field value to a string expression. For example, if you enter Like «C*» in an SQL query, the query returns all field values beginning with the letter C. In a parameter query, you can prompt the user for a pattern to search for.
The following example returns data that begins with the letter P followed by any letter between A and F and three digits:
The following table shows how you can use Like to test expressions for different patterns.
Kind of match | Pattern | Match (returns True) | No match (returns False) |
---|---|---|---|
Multiple characters | a*a | aa, aBa, aBBBa | aBC |
ab | abc, AABB, Xab | aZb, bac | |
Special character | a[*]a | a*a | aaa |
Multiple characters | ab* | abcdefg, abc | cab, aab |
Single character | a?a | aaa, a3a, aBa | aBBBa |
Single digit | a#a | a0a, a1a, a2a | aaa, a10a |
Range of characters | [a-z] | f, p, j | 2, & |
Outside a range | [!a-z] | 9, &, % | b, a |
Not a digit | [!0-9] | A, a, &, | 0, 1, 9 |
Combined | a[!b-m]# | An9, az0, a99 | abc, aj0 |
Example
This example returns a list of employees whose names begin with the letters A through D. It calls the EnumFields procedure, which you can find in the SELECT statement example.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Оператор Like (Microsoft Access SQL)
Область применения: Access 2013 | Access 2016
Сравнивает строковое выражение с шаблоном в выражении SQL.
Синтаксис
выражение, как «pattern«
Синтаксис оператора Like состоит из следующих частей:
Part | Описание |
---|---|
выражение | Выражение SQL, используемое в предложении WHERE. |
pattern | Строковый или символьный строковый литерал, с которым сравнивается выражение . |
Замечания
Используйте оператор Like , чтобы найти значения в поле, соответствующее указанному шаблону. Для шаблона можно указать полное значение (например, Like «Smith» ), или использовать подстановочные знаки для поиска диапазона значений (например, ), или использовать подстановочные знаки для поиска диапазона значений (например, Like «Sm*») .
В выражении можно использовать оператор Like для сравнения значения поля со строковым выражением. Например, если ввести Like «C*» в SQL-запросе, запрос вернет все значения полей, начинающиеся с буквы C. В запросе параметров можно запросить у пользователя шаблон для поиска.
В следующем примере возвращаются данные, начинающиеся с буквы P, за которой следует любая буква между A и F и три цифры:
В следующей таблице показано, как использовать like для тестирования выражений для различных шаблонов.
Тип соответствия | Pattern | Match (возвращает значение True) | Нет совпадения (возвращает значение False) |
---|---|---|---|
Несколько символов | a*a | aa, aBa, aBBBa | Abc |
Ab | abc, AABB, Xab | aZb, bac | |
Специальный символ | a[*]a | a*a | Ааа |
Несколько символов | Ab* | abcdefg, abc | cab, aab |
Один символ | a?a | aaa, a3a, aBa | aBBBa |
Однозначная цифра | a#a | a0a, a1a, a2a | aaa, a10a |
Диапазон символов | [a-z] | f, p, j | 2, & |
За пределами диапазона | [!a-z] | 9, &% | b, a |
Не цифра | [!0-9] | A, a, &, | 0, 1, 9 |
Комбинированный | a[!b-m] # | An9, az0, a99 | abc, aj0 |
Пример
В этом примере возвращается список сотрудников, имена которых начинаются с букв от A до D. Он вызывает процедуру EnumFields, которую можно найти в примере инструкции SELECT.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Оператор Like
Используется для сравнения двух строк.
Синтаксис
Результат = Шаблон stringLike
Синтаксис оператора Like состоит из следующих частей:
Part | Описание |
---|---|
result | Обязательный элемент; любая числовая переменная. |
строка | Обязательный элемент; любое строковое выражение. |
pattern | Обязательный элемент; любое строковое выражение, соответствующее соглашениям о сопоставлении шаблонов, описанным в разделе «Замечания». |
Замечания
Если аргумент string соответствует аргументу pattern, значением result будет являться True; если не соответствует — значением result будет являться False. Если string либо pattern имеет значение Null, result также будет иметь значение Null.
Поведение оператора Like зависит от оператора Option Compare. Методом по умолчанию для сравнения строк для каждого модуля является Option Compare Binary.
Метод Option Compare Binary выдает результат сравнения строк на основе порядка сортировки, выводимого из внутреннего двоичного представления знаков. Порядок сортировки определяется кодовой страницей.
В следующем примере показан типичный бинарный порядок сортировки:
Метод Option Compare Text выдает результат сравнения строк на основе порядка сортировки текста без учета регистра букв, определяемого языковым стандартом системы. Сортировка тех же знаков с использованием метода Option Compare Text дает следующий порядок сортировки:
Встроенное сопоставление шаблона предоставляет универсальное средство для сравнения строк. Возможности сопоставления шаблона позволяют использовать подстановочные знаки, списки знаков или диапазоны знаков в любой комбинации, чтобы сопоставить строки. В следующей таблице представлены знаки, разрешенные для использования в аргументе pattern, и объясняется, чему они соответствуют:
Знаки в pattern | Сопоставление в string |
---|---|
? | Любой отдельный знак. |
* | Ноль или больше знаков. |
# | Любая однозначная цифра (0–9). |
[ charlist ] | Любой отдельный знак, представленный в charlist. |
[ !charlist ] | Любой отдельный знак, не представленный в charlist. |
Группа из одного или нескольких символов ( charlist ), заключенная в квадратные скобки ([ ]), может использоваться для сопоставления с любым одним символом в строке и может включать практически любой код символов, включая цифры.
Чтобы получить сопоставление для специальных знаков, а именно для левой квадратной скобки ([), вопросительного знака (?), знака номера (#) и звездочки (*), заключите их в квадратные скобки. Знак правой квадратной скобки (]) не может использоваться в рамках группы для сопоставления самому себе, однако может использоваться за пределами группы как отдельный знак.
С помощью дефиса (—), разделяющего нижнюю и верхнюю границы диапазона, charlist может использоваться для определения диапазона знаков. Например, приводит к совпадению, [A-Z] если соответствующая позиция символов в строке содержит прописные буквы в диапазоне от A до Z. Несколько диапазонов могут включаться в квадратные скобки без использования каких-либо разделителей.
Значение указанного диапазона зависит от порядка расположения знаков, допустимого во время выполнения (определяется оператором Option Compare и языковыми настройками системы, в которой выполняется код). В примере Option Compare Binary диапазон [A-E] соответствует A, B и E. С параметром Сравнение текста соответствует [A-E] A, a, À, à, B, B, E, e. Данный диапазон не определяет сопоставление для Ê или ê, поскольку символы с надстрочными знаками располагаются по порядку сортировки после символов без надстрочных знаков.
Также имеются другие важные правила для сопоставления шаблона:
- Восклицательный знак (!) в начале charlist означает, что выполняется сопоставление, если любой знак, кроме знаков, указанных в charlist, будет найден в аргументе string. При использовании вне квадратных скобок восклицательный знак сопоставляется самому себе.
- Дефис (—) может отображаться в начале (но после восклицательного знака, если он используется) или в конце charlist для сопоставления самому себе. На любой другой позиции дефис используется для указания диапазона знаков.
- При задании диапазона знаков они должны отображаться по возрастающему порядку сортировки (от наименьшего к наибольшему). [A-Z] является допустимым шаблоном, но [Z-A] не является.
- Последовательность [] символов считается строкой нулевой длины («»).
В некоторых языках имеются специальные знаки в алфавите, представляющие два отдельных знака. Например, в нескольких языках используется знак «æ» для представления знаков «a» и «e», когда они отображаются вместе. Оператор Like распознает, что такой отдельный специальный знак и соответствующие два отдельных знака являются эквивалентными.
Когда языки, в которых используются специальные знаки, указываются в языковых настройках системы, отдельный специальный знак в аргументе pattern либо в аргументе string сопоставляется с эквивалентной 2-знаковой последовательностью в другой строке. Аналогичным образом отдельный специальный знак в аргументе pattern, заключенный в квадратные скобки (указанный отдельно, в списке или в диапазоне), сопоставляется с эквивалентной 2-знаковой последовательностью в string.
Пример
В этом примере оператор Like используется для сравнения строки с шаблоном.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
title | keywords | f1_keywords | ms.prod | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|
Like operator (Microsoft Access SQL) |
jetsql40.chm5277589 |
jetsql40.chm5277589 |
access |
70d2ecef-90d7-aff9-398e-8703fb7dfc6e |
06/08/2017 |
medium |
Applies to: Access 2013 | Access 2016
Compares a string expression to a pattern in an SQL expression.
Syntax
expression Like «pattern«
The Like operator syntax has these parts:
Part | Description |
---|---|
expression | SQL expression used in a WHERE clause. |
pattern | String or character string literal against which expression is compared. |
Remarks
Use the Like operator to find values in a field that match the pattern you specify. For pattern, you can specify the complete value (for example, Like "Smith"
), or you can use wildcard characters to find a range of values (for example, ), or you can use wildcard characters to find a range of values (for example, Like "Sm*")
.
In an expression, you can use the Like operator to compare a field value to a string expression. For example, if you enter Like "C*"
in an SQL query, the query returns all field values beginning with the letter C. In a parameter query, you can prompt the user for a pattern to search for.
The following example returns data that begins with the letter P followed by any letter between A and F and three digits:
The following table shows how you can use Like to test expressions for different patterns.
Kind of match | Pattern | Match (returns True) | No match (returns False) |
---|---|---|---|
Multiple characters | a*a | aa, aBa, aBBBa | aBC |
ab | abc, AABB, Xab | aZb, bac | |
Special character | a[*]a | a*a | aaa |
Multiple characters | ab* | abcdefg, abc | cab, aab |
Single character | a?a | aaa, a3a, aBa | aBBBa |
Single digit | a#a | a0a, a1a, a2a | aaa, a10a |
Range of characters | [a-z] | f, p, j | 2, & |
Outside a range | [!a-z] | 9, &, % | b, a |
Not a digit | [!0-9] | A, a, &, ~ | 0, 1, 9 |
Combined | a[!b-m]# | An9, az0, a99 | abc, aj0 |
Example
This example returns a list of employees whose names begin with the letters A through D. It calls the EnumFields procedure, which you can find in the SELECT statement example.
Sub LikeX() Dim dbs As Database, rst As Recordset ' Modify this line to include the path to Northwind ' on your computer. Set dbs = OpenDatabase("Northwind.mdb") ' Return a list of employees whose names begin with ' the letters A through D. Set rst = dbs.OpenRecordset("SELECT LastName," _ & " FirstName FROM Employees" _ & " WHERE LastName Like '[A-D]*';") ' Populate the Recordset. rst.MoveLast ' Call EnumFields to print the contents of the ' Recordset. Pass the Recordset object and desired ' field width. EnumFields rst, 15 dbs.Close End Sub
See also
- Access for developers forum
- Access help on support.office.com
- Access forums on UtterAccess
- Access developer and VBA programming help center (FMS)
- Access posts on StackOverflow
[!includeSupport and feedback]
master-artyom 0 / 0 / 0 Регистрация: 12.06.2015 Сообщений: 66 |
||||
1 |
||||
05.11.2017, 12:28. Показов 16253. Ответов 8 Метки нет (Все метки)
Уважаемые знатоки!
Все работает до того момента, как мне нужно найти, например, такие вхождение «41-2», т.е. с дефисом. Такая запись точно имеется в поле, однако, запрос ничего не выдает. Видимо, дефис как-то иначе воспринимается.
0 |
mobile 26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||||||||||
05.11.2017, 12:43 |
2 |
|||||||||||
Можно реплейсом удалить дефис
Другой вариант искать также с промежуточным символом
Если «пример» берется из формы
1 |
master-artyom 0 / 0 / 0 Регистрация: 12.06.2015 Сообщений: 66 |
||||
05.11.2017, 13:12 [ТС] |
3 |
|||
Большое спасибо за ответ!
0 |
Capi Модератор 5122 / 2529 / 628 Регистрация: 12.06.2016 Сообщений: 6,749 |
||||
05.11.2017, 13:14 |
4 |
|||
Сообщение было отмечено master-artyom как решение Решение
мне нужно найти, например, такие вхождение «41-2», т.е. с дефисом. Нет, дефис такой же символ, как и прочие.
В запросе тоже — выдает правильно запись таблицы. Проверено. Ищите другую причину. А ? выдаст записи с любым символом в этом месте. Нужно ли это?
1 |
0 / 0 / 0 Регистрация: 12.06.2015 Сообщений: 66 |
|
05.11.2017, 16:08 [ТС] |
5 |
Коллеги, прошу прощения за дезинформацию. Действительно, «-» не относится к специальному символу. Все работает корректно вместе с ним. Не понимаю, почему первые 10 тестов у меня ничего не давали. Вопрос снят. Еще раз прошу прощения.
0 |
шапоклякистка 8-го дня 3674 / 2234 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
|
05.11.2017, 16:28 |
6 |
master-artyom, потому что в таблице символов есть по меньшей мере 3 разных символа, которые при беглом чтении могут быть все три восприняты как одно и то же. Они отличаются длиной и расположением в строке (строго по центру или немного выше), но визуально перепутать их очень легко, и есть шансы ввести другой вид «черточки» и не заметить: при определенных настройках автозамены дефис, окруженный пробелами с двух сторон, может запросто быть преобразован в тире. Поэтому совет
Проверьте, например, Asc() символа «-« очень дельный. Добавлено через 3 минуты
1 |
9728 / 4908 / 1195 Регистрация: 05.10.2016 Сообщений: 13,817 Записей в блоге: 1 |
|
05.11.2017, 23:26 |
7 |
Для примера: проверьте коды символов в этой строке: Довольно верное замечание!
0 |
Rikozenit 3 / 3 / 0 Регистрация: 03.08.2015 Сообщений: 156 |
||||
25.11.2019, 15:31 |
8 |
|||
Всем доброго дня! Сегодня убил уйму времени, пока не нашёл вот такую инфу на просторах сети (решил поделиться): При выполнении SQL запроса из VBA кода, в месте где пишется условие, при использовании сравнения LIKE нужно использовать символ %, а не * когда требуется сравнивать какую то часть текста, а не точное сравнение. При этом если запустить запрос с * например в Access, то он отработает нормально. Если не знать эту особенность, то ошибку можно долго искать в коде. Правильно : SELECT * FROM table WHERE pole LIKE «%Условие%» Нашёл вот тут: http://mekap.ru/where-and-like-vba/#comment-51 У меня собственно была строка:
, которая не работала, пока не заменил * на %.
0 |
26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
25.11.2019, 15:43 |
9 |
При выполнении SQL запроса из VBA кода, в месте где пишется условие, при использовании сравнения LIKE нужно использовать символ %, а не * И то и другое верно, но область применения зависит от функционала. Если выполняется в DAO, то нужна звездочка «*», если в ADODB, то процент «%»
3 |
Joe4
MrExcel MVP, Junior Admin
-
#2
Welcome to the Board!
There are a few topics you want to look into Filters, Pivot Tables, and Subtotals
Filters are pretty easy, and work much like the «WHERE» clause in SQL. It will just return the records you want.
However, if you want totals or subtotals, then you will probably want to use Subtotals or Pivot Tables in Excel.
Excel’s Help files are a good place to start for details on these things, but there are also many good articles, videos, and tutorials on-line which can be located pretty easily using a Google Search.
-
#3
Welcome to the Board!
There are a few topics you want to look into Filters, Pivot Tables, and Subtotals
Filters are pretty easy, and work much like the «WHERE» clause in SQL. It will just return the records you want.
However, if you want totals or subtotals, then you will probably want to use Subtotals or Pivot Tables in Excel.Excel’s Help files are a good place to start for details on these things, but there are also many good articles, videos, and tutorials on-line which can be located pretty easily using a Google Search.
Thanks for the reply.
I’m actually looking specifically to do all this as part of a VBA macro without altering the sheet data.
For example, right now I created a dictionary where the keys are the person’s name and their values are the total scores. Now I want to return in a cell the name of the person with the Max score. Not sure how to do that quite yet.
-
#4
Here is one way to get the answer. I’m not sure it will work if there are two occurences of the High Score though. It will just hit the first name…..
Data Looks Like:
Excel 2012 | ||
---|---|---|
|
||
A | B | |
1 | Names | Scores |
2 | Mike | 55 |
3 | John | 66 |
4 | Matt | 77 |
5 | Gerald | 88 |
6 | John | 58 |
Sheet5 |
Code:
[COLOR=#0000ff]Sub[/COLOR] GetHighScore()
[COLOR=#0000ff] Dim[/COLOR] LastRow[COLOR=#0000ff] As Long[/COLOR]
[COLOR=#0000ff] Dim[/COLOR] Rng [COLOR=#0000ff]As [/COLOR]Range
[COLOR=#0000ff]Dim[/COLOR] HighScoreAddress [COLOR=#0000ff]As String[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] HighScore [COLOR=#0000ff]As String[/COLOR]
LastRow = Range("A" & Rows.Count).End(xlUp).Row
HighScore = WorksheetFunction.Max(Range("B2:B" & LastRow))
[COLOR=#0000ff] Set[/COLOR] Rng = Range("B2:B" & LastRow).Find(What:=HighScore, _
After:=Range("B2"), _
LookAt:=xlWhole, _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=[COLOR=#0000ff]False[/COLOR])
[COLOR=#0000ff] If Not [/COLOR]Rng[COLOR=#0000ff] Is Nothing Then[/COLOR]
HighScoreAddress = Rng.Address
NameVal = Range(HighScoreAddress).Offset(, -1).Address
[COLOR=#0000ff] End If[/COLOR]
MsgBox Range(NameVal).Value
[COLOR=#0000ff]End Sub[/COLOR]
Last edited: Aug 29, 2014
-
#5
If you change the code to this it will also check for multiple top values:
Code:
[COLOR=#0000ff]Sub[/COLOR] GetHighScore()
[COLOR=#0000ff] Dim[/COLOR] LastRow [COLOR=#0000ff]As Long[/COLOR]
[COLOR=#0000ff] Dim[/COLOR] Rng [COLOR=#0000ff]As[/COLOR] Range
[COLOR=#0000ff]Dim [/COLOR]HighScoreAddress [COLOR=#0000ff]As String[/COLOR]
[COLOR=#0000ff] Dim[/COLOR] HighScore [COLOR=#0000ff]As String
Dim[/COLOR][COLOR=#000000] CountMaxVal [/COLOR][COLOR=#0000ff] As Integer[/COLOR]
LastRow = Range("A" & Rows.Count).End(xlUp).Row
HighScore = WorksheetFunction.Max(Range("B2:B" & LastRow))
[COLOR=#0000ff] Set[/COLOR] Rng = Range("B2:B" & LastRow).Find(What:=HighScore, _
After:=Range("B2"), _
LookAt:=xlWhole, _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=[COLOR=#0000ff]False[/COLOR])
[COLOR=#0000ff] If Not [/COLOR]Rng [COLOR=#0000ff]Is Nothing Then[/COLOR]
HighScoreAddress = Rng.Address
NameVal = Range(HighScoreAddress).Offset(, -1).Address
[COLOR=#0000ff] End If[/COLOR]
CountMaxVal = Application.WorksheetFunction.CountIf(Range(Cells(2, 2), Cells(LastRow, 2)), CInt(HighScore))
[COLOR=#0000ff] If[/COLOR] CountMaxVal <= 1 [COLOR=#0000ff]Then[/COLOR]
MsgBox Range(NameVal).Value, vbInformation, "Top Value Calculator"
[COLOR=#0000ff] Else[/COLOR]
MsgBox "Multiple Top Values", vbInformation, "Top Value Calculator"
[COLOR=#0000ff] End If[/COLOR]
[COLOR=#0000ff]End Sub[/COLOR]
-
#6
If you change the code to this it will also check for multiple top values:
Code:
[COLOR=#0000ff]Sub[/COLOR] GetHighScore() [COLOR=#0000ff] Dim[/COLOR] LastRow [COLOR=#0000ff]As Long[/COLOR] [COLOR=#0000ff] Dim[/COLOR] Rng [COLOR=#0000ff]As[/COLOR] Range [COLOR=#0000ff]Dim [/COLOR]HighScoreAddress [COLOR=#0000ff]As String[/COLOR] [COLOR=#0000ff] Dim[/COLOR] HighScore [COLOR=#0000ff]As String Dim[/COLOR][COLOR=#000000] CountMaxVal [/COLOR][COLOR=#0000ff] As Integer[/COLOR] LastRow = Range("A" & Rows.Count).End(xlUp).Row HighScore = WorksheetFunction.Max(Range("B2:B" & LastRow)) [COLOR=#0000ff] Set[/COLOR] Rng = Range("B2:B" & LastRow).Find(What:=HighScore, _ After:=Range("B2"), _ LookAt:=xlWhole, _ LookIn:=xlValues, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=[COLOR=#0000ff]False[/COLOR]) [COLOR=#0000ff] If Not [/COLOR]Rng [COLOR=#0000ff]Is Nothing Then[/COLOR] HighScoreAddress = Rng.Address NameVal = Range(HighScoreAddress).Offset(, -1).Address [COLOR=#0000ff] End If[/COLOR] CountMaxVal = Application.WorksheetFunction.CountIf(Range(Cells(2, 2), Cells(LastRow, 2)), CInt(HighScore)) [COLOR=#0000ff] If[/COLOR] CountMaxVal <= 1 [COLOR=#0000ff]Then[/COLOR] MsgBox Range(NameVal).Value, vbInformation, "Top Value Calculator" [COLOR=#0000ff] Else[/COLOR] MsgBox "Multiple Top Values", vbInformation, "Top Value Calculator" [COLOR=#0000ff] End If[/COLOR] [COLOR=#0000ff]End Sub[/COLOR]
Thanks!