Добрый вечер Подскажите пожалуйста скрипт на формулу, чтобы получать такой результат, как, например:
Цитата
исходные данные: Total sum including VAT 83969,10 исходные данные: VAT (20%) 13994,85
Какой нужен результат формулы: UAH Eighty three thousand nine hundred and sixty nine 10 kop. including VAT amounting to UAH 13994,85
Пытался модифицировать готовый скрипт от майкрософта, но т.к. мои познания в VBA стремятся к нулю - ничего не вышло Вот что я пытался изменять
Код
Option Explicit
'Main Function
Function SpellNumber(ByVal MyNumber)
Dim Dollars, Cents, Temp
Dim DecimalPlace, Count
ReDim Place(9) As String
Place(2) = " Thousand "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "
' String representation of amount.
MyNumber = Trim(Str(MyNumber))
' Position of decimal place 0 if none.
DecimalPlace = InStr(MyNumber, ".")
' Convert cents and set MyNumber to dollar amount.
If DecimalPlace > 0 Then
Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _
"00", 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber <> ""
Temp = GetHundreds(Right(MyNumber, 3))
If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop
Select Case Dollars
Case ""
Dollars = "No Dollars"
Case "One"
Dollars = "One Dollar"
Case Else
Dollars = Dollars & " Dollars"
End Select
Select Case Cents
Case ""
Cents = " and No Cents"
Case "One"
Cents = " and One Cent"
Case Else
Cents = " and " & Cents & " Cents"
End Select
SpellNumber = Dollars & Cents
End Function
' Converts a number from 100-999 into text
Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
' Convert the hundreds place.
If Mid(MyNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
End If
' Convert the tens and ones place.
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Result
End Function
' Converts a number from 10 to 99 into text.
Function GetTens(TensText)
Dim Result As String
Result = "" ' Null out the temporary function value.
If Val(Left(TensText, 1)) = 1 Then ' If value between 10-19...
Select Case Val(TensText)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else ' If value between 20-99...
Select Case Val(Left(TensText, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select
Result = Result & GetDigit _
(Right(TensText, 1)) ' Retrieve ones place.
End If
GetTens = Result
End Function
' Converts a number from 1 to 9 into text.
Function GetDigit(Digit)
Select Case Val(Digit)
Case 1: GetDigit = "One"
Case 2: GetDigit = "Two"
Case 3: GetDigit = "Three"
Case 4: GetDigit = "Four"
Case 5: GetDigit = "Five"
Case 6: GetDigit = "Six"
Case 7: GetDigit = "Seven"
Case 8: GetDigit = "Eight"
Case 9: GetDigit = "Nine"
Case Else: GetDigit = ""
End Select
End Function
Подскажите, пожалуйста. У меня есть документ в Word и Excel с расчетными данными. Мне необходимо сделать ссылки из ворда в эксель на определенные расчетные ячейки. НО довольно часто в экселе придется добавлять или удалять строки. Соответственно необходимо, чтобы в ворде ссылка "следовала" за изначально залинкованой.
Собственно столкнулся с такой проблемой. Мне для аналитики основных средств на предприятии необходимо всё схлопнуть сводной таблицей, так как необходимо сравнивать отдельно приход, списание, на конец, амортизацию и т.п. отдельно по каждой группе.
Своего рода я нашел решение с помощью слайсеров. Стало визуально приятно и удобно. НО я не мог писать объяснения в самом пивоте. Таким образом, что мы получаем. Есть пивот с сравнениями тех или иных данных с примененными к этому пивоту слайсерами. И я хочу непосредственно в этом пивоте писать объяснения к разницам. То есть, чтобы при переключении менялось и объяснение.
Сергей, cпасибо Вам огромное. Не могли бы Вы заодно подсказать, по поводу функции Choose, которые Вы использовали в данном файле. Если на первой странице увеличить список, то CHOOSE($A2;с1;с2;с3) надо как-то изменять? Вопрос, скорее всего глупый, но я никогда не работал с данными функциями (choose, sumproduct)
Upd. уже понял - с1 с2 с3 это названия диапазонов прошу прощения
Возможно ответ на этот вопрос уже где-то есть на форуме, но я не нашел, так что извините. Подскажите, пожалуйста, как в sumifs написать формулу с горизонтальными и вертикальными условиями? в прилагаемом файлике необходимо со страницы номер 2 на первую затянуть числовую информацию по датам, в зависимости от условия AK, DL или OS. Как бы я ни писал формулу, мне постоянно выдаёт #VALUE
видимо проблема какая-то в сетке была (залаги или еще что-то) - с третьего раза открылся нормально доступ и запустились макросы... странно. Извините за отнятое время
ну вот я шарил через review -> share document. Поставил галочку на там, что я разрешаю всё, он мне матюкается, что нельзя править и смотреть макросы. Сохраняю, захожу опять и уже ничего не даблкликается. В документе код прописан под страничку 2 и модуль 1 есть
Подскажите, пожалуйста, возможно ли каким-то образом расшарить .xlsm документ (лежит на сервере), чтобы при этом работали макросы? То есть люди заходят и могут делать даблклик по задаче и начинается отсчет времени (стало возможным благодаря товарищу ikki, см. Прошлая тема).
Подскажите, пожалуйста, что необходимо поменять в предоставленном Вами макросе, чтобы можно было запускать несколько таймеров сразу? Ибо если запускаешь другую задачу, то предыдущий отсчет времени останавливается и начинается новый. Необходимо запускать этот отсчет сразу в нескольких задачах
суть в том - что будет список задач (больше сотни) допустим я захожу - запускаю задачу (идет отсчет времени), что-то там поделал, остановил, закрыл документ. Потом открываю - и запускаю с того же времени на котором остановился. и нужны кнопки в самом экселе.
что-то типа такого, только с более расширенными возможностями. Чтобы я смог проставить кнопки секундомера на уже готовый список задач в готовом документе.
Вопрос у меня сложный (касаемо исполнения) Подскажите, пожалуйста выполнима ли просьба или направьте куда обратиться (русские/зарубежные форумы специализированные) Что необходимо: учёт времени. Как я это вижу - в прикрепленном ниже файле. Плюс должна быть возможность продолжения учета: допустим я что-то делал, нажал "стоп" - время затраченное 7 минут. Повторно нажимаю "старт" и учет продолжается с этих 7 минут.
Доброе утро. Воспользовался Вашим макросом на добавление разных документов в 1
Код
Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer
Application.ScreenUpdating = False 'отключаем обновление экрана для скорости
'вызываем диалог выбора файлов для импорта
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="All files (*.*), *.*", _
MultiSelect:=True, Title:="Files to Merge"
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "Не выбрано ни одного файла!"
Exit Sub
End If
'проходим по всем выбранным файлам
x = 1
While x <= UBound(FilesToOpen)
Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
importWB.Close savechanges:=False
x = x + 1
Wend
Application.ScreenUpdating = True
End Sub
когда добавляешь его через insert module - всё отлично работает. Но когда сохраняешь в Personal Macro Workbook и добавляешь в строку быстрого доступа - он багается и ругается на эту строку
макрорекордер для данных целей не помогал. Sanja, спасибо, но ответ я получил уже на зарубежном форуме (аналог планете эксель)
вот что прислали
Код
Sub FormatSheet()
Dim sh As Worksheet
Application.ScreenUpdating = False
For Each sh In ActiveWorkbook.Worksheets
On Error Resume Next
For i = 1 To 8
sh.Columns.Ungroup
Next i
On Error GoTo 0
With sh.Cells
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.WrapText = False
.MergeCells = False
End With
With sh.Cells.Font
.ColorIndex = xlAutomatic
.Size = 8
.Name = "Arial"
End With
sh.Cells.Interior.Pattern = xlNone
sh.Cells.EntireColumn.AutoFit
sh.Cells.EntireRow.AutoFit
Next sh
Application.ScreenUpdating = True
End Sub
С макросами в экселе я столкнулся недавно из-за специфики работы (необходимо облегчить ежедневные задачи). В макросах я полное дно, без понятия как их писать - умею только добавить и нажать Play
Собственно что нужно в макросе (операция повторяется на 150+ листах): - unmerge all cells in all sheets (не знаю как по русски - по идее отменить объединение всех клеток) - unwrap all text in all sheets (не знаю как по-русски называется) - цвет шрифта - автомат (на всех страницах) - заливка - нет заливки (на всех страницах) - размер шрифта 8 (все страницы) - шрифт Arial (все страницы) - Без границ (все страницы) - то есть убрать все таблички - Автоформат ширини и высоты всех столбцов и строк (все страницы) - снять многоуровневую группировку колонок (B:и до конца) - уровный обычно не больше 8 (все страницы)
Если не получится всё это сделать в 1 макросе, то необходимо (критично!!!) сделать макрос для данной операции: снять многоуровневую группировку всех колонок, на всех страницах (обычно 150+). Уровней группировки не больше 8