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

Вход

Регистрация

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

 

= Мир MS Excel/Из даты вытащить месяц! - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Из даты вытащить месяц! (Макросы/Sub)
Из даты вытащить месяц!
Kinder Дата: Воскресенье, 08.11.2015, 16:26 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 0 ±
Замечаний: 0% ±

Всем доброго дня!
В столбце (D:D) имеются данные в формате даты. Н/р: 08.11.2015
В ячейке "К7" указан только месяц в формате числа. Н/р: 11
Подскажите пожалуйста как в операторе If Bz.Range("D" & i) сделать так что бы из даты брал только месяц.

[vba]
Код
Sub raschet()
Dim i As Long
     Set Os = Worksheets("Îñíîâà")
     Set Bz = Worksheets("Áàçà")
   
   For i = 1 To Bz.Range("D1").End(xlDown).Row
   
   
            If Bz.Range("D" & i) = Os.Range("K7") Then
              MsgBox "!!!"
            End If
   Next i

End Sub
[/vba]
Спасибо.


"И все таки она вертится!"
 
Ответить
СообщениеВсем доброго дня!
В столбце (D:D) имеются данные в формате даты. Н/р: 08.11.2015
В ячейке "К7" указан только месяц в формате числа. Н/р: 11
Подскажите пожалуйста как в операторе If Bz.Range("D" & i) сделать так что бы из даты брал только месяц.

[vba]
Код
Sub raschet()
Dim i As Long
     Set Os = Worksheets("Îñíîâà")
     Set Bz = Worksheets("Áàçà")
   
   For i = 1 To Bz.Range("D1").End(xlDown).Row
   
   
            If Bz.Range("D" & i) = Os.Range("K7") Then
              MsgBox "!!!"
            End If
   Next i

End Sub
[/vba]
Спасибо.

Автор - Kinder
Дата добавления - 08.11.2015 в 16:26
Kinder Дата: Воскресенье, 08.11.2015, 17:04 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 0 ±
Замечаний: 0% ±

Благодарю за ответ.
А как это будет выглядеть с оператором If?
[vba]
Код
If Format(Bz.Range("D" & i),"mm")
[/vba]
Спасибо.

Ох... Пока вы правили свое успел настрочить)))
Еще раз спасибо.
Буду пробовать.
Совсем пропал ответ.(((


"И все таки она вертится!"

Сообщение отредактировал Kinder - Воскресенье, 08.11.2015, 17:07
 
Ответить
СообщениеБлагодарю за ответ.
А как это будет выглядеть с оператором If?
[vba]
Код
If Format(Bz.Range("D" & i),"mm")
[/vba]
Спасибо.

Ох... Пока вы правили свое успел настрочить)))
Еще раз спасибо.
Буду пробовать.
Совсем пропал ответ.(((

Автор - Kinder
Дата добавления - 08.11.2015 в 17:04
_Boroda_ Дата: Воскресенье, 08.11.2015, 17:09 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так нужно?
Я в своем первом посте написал просто вручную. Потом проверил - не работает. И удалил пост. А вот так работает. Только имена листов еще добавьте.
[vba]
Код
If --Format(Range("D1").Value, "MM") = Range("K7").Value Then
[/vba]
Еще варианты
[vba]
Код
If CByte(Format(Range("D1").Value, "MM")) = Range("K7").Value Then
[/vba]
[vba]
Код
If Format(Range("D1").Value, "MM") = Range("K7").Value & "" Then
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
Я в своем первом посте написал просто вручную. Потом проверил - не работает. И удалил пост. А вот так работает. Только имена листов еще добавьте.
[vba]
Код
If --Format(Range("D1").Value, "MM") = Range("K7").Value Then
[/vba]
Еще варианты
[vba]
Код
If CByte(Format(Range("D1").Value, "MM")) = Range("K7").Value Then
[/vba]
[vba]
Код
If Format(Range("D1").Value, "MM") = Range("K7").Value & "" Then
[/vba]

Автор - _Boroda_
Дата добавления - 08.11.2015 в 17:09
sv2014 Дата: Понедельник, 09.11.2015, 01:09 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Kinder, доброго времени суток,вариант с UDF

[vba]
Код
Sub raschet1(): Dim i%: i = 1
If yyy(Range("D" & i)) = Range("K7") Then MsgBox "text" 'добавить листы
End Sub
[/vba]

[vba]
Код
Function yyy(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
     yyy = CInt(.Execute(t)(1).Value)
End With
End Function
[/vba]
 
Ответить
СообщениеKinder, доброго времени суток,вариант с UDF

[vba]
Код
Sub raschet1(): Dim i%: i = 1
If yyy(Range("D" & i)) = Range("K7") Then MsgBox "text" 'добавить листы
End Sub
[/vba]

[vba]
Код
Function yyy(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
     yyy = CInt(.Execute(t)(1).Value)
End With
End Function
[/vba]

Автор - sv2014
Дата добавления - 09.11.2015 в 01:09
Kinder Дата: Понедельник, 09.11.2015, 15:28 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 0 ±
Замечаний: 0% ±

Спасибо за ответы.
Возник вопрос - правильно ли я понял, что в записи:
[vba]
Код


If --Format(Range("D1").Value, "MM") = Range("K7").Value Then
[/vba]
два минуса позволяют использовать функцию?
Перед тем как создать эту тему, пробовал своими силами. Нашел функцию "МЕСЯЦ".
Пробовал применить так:
[vba]
Код
If MONTH(Bz.Range("D" & i)) = Range("K7") Then
[/vba]
начал ругаться что вроде у меня процедура "Sub" а надо в шапке делать как функцию.
Спасибо.


"И все таки она вертится!"
 
Ответить
СообщениеСпасибо за ответы.
Возник вопрос - правильно ли я понял, что в записи:
[vba]
Код


If --Format(Range("D1").Value, "MM") = Range("K7").Value Then
[/vba]
два минуса позволяют использовать функцию?
Перед тем как создать эту тему, пробовал своими силами. Нашел функцию "МЕСЯЦ".
Пробовал применить так:
[vba]
Код
If MONTH(Bz.Range("D" & i)) = Range("K7") Then
[/vba]
начал ругаться что вроде у меня процедура "Sub" а надо в шапке делать как функцию.
Спасибо.

Автор - Kinder
Дата добавления - 09.11.2015 в 15:28
_Boroda_ Дата: Понедельник, 09.11.2015, 19:30 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
два минуса позволяют использовать функцию?
Не совсем. почитайте здесь http://www.excelworld.ru/publ/hacks/tricks/17-1-0-9. Там для функций. Но для макросов принцип тот же.

[vba]
Код
А Sub tt()
    If Month(Range("D1")) = Range("K7").Value Then
        d = 5
    End If
End Sub
[/vba]
прекрасно работает. Это Вы где-то еще в макросе по дороге накосячили.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
два минуса позволяют использовать функцию?
Не совсем. почитайте здесь http://www.excelworld.ru/publ/hacks/tricks/17-1-0-9. Там для функций. Но для макросов принцип тот же.

[vba]
Код
А Sub tt()
    If Month(Range("D1")) = Range("K7").Value Then
        d = 5
    End If
End Sub
[/vba]
прекрасно работает. Это Вы где-то еще в макросе по дороге накосячили.

Автор - _Boroda_
Дата добавления - 09.11.2015 в 19:30
Kinder Дата: Вторник, 10.11.2015, 17:03 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 0 ±
Замечаний: 0% ±

Огромное спасибо за ответ.
Получается, - в VBA я могу использовать любую функцию.
Единственно, нужно правильно её указать?
Просто я раньше работал через макрорекодер. Там автоматом менялся стиль ячеек. И функция записывалась в кавычках.
Спасибо.


"И все таки она вертится!"
 
Ответить
СообщениеОгромное спасибо за ответ.
Получается, - в VBA я могу использовать любую функцию.
Единственно, нужно правильно её указать?
Просто я раньше работал через макрорекодер. Там автоматом менялся стиль ячеек. И функция записывалась в кавычках.
Спасибо.

Автор - Kinder
Дата добавления - 10.11.2015 в 17:03
_Boroda_ Дата: Вторник, 10.11.2015, 22:46 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Кирилл, есть функции, встроенные в VBA, а есть функции Excel, записанные в VBA. Это немного разные вещи. Алгоритмы расчета и выводимые результаты в большинстве случаев совпадают, но могут быть и разными. Сравните
[vba]
Код
    Range("A2") = Day(Range("D1")) & " " & Month(Range("D1")) & " " & Year(Range("D1"))
    Range("A1").Formula = "=Day(D1)&"" ""&Month(D1)&"" ""& Year(D1)"
[/vba]
Для пустой D1 первая даст 30 декабря 1899г., а вторая 0 (нулевое) января 1900г. И совпадать они начнут только с 61-го дня (1 марта 1900г.) - в Excel ошибочно есть 29/02/1900, а в VBA такой даты нет.
Ну это так, в качестве примера различий.
Еще пример различий - в D6 у нас " ss ss " (без кавычек)
[vba]
Код
    Range("E6").FormulaR1C1 = "=TRIM(RC[-1])"
    Range("E7") = Trim(Range("D6"))
[/vba]
Функция Excel TRIM - это обычная СЖПРОБЕЛЫ. Даст нам "s s". А вот функция VBA Trim уберет только начальные и конечные пробелы и итог будет вот такой - "s s".


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКирилл, есть функции, встроенные в VBA, а есть функции Excel, записанные в VBA. Это немного разные вещи. Алгоритмы расчета и выводимые результаты в большинстве случаев совпадают, но могут быть и разными. Сравните
[vba]
Код
    Range("A2") = Day(Range("D1")) & " " & Month(Range("D1")) & " " & Year(Range("D1"))
    Range("A1").Formula = "=Day(D1)&"" ""&Month(D1)&"" ""& Year(D1)"
[/vba]
Для пустой D1 первая даст 30 декабря 1899г., а вторая 0 (нулевое) января 1900г. И совпадать они начнут только с 61-го дня (1 марта 1900г.) - в Excel ошибочно есть 29/02/1900, а в VBA такой даты нет.
Ну это так, в качестве примера различий.
Еще пример различий - в D6 у нас " ss ss " (без кавычек)
[vba]
Код
    Range("E6").FormulaR1C1 = "=TRIM(RC[-1])"
    Range("E7") = Trim(Range("D6"))
[/vba]
Функция Excel TRIM - это обычная СЖПРОБЕЛЫ. Даст нам "s s". А вот функция VBA Trim уберет только начальные и конечные пробелы и итог будет вот такой - "s s".

Автор - _Boroda_
Дата добавления - 10.11.2015 в 22:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Из даты вытащить месяц! (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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