Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 3
1

Как записать вложенный оператор If внутри другого оператора If, чтобы добиться нужного эффекта?

15.08.2014, 13:05. Показов 5446. Ответов 5
Метки нет (Все метки)

Добрый день, подскажите пожалуйста почему не правильно отрабатывает макрос?

Суть задачи, есть ячейки вида
73Ане
_4Саше
44Диме
61Леше
_4Лере
11Ивану
пустая ячейка означает это один и тот же товар но под разных покупателей. количество товара это сумма 3+4 = 7
но например ниже
61Леше
_4Лере
4+1 это 5, а в ячейке написано 6, 1 товар значит ложится на склад, и макрос должен добавить пустую строку. вычислить остаток склада и дописать его. Должно получиться что то
33Ане
44Саше
44Диме
11Леше
44Лере
11склад
11Ивану

Макрос работает, но выражение Else cell5.Offset(1, 0).EntireRow.Insert отрабатывает сразу. как бы относя его к первому оператору
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub Макрос1() 
 ' заполняет пустые ячейки выделенного диапазона
    Columns("D:D").Select
    Dim cell5 As Range, ra5 As Range
    ' ограничиваем выделенный диапазон используемой областью листа
   Set ra5 = Intersect(Selection, ActiveSheet.UsedRange)
 
    If ra5 Is Nothing Then
        MsgBox "В выделенном диапазоне нет пустых ячеек!", _
               vbExclamation, "Нечего заполнять"
    Else
        Application.ScreenUpdating = False    ' отключаем обновление экрана
 
        ' перебираем все ячейки в выделенном диапазоне
       For Each cell5 In ra5.Cells
            ' если ячейка не ранва соседней ячейке, делаем следующее
           If cell5.Value <> cell5.Offset(0, -1).Value Then
                                                         If Trim(cell5.Offset(1, -1)) = "" Then cell5.Offset(1, -1) = cell5.Offset(0, -1).Value - cell5.Value
                                                         Else
                                                         cell5.Offset(1, 0).EntireRow.Insert
                                                         'cell5.Insert Shift:=xlDown
                                                         cell5.Offset(1, -1).Value = cell5.Offset(0, -1).Value - cell5.Value
                                                         cell5.Offset(1, 0).Value = cell5.Offset(0, -1).Value - cell5.Value
                                                         End If
                                                         cell5.Offset(0, -1).Value = cell5.Value
      Next cell5
   End If
 
End Sub
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2014, 13:05
Ответы с готовыми решениями:

Как добиться эффекта, чтобы ссылки занимали свободное место ячейки равномерно?
как добиться эффекта чтобы ссылки занимали свобдоное место ячейки равномерно скрин ниже

Как добиться эффекта SpeedButton
Всем привет!!!!! Подскажите пж Как добиться эффекта SpeedButton (кнопка в делфи) нажимаешь и у...

Как добиться эффекта рельефности изображения?
Доброго времени суток. При работе с графикой возникли проблемы с пониманием сути задания. Имеется...

Как добиться такого эффекта на фотографии?
Нашел в сети фото интересное,не подскажите как такой эффект &quot;мультяшности&quot; получить или может...

5
6848 / 2786 / 525
Регистрация: 19.10.2012
Сообщений: 8,494
15.08.2014, 14:32 2
Оно к первом у относится:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
    For Each cell5 In ra5.Cells
        ' если ячейка не ранва соседней ячейке, делаем следующее
        If cell5.Value <> cell5.Offset(0, -1).Value Then
            If Trim(cell5.Offset(1, -1)) = "" Then cell5.Offset(1, -1) = cell5.Offset(0, -1).Value - cell5.Value
        Else
            cell5.Offset(1, 0).EntireRow.Insert
            'cell5.Insert Shift:=xlDown
            cell5.Offset(1, -1).Value = cell5.Offset(0, -1).Value - cell5.Value
            cell5.Offset(1, 0).Value = cell5.Offset(0, -1).Value - cell5.Value
        End If
        cell5.Offset(0, -1).Value = cell5.Value
    Next cell5
1
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 3
15.08.2014, 14:46  [ТС] 3
А как мне побороть, оно должно быть во втором операторе
0
6848 / 2786 / 525
Регистрация: 19.10.2012
Сообщений: 8,494
15.08.2014, 14:57 4
Так запишите во второй.
Так что ли хотите?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    For Each cell5 In ra5.Cells
        ' если ячейка не ранва соседней ячейке, делаем следующее
        If cell5.Value <> cell5.Offset(0, -1).Value Then
            If Trim(cell5.Offset(1, -1)) = "" Then
                cell5.Offset(1, -1) = cell5.Offset(0, -1).Value - cell5.Value
            Else
                cell5.Offset(1, 0).EntireRow.Insert
                'cell5.Insert Shift:=xlDown
                cell5.Offset(1, -1).Value = cell5.Offset(0, -1).Value - cell5.Value
                cell5.Offset(1, 0).Value = cell5.Offset(0, -1).Value - cell5.Value
            End If
        End If
        cell5.Offset(0, -1).Value = cell5.Value
    Next cell5
1
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 3
15.08.2014, 15:36  [ТС] 5
Да Да Да. End If всему виной невнимательность. спасибо

Добавлено через 12 минут
Подскажите мне еще, как можно в моем алгоритме перебирать ячейки начиная со второй
0
6848 / 2786 / 525
Регистрация: 19.10.2012
Сообщений: 8,494
15.08.2014, 15:59 6
Лучший ответ Сообщение было отмечено tit как решение

Решение

Всему виной не end if, а неумение применять if then else end if.
"как можно в моем алгоритме перебирать ячейки начиная со второй" - в общем никак.
Но если добавить счётчик ячеек и ещё один if then else end if - тогда можно. Когда счётчик=1 то ничего не делаем, в остальных случаях делаем.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2014, 15:59

Как добиться эффекта закругления с градиентом без использования js?
Здравствуйте, скидываю принтскрин одного из заданий. Это календарь, который создавался при помощи...

Как добиться такого эффекта? Простая обработка портрета под карандаш
Подскажите, как добиться такого эффекта? Не получается кистью отрисовать. Где бы найти готовую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.