#excel #string #excel-formula
#преуспеть #строка #excel-формула
Вопрос:
Я пытаюсь добавить «## секунды» или «## минуты» из ячеек со строками в них.
Струны | Желаемый результат |
---|---|
Ходите 30 секунд быстро | 30 секунд |
Бег трусцой 9 минут медленно | 9 минут |
Бегите очень быстро 1 минута | 1 минута |
Я могу построить формулу, чтобы получить число или меру, но я не смог создать одну формулу, чтобы сделать и то, и другое? Кто-нибудь может помочь?
Ответ №1:
Как насчет:
Так что вы можете легко вставить ее:
IFERROR(TRIM(MID(A3,FIND("min",A3,1)-3,10)),TRIM(MID(A3,FIND("sec",A3,1)-3,10)))
Ошибка iferror сначала проверяет минуты, а затем секунды.
Обрезка избавляет от начальных или конечных пробелов в зависимости от того, является ли число однозначным или двузначным.
Mid() и find() вырезают нужную часть. Я использовал только «min» и «sec» Вместо «минут» и т. Д., Как если бы была опечатка «minites», например, она не была бы найдена.
Разберите ее на части, чтобы увидеть каждый бит…
Комментарии:
1. @Gary’S Student Ну, я собирался сказать, что это метод «грубой силы», но все равно спасибо 🙂 Как и ваш UDF, и я предполагаю, что «длительность» зарезервирована, поэтому вы использовали «длительность»?
2. Мне очень нравится ваша формула. Вы правы
duration()
— это стандартная функция Excel.3. Солар Майк: ты справился. Я изменил формулу, чтобы я мог искать термины (секунды, минуты, часы и другие) из списка слов, и это работает отлично! Спасибо. Вот модифицированная формула, в которой СПИСОК представляет собой диапазон слов для поиска: =IFERROR(TRIM(MID(A1,FIND(INDEX(LIST,MATCH(1,COUNTIF(A1,» «amp;LISTamp;» «),0)),A127,1)-3,10)),»»)
Ответ №2:
Рассмотрим следующую определяемую пользователем функцию:
Option Explicit
Public Function durration(s As String) As String
Dim t As String, arr, i As Long
t = LCase(s)
durration = ""
If InStr(t, "minute") = 0 Then
If InStr(t, "second") = 0 Then
Exit Function
End If
End If
arr = Split(s, " ")
For i = LBound(arr) 1 To UBound(arr)
t = LCase(arr(i))
If t = "minute" Or t = "minutes" Or t = "second" Or t = "seconds" Then
durration = arr(i - 1) amp; " " amp; arr(i)
Exit Function
End If
Next i
End Function
Пользовательские функции (UDF) очень просты в установке и использовании:
- ALT-F11 вызывает окно VBE
- ALT-I ALT-M открывает новый модуль
- вставьте содержимое и закройте окно VBE
Если вы сохраните книгу, UDF будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем 2003, вы должны сохранить файл как .xlsm, а не .xlsx
Чтобы удалить UDF:
- откройте окно VBE, как указано выше
- очистите код
- закройте окно VBE
Для использования UDF из Excel:
=durration(a1)
Чтобы узнать больше о макросах в целом, см.:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
и
http://msdn.microsoft.com/en-us/library/ee814735 (v=office.14).aspx
а для получения более подробной информации об UDFS см.:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Для этого должны быть включены макросы!
Ответ №3:
-Получить позицию первого числа в строке:
AGGREGATE(15,6,FIND(ROW($1:$9),A1 amp; " "),1)
-Получить индекс пробела после minute[s] or second[s]
в строке:
AGGREGATE(15,6,FIND(" ",A1amp;" ",SEARCH({"second","minute"}, A1amp;" ")),1)
Используйте функцию MID, эта формула работает для меня:
=MID(A1 amp; " ",AGGREGATE(15,6,FIND(ROW($1:$9),A1 amp; " "),1),
AGGREGATE(15,6,FIND(" ",A1amp;" ",SEARCH({"second","minute"}, A1amp;" ")),1)-
AGGREGATE(15,6,FIND(ROW($1:$9),A1 amp; " "),1)
)
-Причина использования A1 amp; " "
заключается в том, чтобы избежать несуществующих пробелов после minute[s] or second[s]
Комментарии:
1. Ну, функционально похоже на мое, но, похоже, намного больше ввода…
2. Привет @SolarMike, ты был прав, похоже, я все усложнил =)
3. Однако этот агрегат настолько гибкий, что его нужно использовать чаще.