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

Вход

Регистрация

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

 

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

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

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

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

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


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

Автор - китин
Дата добавления - 21.09.2016 в 07:36
buchlotnik Дата: Среда, 21.09.2016, 07:41 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2049
Репутация: 613 ±
Замечаний: 0% ±

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(46Kb)


платная помощь:
ЯД: 410012595572239; WM: 311017577133
buchlotnik@mail.ru


Сообщение отредактировал 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
Группа: Модераторы
Ранг: Экселист
Сообщений: 9374
Репутация: 3947 ±
Замечаний: 0% ±

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


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
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
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 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(36Kb)


Сообщение отредактировал 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
Группа: Модераторы
Ранг: Экселист
Сообщений: 9374
Репутация: 3947 ±
Замечаний: 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 из 11
Поиск:

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