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

Вход

Регистрация

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

 

= Мир MS Excel/разделитель строк в 2-х мерном массиве - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
разделитель строк в 2-х мерном массиве
dude Дата: Четверг, 12.10.2017, 15:33 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Добрый день!
Делаю UDF, преобразующую диапазон с данным в массив {}
разделитель столбцов можно узнать так:
[vba]
Код
Option Explicit

Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _
    (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long

Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()
Private Const LOCALE_SLIST = &HC

Public Function GetListSeparator() As String

    Dim ListSeparator As String
    Dim iRetVal1 As Long
    Dim iRetVal2 As Long
    Dim lpLCDataVar As String

    Dim Position As Integer
    Dim Locale As Long

    Locale = GetUserDefaultLCID()

    iRetVal1 = GetLocaleInfo(Locale, LOCALE_SLIST, lpLCDataVar, 0)

    ListSeparator = String$(iRetVal1, 0)

    iRetVal2 = GetLocaleInfo(Locale, LOCALE_SLIST, ListSeparator, iRetVal1)

    Position = InStr(ListSeparator, Chr$(0))
    If Position > 0 Then
        ListSeparator = Left$(ListSeparator, Position - 1)
    End If

    GetListSeparator = ListSeparator

End Function
[/vba]
Как узнать разделитель для строк?
В русской локализациии это двоеточие.
Нужно не зависить от неё.
Спасибо!
 
Ответить
СообщениеДобрый день!
Делаю UDF, преобразующую диапазон с данным в массив {}
разделитель столбцов можно узнать так:
[vba]
Код
Option Explicit

Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _
    (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long

Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()
Private Const LOCALE_SLIST = &HC

Public Function GetListSeparator() As String

    Dim ListSeparator As String
    Dim iRetVal1 As Long
    Dim iRetVal2 As Long
    Dim lpLCDataVar As String

    Dim Position As Integer
    Dim Locale As Long

    Locale = GetUserDefaultLCID()

    iRetVal1 = GetLocaleInfo(Locale, LOCALE_SLIST, lpLCDataVar, 0)

    ListSeparator = String$(iRetVal1, 0)

    iRetVal2 = GetLocaleInfo(Locale, LOCALE_SLIST, ListSeparator, iRetVal1)

    Position = InStr(ListSeparator, Chr$(0))
    If Position > 0 Then
        ListSeparator = Left$(ListSeparator, Position - 1)
    End If

    GetListSeparator = ListSeparator

End Function
[/vba]
Как узнать разделитель для строк?
В русской локализациии это двоеточие.
Нужно не зависить от неё.
Спасибо!

Автор - dude
Дата добавления - 12.10.2017 в 15:33
K-SerJC Дата: Четверг, 12.10.2017, 16:19 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
Как узнать разделитель для строк?

символ переход на след. строку нужен?
vbCrLf или CHR$(10) или CHR$(13)


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщение
Как узнать разделитель для строк?

символ переход на след. строку нужен?
vbCrLf или CHR$(10) или CHR$(13)

Автор - K-SerJC
Дата добавления - 12.10.2017 в 16:19
dude Дата: Четверг, 12.10.2017, 16:48 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Нет, нужно программно. как в первом сообщении.
при пошаговом вычислении формулы в окне вычисления видны точка-зяпатые и двоеточия. В американской локали будут другие разделители.
К сообщению приложен файл: Array_from_rang.xlsm (16.0 Kb)


Сообщение отредактировал dude - Четверг, 12.10.2017, 16:54
 
Ответить
СообщениеНет, нужно программно. как в первом сообщении.
при пошаговом вычислении формулы в окне вычисления видны точка-зяпатые и двоеточия. В американской локали будут другие разделители.

Автор - dude
Дата добавления - 12.10.2017 в 16:48
KuklP Дата: Четверг, 12.10.2017, 17:36 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Для начала - зачем Вам это? Что Вы собираетесь делать с текстовым массивом? Если сохранять в файл, то это одевание трусов через голову. При сохранении на разделители влияет параметр local. Если просто вести какие-то расчеты, то тогда вообще без разницы какой там разделитель. Работать мона с любым.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеДля начала - зачем Вам это? Что Вы собираетесь делать с текстовым массивом? Если сохранять в файл, то это одевание трусов через голову. При сохранении на разделители влияет параметр local. Если просто вести какие-то расчеты, то тогда вообще без разницы какой там разделитель. Работать мона с любым.

Автор - KuklP
Дата добавления - 12.10.2017 в 17:36
dude Дата: Четверг, 12.10.2017, 18:09 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Например, для подобных формул:
[code]=СРЗНАЧ(ЕСЛИ(ЕСЛИ(НАИМЕНЬШИЙ(ТЕКСТ(2+{1;2;3;4;5;6;7;8;9;10;10;10;10}+{1:2:3:4:5:6:7:8:9:10:10:10:10};"[>16]""0"";0")+0; СТРОКА(ДВССЫЛ("1:169")));НАИМЕНЬШИЙ(ТЕКСТ(2+{1;2;3;4;5;6;7;8;9;10;10;10;10}+{1:2:3:4:5:6:7:8:9:10:10:10:10};"[>16]""0"";0")+0; СТРОКА(ДВССЫЛ("1:169")))+{1;2;3;4;5;6;7;8;9;10;10;10;10};0)=22;1;0))
 
Ответить
СообщениеНапример, для подобных формул:
[code]=СРЗНАЧ(ЕСЛИ(ЕСЛИ(НАИМЕНЬШИЙ(ТЕКСТ(2+{1;2;3;4;5;6;7;8;9;10;10;10;10}+{1:2:3:4:5:6:7:8:9:10:10:10:10};"[>16]""0"";0")+0; СТРОКА(ДВССЫЛ("1:169")));НАИМЕНЬШИЙ(ТЕКСТ(2+{1;2;3;4;5;6;7;8;9;10;10;10;10}+{1:2:3:4:5:6:7:8:9:10:10:10:10};"[>16]""0"";0")+0; СТРОКА(ДВССЫЛ("1:169")))+{1;2;3;4;5;6;7;8;9;10;10;10;10};0)=22;1;0))

Автор - dude
Дата добавления - 12.10.2017 в 18:09
KuklP Дата: Четверг, 12.10.2017, 18:14 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Ну не вводите ее как formulalocal, а вводите как formula, на аглицком и любая локаль ее распознает. Надо ж столько нагородить, да с АПИ-функциями, чтобы просто ввести формулу..


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНу не вводите ее как formulalocal, а вводите как formula, на аглицком и любая локаль ее распознает. Надо ж столько нагородить, да с АПИ-функциями, чтобы просто ввести формулу..

Автор - KuklP
Дата добавления - 12.10.2017 в 18:14
dude Дата: Четверг, 12.10.2017, 18:34 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
KuklP
мне бы не хотелось в ручную создавать подобные конструкции:
{1;2;3;4;5;6;7;8;9;10;10;10;10} или {1:2:3:4:5:6:7:8:9:10:10:10:10}

PS. API взял готовую


Сообщение отредактировал dude - Четверг, 12.10.2017, 18:36
 
Ответить
СообщениеKuklP
мне бы не хотелось в ручную создавать подобные конструкции:
{1;2;3;4;5;6;7;8;9;10;10;10;10} или {1:2:3:4:5:6:7:8:9:10:10:10:10}

PS. API взял готовую

Автор - dude
Дата добавления - 12.10.2017 в 18:34
buchlotnik Дата: Четверг, 12.10.2017, 19:11 | Сообщение № 8
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
dude, зачем вам подобные конструкции? для ввода формул? - в английской локали вместо точки с запятой ставьте точку, вместо двоеточия - точку с запятой и в ячейки вставляйте формулы как formula а не formulalocal или подробнее объясните задачу
 
Ответить
Сообщениеdude, зачем вам подобные конструкции? для ввода формул? - в английской локали вместо точки с запятой ставьте точку, вместо двоеточия - точку с запятой и в ячейки вставляйте формулы как formula а не formulalocal или подробнее объясните задачу

Автор - buchlotnik
Дата добавления - 12.10.2017 в 19:11
dude Дата: Четверг, 12.10.2017, 19:27 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
buchlotnik
я пытаюсь сделать udf, не зависимую от локали. Формула обрабатывает заполненный диапазон неважно в РФ или в США.
 
Ответить
Сообщениеbuchlotnik
я пытаюсь сделать udf, не зависимую от локали. Формула обрабатывает заполненный диапазон неважно в РФ или в США.

Автор - dude
Дата добавления - 12.10.2017 в 19:27
Gustav Дата: Четверг, 12.10.2017, 19:49 | Сообщение № 10
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Чисто на заметку, чисто "советы постороннего". Допустим есть диапазон A1:C5 со следующим содержанием:
[vba]
Код
1    2    3
4    5    6
7    8    9
10    11    12
13    14    15
[/vba]т.е. числа от 1 до 15 в 5-ти строках по 3 ячейки (столбца) в строке.

Где-нибудь в стороне, например, в ячейке E1 вводим формулу со ссылкой на указанный диапазон:
Код
=A1:C5

Игнорируя то, что после нажатия Enter ячейка отобразила нам ошибку #ЗНАЧ!, ещё раз входим в ячейку для редактирования (например, по F2) и нажимаем F9:
Код
={1;2;3:4;5;6:7;8;9:10;11;12:13;14;15}

dude, это оно? Это то, что Вы пытаетесь получить свой UDF-кой? И, как видите, локаль сама разобралась со всеми разделителями - и даже нас не спросила :)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЧисто на заметку, чисто "советы постороннего". Допустим есть диапазон A1:C5 со следующим содержанием:
[vba]
Код
1    2    3
4    5    6
7    8    9
10    11    12
13    14    15
[/vba]т.е. числа от 1 до 15 в 5-ти строках по 3 ячейки (столбца) в строке.

Где-нибудь в стороне, например, в ячейке E1 вводим формулу со ссылкой на указанный диапазон:
Код
=A1:C5

Игнорируя то, что после нажатия Enter ячейка отобразила нам ошибку #ЗНАЧ!, ещё раз входим в ячейку для редактирования (например, по F2) и нажимаем F9:
Код
={1;2;3:4;5;6:7;8;9:10;11;12:13;14;15}

dude, это оно? Это то, что Вы пытаетесь получить свой UDF-кой? И, как видите, локаль сама разобралась со всеми разделителями - и даже нас не спросила :)

Автор - Gustav
Дата добавления - 12.10.2017 в 19:49
buchlotnik Дата: Четверг, 12.10.2017, 20:50 | Сообщение № 11
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
dude,
Цитата
пытаюсь сделать udf
это не объяснение - что за задачу решаете? объясните. может локаль вообще роли не играет
 
Ответить
Сообщениеdude,
Цитата
пытаюсь сделать udf
это не объяснение - что за задачу решаете? объясните. может локаль вообще роли не играет

Автор - buchlotnik
Дата добавления - 12.10.2017 в 20:50
_Boroda_ Дата: Четверг, 12.10.2017, 21:10 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
dude, Поправьте теги в посте #5


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениеdude, Поправьте теги в посте #5

Автор - _Boroda_
Дата добавления - 12.10.2017 в 21:10
Gustav Дата: Пятница, 13.10.2017, 19:09 | Сообщение № 13
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
разделитель столбцов можно узнать так:
..........
Как узнать разделитель для строк?

И, кстати же, всякие разделители можно получить прямо в Excel, не прибегая к WinAPI. Их предоставляет свойство Application.International - https://msdn.microsoft.com/en-us....y-excel :
[vba]
Код
разделитель строк в массивах - Application.International(xlRowSeparator)
разделитель столбцов в массивах - Application.International(xlColumnSeparator)
[/vba]И есть еще отдельный разделитель списков:
[vba]
Код
Application.International(xlListSeparator)
[/vba]
который в русской локали совпадает с разделителем столбцов и равняется точке с запятой. И в связи с этим вопрос: правильный ли разделитель столбцов Вы достаете выше из Win API, называя его при этом ListSeparator ?


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
разделитель столбцов можно узнать так:
..........
Как узнать разделитель для строк?

И, кстати же, всякие разделители можно получить прямо в Excel, не прибегая к WinAPI. Их предоставляет свойство Application.International - https://msdn.microsoft.com/en-us....y-excel :
[vba]
Код
разделитель строк в массивах - Application.International(xlRowSeparator)
разделитель столбцов в массивах - Application.International(xlColumnSeparator)
[/vba]И есть еще отдельный разделитель списков:
[vba]
Код
Application.International(xlListSeparator)
[/vba]
который в русской локали совпадает с разделителем столбцов и равняется точке с запятой. И в связи с этим вопрос: правильный ли разделитель столбцов Вы достаете выше из Win API, называя его при этом ListSeparator ?

Автор - Gustav
Дата добавления - 13.10.2017 в 19:09
dude Дата: Пятница, 13.10.2017, 21:09 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
dude, это оно?

да, это
 
Ответить
Сообщение
dude, это оно?

да, это

Автор - dude
Дата добавления - 13.10.2017 в 21:09
dude Дата: Пятница, 13.10.2017, 21:19 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
И, кстати же, всякие разделители можно получить прямо в Excel, не прибегая к WinAPI.

Большое спасибо!
был там, но до этого не докорал
 
Ответить
Сообщение
И, кстати же, всякие разделители можно получить прямо в Excel, не прибегая к WinAPI.

Большое спасибо!
был там, но до этого не докорал

Автор - dude
Дата добавления - 13.10.2017 в 21:19
_Boroda_ Дата: Суббота, 14.10.2017, 08:38 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
dude, не хотите исполнять указания модератора. Ловите замечание
Gustav, Константин, большая просьба повременить с ответами до исправления ТС-ом замечаний (да и вообще в темах с нарушениями Правил форума)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениеdude, не хотите исполнять указания модератора. Ловите замечание
Gustav, Константин, большая просьба повременить с ответами до исправления ТС-ом замечаний (да и вообще в темах с нарушениями Правил форума)

Автор - _Boroda_
Дата добавления - 14.10.2017 в 08:38
Gustav Дата: Воскресенье, 15.10.2017, 22:59 | Сообщение № 17
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
_Boroda_, Александр, внял, учту! Просто мой как бы основной ответ про F9, вроде, был до замечания, но "модератор всегда прав", поэтому понял-понял!


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение_Boroda_, Александр, внял, учту! Просто мой как бы основной ответ про F9, вроде, был до замечания, но "модератор всегда прав", поэтому понял-понял!

Автор - Gustav
Дата добавления - 15.10.2017 в 22:59
  • Страница 1 из 1
  • 1
Поиск:

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