0 / 0 / 0
Регистрация: 23.11.2020
Сообщений: 27
1
Excel

Неправильно работает IF в VBA и удаление строк в диапазоне

06.12.2020, 12:31. Показов 2227. Ответов 13

Author24 — интернет-сервис помощи студентам
Доброе время суток, уважаемые форумчане и коллеги!

Написал код для калькулятора расчета рейтингов. Однако, я был бы не я, если бы мой код работал as intended.

В данном случае, следующие проблемы:

1. Не работающий IF (если):

• «K1» повторяется дважды: в ячейках «С25» и «С48», притом значение в «С25» неправильное. Должно возвращаться только значение в ячейке «С48»
• Доля Ф/Л повторяется дважды: в ячейках «С33» и «С46», притом значение в «С33» неправильное. Должно возвращаться только значение в ячейке «С46»
• Значение «Покрытие ОКУ» в ячейке «С30» неправильное

Вот часть кода, которая, по-моему содержит ошибки:


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
'Повышающие факторы
 
 
If K1Result = 2 Or K1Result = 1.5 Then
Range("C25").Value = VR(K1TextBox.Text)
End If
 
If K4Result = 2 Or K4Result = 1.5 Then
Range("C26").Value = VR(K4TextBox.Text)
End If
 
If ProsrochkaResult = 2 Or ProsrochkaResult = 1.5 Then
Range("C27").Value = VR(ProsrochkaTextBox)
End If
 
If APLResult = 1.5 Then
Range("C27").Value = Val(x)
End If
 
If ProsrochkaResult = 2 Or ProsrochkaResult = 1.5 Then
Range("C28").Value = VR(ProsrochkaTextBox)
End If
 
If NPLResult = 2 Or NPLResult = 1.5 Then
Range("C29").Value = VR(NPLTextBox.Text)
End If
 
If OKUResult = 2 Or OKUResult = 1.5 Then
Range("C30").Value = OKUTextBox
End If
 
If RostAktivovResult = 2 Or RostAktivovResult = 1.5 Then
Range("C31").Value = RostAktivovTextBox
End If
 
If RostSpResult = 1.5 Then
Range("C32").Value = RostspTextBox
End If
 
If FLResult = 1.5 Then
CellFL = FLperTextBox
Range("C33").Value = CellFL
End If
 
If SIFIResult = 0.5 Or SIFIResult = 1 Then
Range("C34").Value = RazmerBox1
End If
 
If DefaultTextBox = 0 Then
Range("C35").Value = "Не было дефолта"
End If
 
If AdjPcTextBox = 0.15 Then
Range("C36").Value = "Высокий рейтинг родительской организации"
End If
 
If AdjPcTextBox = 0.1 Then
Range("C36").Value = "Средний рейтинг родительской организации"
End If
 
If AdjPcTextBox = 0.05 Then
Range("C36").Value = "Низкий рейтинг родительской организации"
End If
 
 
'Нейтральные факторы
 
If K1Result = 1 Then
Range("C38").Value = VR(K1TextBox.Text)
End If
 
If K4Result = 1 Then
Range("C39").Value = VR(K4TextBox.Text)
End If
 
If APLResult = 1 Then
Range("C40").Value = VR(x)
End If
 
If ProsrochkaResult = 1 Then
Range("C41").Value = VR(ProsrochkaTextBox)
End If
 
If NPLResult = 1 Then
Range("C42").Value = VR(NPLTextBox.Text)
End If
 
If OKUResult = 1 Then
Range("C43").Value = OKUTextBox
End If
 
If RostAktivovResult = 1 Then
Range("C44").Value = RostAktivovTextBox
End If
 
If RostSpResult = 1 Then
Range("C45").Value = RostspTextBox
End If
 
If FLResult = 1 Then
CellFL = FLperTextBox
Range("C46").Value = CellFL
End If
'Понижающие
 
If K1Result = 0.5 And K1Result = 0 Then
Range("C48").Value = VR(K1TextBox.Text)
End If
 
If K4Result = 0.5 And K4Result = 0 Then
Range("C49").Value = VR(K4TextBox.Text)
End If
 
If APLResult = 0.5 And APLResult = 0 Then
Range("C50").Value = VR(x)
End If
 
If ProsrochkaResult = 0.5 And ProsrochkaResult = 0 Then
Range("C51").Value = VR(ProsrochkaTextBox)
End If
 
If NPLResult = 0.5 And NPLResult = 0 Then
Range("C52").Value = VR(NPLTextBox.Text)
End If
 
If OKUResult = 0.5 And OKUResult = 0 Then
Range("C53").Value = OKUTextBox
End If
 
If RostAktivovResult = 0.5 And RostAktivovResult = 0 Then
Range("C54").Value = RostAktivovTextBox
End If
 
If RostSpResult = 0.5 And RostSpResult = 0 Then
Range("C55").Value = RostspTextBox
End If
 
If FLResult = 0.5 And FLResult = 0 Then
CellFL = FLperTextBox
Range("C56").Value = CellFL
End If
 
If SIFIResult = 0 Then
Range("C57").Value = RazmerBox1
End If
 
If DefaultTextBox = -0.025 Then
Range("C58").Value = "Нефинансовая помощь государства"
End If
 
If DefaultTextBox = -0.05 Then
Range("C58").Value = "Дефолт"
End If
 
If AdjPcTextBox = 0 Then
Range("C59").Value = "Нет Родительской Организации"
End If

Заранее извиняюсь за проблемы с кириллицей (хотя Excel файле на нескольких компьютерах открывается без кваказябр)



Во всех случаях неправильного значения, возвращается почти что всегда 1.

Перепробовал разные тестовые данные, но проблема остается.

2. Удаление строк:

Ну и последняя проблема – я взял с интернета код для удаления строк в заданном диапазоне (range) если определенные ячейке пустые. Пробовал менять диапазон – не выходит.

Вот код

Python
1
2
3
4
5
6
7
8
9
10
Sub sbVBS_To_Delete_Blank_Rows_In_Range()
 
 
Dim iCntr
Dim rng As Range
Set rng = Range("Ñ25:C60")
 
    For iCntr = rng.Row + rng.Rows.Count - 1 To rng.Row Step -1
        If Application.WorksheetFunction.CountA(Rows(iCntr)) = 0 Then Rows(iCntr).EntireRow.Delete
    Next
В Архиве – сам файл и тестовые данные к нему
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2020, 12:31
Ответы с готовыми решениями:

Поиск по конкретному слову в конкретном диапазоне работает неправильно
Задаю поиск по конкретному слову в конкретном диапазоне и все это зацикливаю, но Excel находит не...

Удаление пустых строк в диапазоне
Ребят, у меня опять проблемы по невнимательности. Написал тут Private Sub CommandButton1_Click()...

Функция в VBA Excel работает неправильно.
Привет ! при попытке присвоить значение ячейке функция выдаёт #ЗНАЧ! Public Function функция()...

Удаление пустых строк в определенном диапазоне
Ситуация следующая: есть, например, таблица - некоторые строки в ней заполнены, некоторые пустые....

13
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
06.12.2020, 13:50 2
NauanS,
Архив не прикреплен

Добавлено через 1 минуту
NauanS,
Кто писал вам код?

Добавлено через 1 минуту
Если вы сами- то вопросов, которые вы выставили ( кроме последнего) не возникло бы.

Добавлено через 1 минуту
Посмотрите ваше условие строка 106 и внимательно подумайте, что здесь не так..
Цитата Сообщение от NauanS Посмотреть сообщение
If K1Result = 0.5 And K1Result = 0 Then
Range("C48").Value = VR(K1TextBox.Text)
End If
If K4Result = 0.5 And K4Result = 0 Then
Range("C49").Value = VR(K4TextBox.Text)
End If
If APLResult = 0.5 And APLResult = 0 Then
Range("C50").Value = VR(x)
End If
Добавлено через 1 минуту
Как может быть истиной выражение ?
X=0.5 И X=0
1
0 / 0 / 0
Регистрация: 23.11.2020
Сообщений: 27
06.12.2020, 13:53  [ТС] 3
Narimanych, код писался коллективно

Вижу ошибку в коде). Спасибо!

Прикладываю архив к сообщению
Вложения
Тип файла: zip Калькулятор и тестовые данные.zip (55.7 Кб, 7 просмотров)
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
06.12.2020, 13:58 4
NauanS,
Цитата Сообщение от NauanS Посмотреть сообщение
сли определенные ячейке пустые.
Какие?
0
0 / 0 / 0
Регистрация: 23.11.2020
Сообщений: 27
06.12.2020, 14:02  [ТС] 5
Python
1
С2560
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
06.12.2020, 14:17 6
Лучший ответ Сообщение было отмечено NauanS как решение

Решение

NauanS,
Цитата Сообщение от NauanS Посмотреть сообщение
код для удаления строк в заданном диапазоне (range)
Цитата Сообщение от NauanS Посмотреть сообщение
С25:С60

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub MMM()
Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("Калькулятор")
       For i = 60 To 25 Step -1
            If IsEmpty(Cells(i, 3)) Then
             If Not Cells(i, 3).MergeCells Then Rows(i).Delete
            End If
       Next
    End With
 Application.ScreenUpdating = True
End Sub
1
0 / 0 / 0
Регистрация: 23.11.2020
Сообщений: 27
06.12.2020, 14:37  [ТС] 7
Я обновил файл согласно вашим рекомендациям, теперь нет проблем со значениями, но строчки не удаляются. Приложил обновленный файл
Вложения
Тип файла: rar Калькулятор и тестовые данный New.rar (55.7 Кб, 9 просмотров)
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
06.12.2020, 15:56 8
Цитата Сообщение от NauanS Посмотреть сообщение
но строчки не удаляются.
- расскажите как Вы этот код вызываете, я не нашёл.
Но в любом случае строки удаляются, если его поместить в стандартный модуль.
Только строка
Visual Basic
1
    With ThisWorkbook.Sheets("Калькулятор")
смысла не имеет, т.к. в коде не используется.
1
0 / 0 / 0
Регистрация: 23.11.2020
Сообщений: 27
06.12.2020, 16:17  [ТС] 9
Цитата Сообщение от Hugo121 Посмотреть сообщение
- расскажите как Вы этот код вызываете, я не нашёл.
Но в любом случае строки удаляются, если его поместить в стандартный модуль.
Только строка
Я думал это в том же userform оставить

Мне просто нужно чтобы ТОЛЬКО после расчета всех показателей, удалялись пустые строчки

Добавлено через 45 секунд
Цитата Сообщение от NauanS Посмотреть сообщение
Мне просто нужно чтобы ТОЛЬКО после расчета всех показателей, удалялись пустые строчки
Как это как раз сделать?

Куда нужно вставлять код?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
06.12.2020, 17:35 10
Ну можно и там оставить, только вызов макроса сделайте, и укажите на каком листе будете применять. Правильно укажите!

Добавлено через 5 минут
Проверил, работает - всего лишь добавил вызов на форме и точки в код.
Visual Basic
1
2
3
            If IsEmpty(.Cells(i, 3)) Then
                If Not .Cells(i, 3).MergeCells Then .Rows(i).Delete
            End If
1
Catstail
06.12.2020, 17:47
  #11

Не по теме:

Цитата Сообщение от NauanS Посмотреть сообщение
Не работающий IF
- срочно сообщите в Microsoft! В VBA ошибка!

0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
06.12.2020, 18:27 12
Лучший ответ Сообщение было отмечено NauanS как решение

Решение

NauanS,
Цитата Сообщение от NauanS Посмотреть сообщение
Куда нужно вставлять код?
Посмотрите файл:
Вложения
Тип файла: rar Calculator MainFrame - New Rev1.rar (41.6 Кб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 23.11.2020
Сообщений: 27
07.12.2020, 08:21  [ТС] 13
Спасибо!
Сработало!
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
07.12.2020, 09:33 14
NauanS,
Цитата Сообщение от NauanS Посмотреть сообщение
Спасибо!
Сработало!
Велкоме
0
07.12.2020, 09:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2020, 09:33
Помогаю со студенческими работами здесь

Удаление строк, не содержащих нужного значения в выбранном диапазоне
Подскажите, пожалуйста, ни у кого нет такого макроса: Выделяется диапазон, например, N1:N20. В...

Неправильно работает удаление из файла
Нужно чтобы удаляло найденные данные, а удаляет всё, кроме найденного вот кусочек кода: ...

Неправильно работает удаление записей
Здравствуйте. Есть несложный код для добавления и удаления записей из БД, но когда нажимается...

Случайное число в VBA без повтора в диапазоне, работает по нажатию кнопки
Недавно начал изучение и использование VBA в Power Point. Возникла задача: нужно чтобы по нажатию...

Удаление строк в Excel на VBA.
Прошу помощи у специалистов. Есть массив (2 столбца) на одном листе. Со временем в одном столбце...

Почему неправильно работает удаление символов из строки?
const g=; var s : string; i : integer; d : integer; begin readln (s); d := length (s);...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru