Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск арабских букв в диапазоне в ячейке - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск арабских букв в диапазоне в ячейке (Функция Поиск арабских букв в диапазоне в ячейке)
Поиск арабских букв в диапазоне в ячейке
Zaga83 Дата: Четверг, 09.11.2017, 09:44 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день. Уважаемые участники форума.
Передо мной стоит задача создать
пользовательскую формулу в excel с помощью VBA, которая ищет наличие любой арабской цифры в ячейке заданных столбцов.
пример прилагается.
Нашел код VBA который удаляет все арабские буквы из ячейки.

Код VBA
[vba]
Код
Function TrimArabic(txt) As String
''''
' Removes all characters U+0600 and higher from txt.
'
' Designed to remove Arabic characters, it also removes Chinese and
'   many, many other language group characters from txt.
''''
    Dim glyph As String
    Dim i As Long
    
    For i = 1 To Len(txt)
        glyph = Mid(txt, i, 1)
        If glyph < ChrW(&H600) Then
            TrimArabic = TrimArabic & glyph
        End If
    Next i
End Function
''''

Sub RemoveArabic()
''''
' Removes all characters above U+05FF from a selected range.
'
' Requires TrimArabic().
''''
    Dim cell As Range

    If TypeName(Selection) <> "Range" Then Exit Sub

    For Each cell In Selection
        cell.Value = TrimArabic(cell.Value)
    Next cell
End Sub
[/vba]
Я использовал функцию VBA TrimArabic2(txt) и пыталься ее исправить, но
проблема заключается в следующем, если есть в ячейке смешанные символы, например, русские буквы или английские, то значение всегда получается 0.
И еще в функции есть только возможность объединить ячейки только через & в скобках (A4&B4), а надо как в обычной функции через ; (A4;B4) чтобы можно было выбрать любой дипазон как сплошной A4:D4, так и выборочный A4;B4;C4 например.

есть ссылка на источник кода My WebPage
Прошу помочь, любые советы очень будут полезны!!! %)
К сообщению приложен файл: ____.xls(48Kb)


Сообщение отредактировал Zaga83 - Четверг, 09.11.2017, 09:52
 
Ответить
СообщениеДобрый день. Уважаемые участники форума.
Передо мной стоит задача создать
пользовательскую формулу в excel с помощью VBA, которая ищет наличие любой арабской цифры в ячейке заданных столбцов.
пример прилагается.
Нашел код VBA который удаляет все арабские буквы из ячейки.

Код VBA
[vba]
Код
Function TrimArabic(txt) As String
''''
' Removes all characters U+0600 and higher from txt.
'
' Designed to remove Arabic characters, it also removes Chinese and
'   many, many other language group characters from txt.
''''
    Dim glyph As String
    Dim i As Long
    
    For i = 1 To Len(txt)
        glyph = Mid(txt, i, 1)
        If glyph < ChrW(&H600) Then
            TrimArabic = TrimArabic & glyph
        End If
    Next i
End Function
''''

Sub RemoveArabic()
''''
' Removes all characters above U+05FF from a selected range.
'
' Requires TrimArabic().
''''
    Dim cell As Range

    If TypeName(Selection) <> "Range" Then Exit Sub

    For Each cell In Selection
        cell.Value = TrimArabic(cell.Value)
    Next cell
End Sub
[/vba]
Я использовал функцию VBA TrimArabic2(txt) и пыталься ее исправить, но
проблема заключается в следующем, если есть в ячейке смешанные символы, например, русские буквы или английские, то значение всегда получается 0.
И еще в функции есть только возможность объединить ячейки только через & в скобках (A4&B4), а надо как в обычной функции через ; (A4;B4) чтобы можно было выбрать любой дипазон как сплошной A4:D4, так и выборочный A4;B4;C4 например.

есть ссылка на источник кода My WebPage
Прошу помочь, любые советы очень будут полезны!!! %)

Автор - Zaga83
Дата добавления - 09.11.2017 в 09:44
sboy Дата: Четверг, 09.11.2017, 13:06 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1103
Репутация: 276 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Подкорректировал, правда только для сплошных диапазонов
[vba]
Код
Function TrimArabic2(ByRef r As Range) As Boolean
    Dim буква As String
    Dim i As Long
    Dim txt As String
    Dim cl As Range
    Dim ar As Range
    TrimArabic2 = False
        For Each cl In r.Cells
            txt = cl.Value
                For i = 1 To Len(txt)
                    буква = Mid(txt, i, 1)
                        If буква > ChrW(&H600) Then
                            TrimArabic2 = True
                            Exit Function
                        End If
                Next i
        Next cl
End Function
[/vba]
К сообщению приложен файл: -2-.xls(48Kb)
 
Ответить
СообщениеДобрый день.
Подкорректировал, правда только для сплошных диапазонов
[vba]
Код
Function TrimArabic2(ByRef r As Range) As Boolean
    Dim буква As String
    Dim i As Long
    Dim txt As String
    Dim cl As Range
    Dim ar As Range
    TrimArabic2 = False
        For Each cl In r.Cells
            txt = cl.Value
                For i = 1 To Len(txt)
                    буква = Mid(txt, i, 1)
                        If буква > ChrW(&H600) Then
                            TrimArabic2 = True
                            Exit Function
                        End If
                Next i
        Next cl
End Function
[/vba]

Автор - sboy
Дата добавления - 09.11.2017 в 13:06
Zaga83 Дата: Четверг, 09.11.2017, 13:32 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
sboy, Спасибо, работает функция!!! :)
в принципе и для сплошных дипазонов тоже подходит...
как я понял 2 "--" в строке формулы функции булево значение преобразуют в число.
Спасибо еще раз огромное!!!
 
Ответить
Сообщениеsboy, Спасибо, работает функция!!! :)
в принципе и для сплошных дипазонов тоже подходит...
как я понял 2 "--" в строке формулы функции булево значение преобразуют в число.
Спасибо еще раз огромное!!!

Автор - Zaga83
Дата добавления - 09.11.2017 в 13:32
Zaga83 Дата: Суббота, 11.11.2017, 18:05 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день. sboy, продолжил тестирование Вашей функции на другом примере а все равно выдает цифру 1 там где нет вроде арабских букв?

Проверил каждую ячейку в дипазоне B7, C7, D7, E7, и только на E7 Выдает значение 1 хотя там вроде нет арабских букв?
Поскажите в чем проблема? Может какие скрытые символы на арабском языке? Файл прилагаю с примером? :(
К сообщению приложен файл: users_Verified_.xlsm(86Kb)


Сообщение отредактировал Zaga83 - Суббота, 11.11.2017, 18:07
 
Ответить
СообщениеДобрый день. sboy, продолжил тестирование Вашей функции на другом примере а все равно выдает цифру 1 там где нет вроде арабских букв?

Проверил каждую ячейку в дипазоне B7, C7, D7, E7, и только на E7 Выдает значение 1 хотя там вроде нет арабских букв?
Поскажите в чем проблема? Может какие скрытые символы на арабском языке? Файл прилагаю с примером? :(

Автор - Zaga83
Дата добавления - 11.11.2017 в 18:05
RAN Дата: Суббота, 11.11.2017, 18:18 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4602
Репутация: 925 ±
Замечаний: 0% ±

2010
Арабский ни при чем.
Разыщите таблицу юникода, и смотрите, код какого из ваших символов больше &H600 (или, в десятичной системе, 1536)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеАрабский ни при чем.
Разыщите таблицу юникода, и смотрите, код какого из ваших символов больше &H600 (или, в десятичной системе, 1536)

Автор - RAN
Дата добавления - 11.11.2017 в 18:18
Zaga83 Дата: Суббота, 11.11.2017, 19:35 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN,
Спасибо за подсказку. Сначала через Debug.Print просмотрел что выдает значение по столбцу E.
это были знаки припинания Запятая, вопросительный знак и тд. и все они были больше &H600
Потом посмотер таблицу Юникода. В ней нашел с какого по какой занимают арабские буквы? Оказывется 600 до 700
изменил код
на такую строку

[vba]
Код
If буква > ChrW(&H600) And буква < ChrW(&H700) Then
                            'Debug.Print буква
                            'Debug.Print AscW(буква)
[/vba]
теперь функция не учитывет знаки припинания. И ищет только арабские буквы, что требовалось по заданию.
Спасибо за помощь RAN,


Сообщение отредактировал Zaga83 - Суббота, 11.11.2017, 19:40
 
Ответить
СообщениеRAN,
Спасибо за подсказку. Сначала через Debug.Print просмотрел что выдает значение по столбцу E.
это были знаки припинания Запятая, вопросительный знак и тд. и все они были больше &H600
Потом посмотер таблицу Юникода. В ней нашел с какого по какой занимают арабские буквы? Оказывется 600 до 700
изменил код
на такую строку

[vba]
Код
If буква > ChrW(&H600) And буква < ChrW(&H700) Then
                            'Debug.Print буква
                            'Debug.Print AscW(буква)
[/vba]
теперь функция не учитывет знаки припинания. И ищет только арабские буквы, что требовалось по заданию.
Спасибо за помощь RAN,

Автор - Zaga83
Дата добавления - 11.11.2017 в 19:35
RAN Дата: Суббота, 11.11.2017, 20:09 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4602
Репутация: 925 ±
Замечаний: 0% ±

2010
Такой ответ радует больше всего!
Значит, в коня КОРМ! :)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТакой ответ радует больше всего!
Значит, в коня КОРМ! :)

Автор - RAN
Дата добавления - 11.11.2017 в 20:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск арабских букв в диапазоне в ячейке (Функция Поиск арабских букв в диапазоне в ячейке)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!