Консультация № 113909
14.12.2007, 00:05
0.00 руб.
0 2 2
Уважаемы знатоки. помогите пожалуйста.
Мне нужно выполнить следующее задание:
В ячейки С2, С3, С4 поместить названия левой, средней и правой цифр трехзначного числа из ячейки В1.
Формулу я нашла =БАТТЕКСТ(ПСТР(B1;1;1)).
Но вот незадача. Ответ у меня выходит в виде иероглифов- สองบาทถ้วน. Что делать?

Обсуждение

Неизвестный
14.12.2007, 00:50
общий
это ответ
Здравствуйте, lyalya!

Вы просто не внимательно прочитали справку по функции:
<i>БАТТЕКСТ - Преобразование числа в текст <b>на тайском языке</b>.</i>

Ваша же задача решается при помощи функции <i>ПСТР()</i>.
<code>=ПСТР(B1;1;1) - первая цифра числа.
=ПСТР(B1;2;1) - вторая цифра числа.
=ПСТР(B1;3;1) - третья цифра числа.</code>

Good Luck!!!
Неизвестный
14.12.2007, 10:12
общий
это ответ
Здравствуйте, lyalya!
насколько я понял Вам надо по числу, например, 123, получить в одной ячейке "один", в другой "два", в третьей "три". Разобьем проблему на 2 части:
1. Разделение числа
2. Представление числа в виде строки

Первая проблема решается легко: допустим что у Вас число исходное в ячейке B1 тогда
в ячейке C2 (там будут сотни) пишите =ОТБР(B1/100)
в ячейке C3 (там будут десятки) пишите =ОТБР((B1-C2*100)/10)
в ячейке C4 (там будут единицы) пишите =ОТБР(B1-C2*100-C3*10)
Таким образом у Вас получится С2=1, С3=2, С4=3.

Вторая проблема сложнее с стандартными функциями Excel не решается, поэтому предлагаю такой вариант: выбираете в меню Сервис / Макрос / Редактор Visual Basic.
Далее выбираете Insert / Module и туда вставляете код из приложения.
После этого можно пользоваться функцией Money2String(ячейка), которая переводит число из выбранной ячейки в строковое представление

В результате фунцкии в ячейках будут
=Money2String(ОТБР(B1/100))
=Money2String(ОТБР((B1-C2*100)/10))
=Money2String(ОТБР(B1-C2*100-C3*10))

Будут проблемы, обращайтесь!

Приложение:
Function Money2String(CellValue As Long) As String Call SummaString(Summa$, CellValue, 1, "", "", "") Money2String = Summa$End FunctionSub SummaString(Summa$, Source As Long, Rod%, w1$, w2to4$, w5to10$)‘‘ "Сумма прописью":‘ преобразование числа из цифрого вида в символьное‘ ==================================================‘ Исходные данные:‘ Source - число от 0 до 2147483647 (2^31-1)‘ Eсли нужно оперировать с числами > 2 147 483 647‘ замените описание переменных Source и TempValue на "AS DOUBLE"‘‘ далее нужно задать информацию о единице изменения‘ Rod% = 1 - мужской, = 2 - женский, = 3 - средний‘ название единицы изменения:‘ w1$ - именительный падеж единственное число (= 1)‘ w2to4$ - родительный падеж единственное число (= 2-4)‘ w5to10$ - родительный падеж множественное число ( = 5-10)‘‘ Rod% должен быть задано обязательно, название единицы может быть‘ не задано = ""‘ ———————————————-‘ Результат: Summa$ - запись прописью‘‘================================ Dim TempValue As Long ‘ If Source& = 0 Then Summa$ = RTrim$("ноль " + w5to10$): Exit Sub End If ‘ TempValue = Source: Summa$ = "" ‘ единицы Call SummaStringThree(Summa$, TempValue, Rod%, w1$, w2to4$, w5to10$) If TempValue = 0 Then Exit Sub ‘ тысячи Call SummaStringThree(Summa$, TempValue, 2, "тысяча", "тысячи", "тысяч") If TempValue = 0 Then Exit Sub ‘ миллионы Call SummaStringThree(Summa$, TempValue, 1, "миллион", "миллиона", "миллионов") If TempValue = 0 Then Exit Sub ‘ миллиардов Call SummaStringThree(Summa$, TempValue, 1, "миллиард", "миллиарда", "миллиардов") If TempValue = 0 Then Exit Sub ‘ ‘ Eсли нужно оперировать с числами > 2 147 483 647 ‘ измените тип переменных (см. выше) и добавьте эту строку для триллионов: ‘ CALL SummaStringThree(Summa$, TempValue#, 1, "трилллион", "триллиона", "триллионов") ‘ IF TempValue# = 0 THEN EXIT SUB ‘ ‘ Что идет после триллионов, я плохо представляю... ‘End SubSub SummaStringThree(Summa$, TempValue As Long, Rod%, w1$, w2to4$, w5to10$)‘‘ Формирования строки для трехзначного числа:‘ (последний трех знаков TempValue ‘ Eсли нужно оперировать с числами > 2 147 483 647 ‘ замените в описании на TempValue AS DOUBLE‘==================================== Dim Rest%, Rest1%, EndWord$, s1$, s10$, s100$ ‘ Rest% = TempValue& Mod 1000 TempValue& = TempValue& \ 1000 If Rest% = 0 Then ‘ последние три знака нулевые If Summa$ = "" Then Summa$ = w5to10$ + " " Exit Sub End If ‘ ‘ начинаем подсчет с Rest EndWord$ = w5to10$ ‘ сотни Select Case Rest% \ 100 Case 0: s100$ = "" Case 1: s100$ = "сто " Case 2: s100$ = "двести " Case 3: s100$ = "триста " Case 4: s100$ = "четыреста " Case 5: s100$ = "пятьсот " Case 6: s100$ = "шестьсот " Case 7: s100$ = "семьсот " Case 8: s100$ = "восемьсот " Case 9: s100$ = "девятьсот " End Select ‘ ‘ десятки Rest% = Rest% Mod 100: Rest1% = Rest% \ 10 s1$ = "" Select Case Rest1% Case 0: s10$ = "" Case 1 ‘ особый случай Select Case Rest% Case 10: s10$ = "десять " Case 11: s10$ = "одиннадцать " Case 12: s10$ = "двенадцать " Case 13: s10$ = "тринадцать " Case 14: s10$ = "четырнадцать " Case 15: s10$ = "пятнадцать " Case 16: s10$ = "шестнадцать " Case 17: s10$ = "семнадцать " Case 18: s10$ = "восемнадцать " Case 19: s10$ = "девятнадцать " End Select Case 2: s10$ = "двадцать " Case 3: s10$ = "тридцать " Case 4: s10$ = "сорок " Case 5: s10$ = "пятьдесят " Case 6: s10$ = "шестьдесят " Case 7: s10$ = "семьдесят " Case 8: s10$ = "восемьдесят " Case 9: s10$ = "девяносто " End Select ‘ If Rest1% <> 1 Then ‘ единицы Select Case Rest% Mod 10 Case 1 Select Case Rod% Case 1: s1$ = "один " Case 2: s1$ = "одна " Case 3: s1$ = "одно " End Select EndWord$ = w1$ Case 2 If Rod% = 2 Then s1$ = "две " Else s1$ = "два " EndWord$ = w2to4$ Case 3: s1$ = "три ": EndWord$ = w2to4$ Case 4: s1$ = "четыре ": EndWord$ = w2to4$ Case 5: s1$ = "пять " Case 6: s1$ = "шесть " Case 7: s1$ = "семь " Case 8: s1$ = "восемь " Case 9: s1$ = "девять " End Select End If ‘ ‘ сборка строки Summa$ = RTrim$(RTrim$(s100$ + s10$ + s1$ + EndWord$) + " " + Summa$)End Sub
Форма ответа