Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 16:55   #1
Alex___
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 59
По умолчанию Подстановка склоняемого слова

Добрый день!
Помогите пожалуйста довести до логического завершения прикрепленный файл!!!Вопрос в склонении слова "ВАГОН".т.е. если 1 вагон, 2 вагона и т.д.Формулы которые сейчас стоят не позволяют склонять:

11 ж/д вагонов (а получается "вагона")
12 ж/д вагонов (а получается "вагона")
13 ж/д вагонов (а получается "вагона")
14 ж/д вагонов (а получается "вагона")
21 ж/д вагон (а получается "вагона")
31 ж/д вагон (а получается "вагона")
41 ж/д вагон (а получается "вагона")

Кроме этих значений все остальные с 1 по 50 показывает правильно.
Вложения
Тип файла: rar контрольная панель.rar (6.5 Кб, 20 просмотров)
Alex___ вне форума Ответить с цитированием
Старый 27.08.2009, 17:49   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Я бы посоветовал изменить этот код на нечто более удобочитаемое, потому что в нем довольно трудно разбираться и большое число уровней вложенности. Может, лучше с помощью макросов?
motorway вне форума Ответить с цитированием
Старый 27.08.2009, 17:52   #3
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Там пропущено правсимвол в одном месте и 1 надо в кавычках было.
Код:
=ЕСЛИ(СЧЁТЕСЛИ(Y!$E$10:$E$59;A1)>0;СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНДЕКС(Y!$B$10:$B$59;
ПОИСКПОЗ(A1;Y!$E$10:$E$59;0);1))&" ж/д вагон"&ЕСЛИ(ПРАВСИМВ(СЧЁТЕСЛИ(Y!$B$10:$B$59;
ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y!$E$10:$E$59;0);1)))="1";"";ЕСЛИ(ИЛИ(ПРАВСИМВ
(СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y!$E$10:$E$59;0);1)))*1=0;
ПРАВСИМВ(СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y!$E$10:$E$59;0);1)))
*1>=5);"ов";"а"))&" - "&ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y!$E$10:$E$59;0);1);"")
для В1
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн

Последний раз редактировалось DV68; 27.08.2009 в 18:14.
DV68 вне форума Ответить с цитированием
Старый 27.08.2009, 17:56   #4
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

но это только для 21,31,41. а так действительно может где то имя формулам повторяющимся присвоить для удобства.
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Старый 27.08.2009, 17:58   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у меня другой совет: количество вагонов посчитайте в одной ячейке, а в соседней допишите все необходимые слова. формула, которая склоняет слово "вагоны" написана правее вашей таблицы.
Вложения
Тип файла: rar Книга146.rar (8.8 Кб, 15 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 27.08.2009, 18:16   #6
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
у меня другой совет: количество вагонов посчитайте в одной ячейке, а в соседней допишите все необходимые слова. формула, которая склоняет слово "вагоны" написана правее вашей таблицы.
логично, и формула приобретает удобоваримый вид
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Старый 27.08.2009, 18:21   #7
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Код:
Public Function Вагоны(i As Integer) As String
    Dim s As String
    Dim l As Integer
    Вагоны = "вагонов"
    s = CStr(i)
    l = Len(s)
    If l > 1 Then
        If Mid$(s, l - 1, 1) = "1" Then
            Exit Function
        End If
    End If
    Select Case Right$(s, 1)
        Case "1"
            Вагоны = "вагон"
        Case "2", "3", "4"
            Вагоны = "вагона"
    End Select
End Function
Aent вне форума Ответить с цитированием
Старый 03.09.2009, 11:16   #8
Alex___
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 59
По умолчанию

Добрый день спасибо за ответ, но явставил Ваш код но EXCEL не принемает его!

=ЕСЛИ(СЧЁТЕСЛИ(Y!$E$10:$E$59;A1)>0; СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНДЕКС(Y!$B$ 10:$B$59;
ПОИСКПОЗ(A1;Y!$E$10:$E$59;0);1))&" ж/д вагон"&ЕСЛИ(ПРАВСИМВ(СЧЁТЕСЛИ(Y!$B$ 10:$B$59;
ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y! $E$10:$E$59;0);1)))="1";"";ЕСЛИ(ИЛИ (ПРАВСИМВ
(СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНДЕКС(Y!$B $10:$B$59;ПОИСКПОЗ(A1;Y!$E$10:$E$59 ;0);1)))*1=0;
ПРАВСИМВ(СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНД ЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y!$E$ 10:$E$59;0);1)))
*1>=5);"ов";"а"))&" - "&ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1; Y!$E$10:$E$59;0);1);"")

Последний раз редактировалось Alex___; 03.09.2009 в 11:18.
Alex___ вне форума Ответить с цитированием
Старый 03.09.2009, 12:57   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
=ЕСЛИ(СЧЁТЕСЛИ(Y!$E$10:$E$59;A1)>0; СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНДЕКС(Y!$B$ 10:$B$59;
ПОИСКПОЗ(A1;Y!$E$10:$E$59;0);1))&" ж/д вагон"&ЕСЛИ(ПРАВСИМВ(СЧЁТЕСЛИ(Y!$B$ 10:$B$59;
ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y! $E$10:$E$59;0);1)))="1";"";ЕСЛИ(ИЛИ (ПРАВСИМВ
(СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНДЕКС(Y!$B $10:$B$59;ПОИСКПОЗ(A1;Y!$E$10:$E$59 ;0);1)))*1=0;
ПРАВСИМВ(СЧЁТЕСЛИ(Y!$B$10:$B$59;ИНД ЕКС(Y!$B$10:$B$59;ПОИСКПОЗ(A1;Y!$E$ 10:$E$59;0);1)))
*1>=5);"ов";"а"))&" - "&ИНДЕКС(Y!$B$10:$B$59;ПОИСКПОЗ (A1; Y!$E$10:$E$59;0);1);"")
Вот это да!!! Я даже дочитать до конца формулу не сумел. Моск закипел.
Может быть, все-таки, лучше макросом? Чем Вас не устраивает код от Aent?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 03.09.2009, 13:51   #10
Alex___
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 59
По умолчанию

Я смотрю на этот макрос как баран на ворота и ничего не понимаю.Если в формуле что то знакомо то куда вставлять этот код макроса и что он в данном случае подсчитывает???
Alex___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подстановка в ячейках Garrison Microsoft Office Excel 13 31.07.2009 21:44
Подстановка имен книг mephist Microsoft Office Excel 2 20.07.2009 11:16
Автоматическая подстановка значения. Baloo007 Microsoft Office Excel 2 08.07.2009 10:37
Как удалить текст до слова, потом от слова ? littlecoder Общие вопросы Delphi 7 29.12.2008 00:57
Сравнение и подстановка tsasha1 Microsoft Office Excel 2 08.04.2008 14:47