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

Вход

Регистрация

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

 

= Мир MS Excel/Если в ячейке минус, то минус перенести в другую ячейку - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Если в ячейке минус, то минус перенести в другую ячейку (Макросы/Sub)
Если в ячейке минус, то минус перенести в другую ячейку
Yar4i Дата: Среда, 21.09.2016, 07:25 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Доброе утро дамы и господа.
Если ячейка F5 (как в приложенном файле) содержит минус, этот минус нужно перенести в E5.
Если F4 содержит минус, то этот минус переносится в E4, даже если там уже есть минус.
Искал, но сложно объяснить поисковику перенос минуса.
К сообщению приложен файл: 9679036.xlsx (13.2 Kb)
 
Ответить
СообщениеДоброе утро дамы и господа.
Если ячейка F5 (как в приложенном файле) содержит минус, этот минус нужно перенести в E5.
Если F4 содержит минус, то этот минус переносится в E4, даже если там уже есть минус.
Искал, но сложно объяснить поисковику перенос минуса.

Автор - Yar4i
Дата добавления - 21.09.2016 в 07:25
китин Дата: Среда, 21.09.2016, 07:36 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Доброго и вам. а так не прокатит?
Код
=ABS(F2)
К сообщению приложен файл: 333111.xlsx (14.0 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеДоброго и вам. а так не прокатит?
Код
=ABS(F2)

Автор - китин
Дата добавления - 21.09.2016 в 07:36
buchlotnik Дата: Среда, 21.09.2016, 07:41 | Сообщение № 3
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Как-то так: [vba]
Код
Sub minus()
Set sh1 = Sheets("минус")
Set sh2 = Sheets("итог")

For i = 2 To sh1.Cells(2, 5).End(xlDown).Row
    If sh1.Cells(i, 6) < 0 Then
       sh2.Cells(i, 6) = Abs(sh1.Cells(i, 6))
       sh2.Cells(i, 5) = -Abs(sh1.Cells(i, 5))
    Else
       sh2.Cells(i, 6) = sh1.Cells(i, 6)
       sh2.Cells(i, 5) = sh1.Cells(i, 5)
    End If
Next
End Sub
[/vba]

Игорь
, там ещё и столбец E минусить надо
К сообщению приложен файл: 9679036.xls (46.5 Kb)


Сообщение отредактировал buchlotnik - Среда, 21.09.2016, 07:42
 
Ответить
СообщениеКак-то так: [vba]
Код
Sub minus()
Set sh1 = Sheets("минус")
Set sh2 = Sheets("итог")

For i = 2 To sh1.Cells(2, 5).End(xlDown).Row
    If sh1.Cells(i, 6) < 0 Then
       sh2.Cells(i, 6) = Abs(sh1.Cells(i, 6))
       sh2.Cells(i, 5) = -Abs(sh1.Cells(i, 5))
    Else
       sh2.Cells(i, 6) = sh1.Cells(i, 6)
       sh2.Cells(i, 5) = sh1.Cells(i, 5)
    End If
Next
End Sub
[/vba]

Игорь
, там ещё и столбец E минусить надо

Автор - buchlotnik
Дата добавления - 21.09.2016 в 07:41
_Boroda_ Дата: Среда, 21.09.2016, 07:52 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В соседних колонках можно формулы
Код
=ЕСЛИ(ЗНАК(E2)=ЗНАК(F2);E2;-ABS(E2))
и, как уже Игорь выше написал, ABS
Если нужно в тех же колонках, то только макросом
К сообщению приложен файл: 9679036_1.xlsx (14.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ соседних колонках можно формулы
Код
=ЕСЛИ(ЗНАК(E2)=ЗНАК(F2);E2;-ABS(E2))
и, как уже Игорь выше написал, ABS
Если нужно в тех же колонках, то только макросом

Автор - _Boroda_
Дата добавления - 21.09.2016 в 07:52
Yar4i Дата: Четверг, 22.09.2016, 08:51 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Спасибо.
Немного изменил под свои нужды и не знаю насколько это правильно:
[vba]
Код
Sub minus()
Set sh1 = Sheets("минус")
Set sh2 = Sheets("минус")                             'в том же листе
For i = 1 To sh1.Cells(1, 5).End(xlDown).Row    'с первой строки
    If sh1.Cells(i, 6) < 0 Then
       sh2.Cells(i, 6) = Abs(sh1.Cells(i, 6))
       sh2.Cells(i, 5) = -Abs(sh1.Cells(i, 5))
    Else
       sh2.Cells(i, 6) = sh1.Cells(i, 6)
       sh2.Cells(i, 5) = sh1.Cells(i, 5)
    End If
Next
End Sub
[/vba]
Сначала не понял почему в первой ячейке не менялось))) думал что нашел редкое число не подвластное макросу. Потом увидел
[vba]
Код
For i = 2 To sh1.Cells(2, 5).End(xlDown).Row
[/vba]
***
теперь точно разобрался (две двойки надо было изменить)
К сообщению приложен файл: minus.xls (36.5 Kb)


Сообщение отредактировал Yar4i - Четверг, 22.09.2016, 09:13
 
Ответить
СообщениеСпасибо.
Немного изменил под свои нужды и не знаю насколько это правильно:
[vba]
Код
Sub minus()
Set sh1 = Sheets("минус")
Set sh2 = Sheets("минус")                             'в том же листе
For i = 1 To sh1.Cells(1, 5).End(xlDown).Row    'с первой строки
    If sh1.Cells(i, 6) < 0 Then
       sh2.Cells(i, 6) = Abs(sh1.Cells(i, 6))
       sh2.Cells(i, 5) = -Abs(sh1.Cells(i, 5))
    Else
       sh2.Cells(i, 6) = sh1.Cells(i, 6)
       sh2.Cells(i, 5) = sh1.Cells(i, 5)
    End If
Next
End Sub
[/vba]
Сначала не понял почему в первой ячейке не менялось))) думал что нашел редкое число не подвластное макросу. Потом увидел
[vba]
Код
For i = 2 To sh1.Cells(2, 5).End(xlDown).Row
[/vba]
***
теперь точно разобрался (две двойки надо было изменить)

Автор - Yar4i
Дата добавления - 22.09.2016 в 08:51
_Boroda_ Дата: Четверг, 22.09.2016, 09:35 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
не знаю насколько это правильно:
Нуу, в принципе правильно. Почти. Но есть кое-что лишнее.

1. Вот так Cells(1, 5).End(xlDown).Row лучше не делать. Сотрите значения в какой-нибудь строке в середине (например, в Е14:F14) и посмотрите, что получится.
Эта запись эквивалентна такой последовательности действий: Встать в ячейку Е5 и нажать Контрл + СтрелкаВниз. Обычно таким образом Вы попадаете в ячейку, которая находится перед ПЕРВОЙ пустой.
Но лучше делать немного иначе - встать в последнюю ячейку столбца Е и нажать Контрл + СтрелкаВверх. Тогда Вы попадаете в ячейку, которая находится перед ПОСЛЕДНЕЙ пустой. Если таблица всегда полностью заполнена, то разницы нет, но лучше не рисковать.

2. Если у Вас все действо происходит на одном листе и макрос запускается с этого же листа (в момент запуска макроса этот лист активен), то имена листов вообще не нужны (см. макрос "Минус"), если макрос запускается из произвольного листа этой книги, то см. макрос "Минус1".

3. Поскольку в случае неотрицательного F мы вообще ничего не делаем, то кусок кода Else ... не нужен.

[vba]
Код
Sub minus()
    For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
        If Cells(i, 6) < 0 Then
           Cells(i, 6) = -Cells(i, 6)
           Cells(i, 5) = -Abs(Cells(i, 5))
        End If
    Next
End Sub
'=====================================
Sub minus1()
    With Sheets("минус")
        For i = 1 To .Range("F" & Rows.Count).End(xlUp).Row
            If .Cells(i, 6) < 0 Then
               .Cells(i, 6) = -.Cells(i, 6)
               .Cells(i, 5) = -Abs(.Cells(i, 5))
            End If
        Next
    End With
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
не знаю насколько это правильно:
Нуу, в принципе правильно. Почти. Но есть кое-что лишнее.

1. Вот так Cells(1, 5).End(xlDown).Row лучше не делать. Сотрите значения в какой-нибудь строке в середине (например, в Е14:F14) и посмотрите, что получится.
Эта запись эквивалентна такой последовательности действий: Встать в ячейку Е5 и нажать Контрл + СтрелкаВниз. Обычно таким образом Вы попадаете в ячейку, которая находится перед ПЕРВОЙ пустой.
Но лучше делать немного иначе - встать в последнюю ячейку столбца Е и нажать Контрл + СтрелкаВверх. Тогда Вы попадаете в ячейку, которая находится перед ПОСЛЕДНЕЙ пустой. Если таблица всегда полностью заполнена, то разницы нет, но лучше не рисковать.

2. Если у Вас все действо происходит на одном листе и макрос запускается с этого же листа (в момент запуска макроса этот лист активен), то имена листов вообще не нужны (см. макрос "Минус"), если макрос запускается из произвольного листа этой книги, то см. макрос "Минус1".

3. Поскольку в случае неотрицательного F мы вообще ничего не делаем, то кусок кода Else ... не нужен.

[vba]
Код
Sub minus()
    For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
        If Cells(i, 6) < 0 Then
           Cells(i, 6) = -Cells(i, 6)
           Cells(i, 5) = -Abs(Cells(i, 5))
        End If
    Next
End Sub
'=====================================
Sub minus1()
    With Sheets("минус")
        For i = 1 To .Range("F" & Rows.Count).End(xlUp).Row
            If .Cells(i, 6) < 0 Then
               .Cells(i, 6) = -.Cells(i, 6)
               .Cells(i, 5) = -Abs(.Cells(i, 5))
            End If
        Next
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 22.09.2016 в 09:35
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Если в ячейке минус, то минус перенести в другую ячейку (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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