Макрос Эксель работает через раз

Автор Посетитель 27.09.2024, 27 сентября 2024, 14:05

Посетитель 27.09.2024

Люди, ПАМАГИТИ!!!!
Не могу понять в чем дело. В теле макроса несколько циклов. Некоторые выполняет корректно, а некоторые пропускает. В чем дело? Вот часть макроса:

Код
j = 2
For i = 1 To 300
Worksheets("ПРОБА").Activate
If ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value = 1.1 Then
  Worksheets("СводнаяМИКРО").Activate
  Cells(j, 3) = ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value
  Cells(j, 2) = ThisWorkbook.Sheets("ПРОБА").Range("B" & i).Value
  Cells(j, 1) = ThisWorkbook.Sheets("ПРОБА").Range("A" & i).Value
  j = j + 1
  Else:
  i = i + 1
  End If
  Next (Эта часть работает)

j = 2
For i = 1 To 300
Worksheets("ПРОБА").Activate
If ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value = 1.2 Then
  Worksheets("СводнаяМИКРО").Activate
  Cells(j, 5) = ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value
  Cells(j, 6) = ThisWorkbook.Sheets("ПРОБА").Range("B" & i).Value
    Cells(j, 7) = ThisWorkbook.Sheets("ПРОБА").Range("A" & i).Value
  j = j + 1
  Else:
  i = i + 1
  End If
  Next (А эту почему-то не выводит).
[свернуть]
И таких циклов много. И практически все через один пропущены.

Администратор

Написал вам два письма на почту с заголовком "Письмо с Форума по VBA и MS Office". Написал именно на почту, а не на форум.

На листе ПРОБА в столбце C есть число 1.2? Может быть оно записано по другому?
В коде макроса число пишется через точку, но в русском Экселе число должно быть с запятой.
Может быть число записано не как число, а как текст (на это будет указывать зелёный треугольник в ячейке).

Администратор

После Else зачем нужно двоеточие?
Стандартная конструкция (которая в справке) If...Then пишется так:
If ... Then
Else
End If

Двоеточия здесь нет. Можете посмотреть это в справке.

Опишите словами (без использования программного кода), что должен делать это код:
j = 2
For i = 1 To 300
Worksheets("ПРОБА").Activate
If ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value = 1.2 Then
  Worksheets("СводнаяМИКРО").Activate
  Cells(j, 5) = ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value
  Cells(j, 6) = ThisWorkbook.Sheets("ПРОБА").Range("B" & i).Value
    Cells(j, 7) = ThisWorkbook.Sheets("ПРОБА").Range("A" & i).Value
  j = j + 1
  Else:
  i = i + 1
  End If
  Next

Посетитель 27.09.2024

VBA не занимался ОЧЕНЬ давно - следовательно и не помню многого.

Суть данного мероприятия в том, что имеется таблица с данными. В которой студенты находятся на разных уровнях: 1.1  1.2  1.3 и т.п.  Допустим
Иванов 1.1
Петров 1.2
Сидоров 1.1
И с помощью кнопки в новой таблице выводилась некоторая сортировка типа:
Иванов 1.1      Петров 1.2
Сидоров 1.1
Рассортировать в столбцы по уровням короче. Вот как-то так.

На счет запятой и точки - у всех одинаковые стоят. Он и не дает по другому ставить. Просто зачем-то один выводит, а другой - нет.

Администратор

На листе ПРОБА в столбце C есть число 1.2? Может быть оно записано по другому?
В коде макроса число пишется через точку, но в русском Экселе число должно быть с запятой.
Может быть число записано не как число, а как текст (на это будет указывать зелёный треугольник в ячейке).

Администратор

Может быть в ячейке кроме числа 1.2 есть ещё пробелы. Пользователь их не видит.
1.2 и как записано в ячейку? Так и записано с точкой: 1.2? В ячейке есть зелёный треугольник, что в ячейке ошибка?

Посетитель 27.09.2024

Короче вот эта беда. Работа пока с таблицей Микроэлектроника. В таблицу проба выводится поименно последний результат. После этого в таблицу СводнаяМИКРО должно быть расфасовано по столбикам (уровням). Может сами код просмотрите и поймете, где я накосячил? Был формат ячеек общий. Поменял на числовой - не помогло. Заранее спасибо!)

Посетитель 27.09.2024

Выводит через запятую. Ошибки не выводит.

Администратор

В файле на листе СводнаяМИКРО, в столбце C только 1,1.
У вас вопрос про 1.2, значит вам надо предоставить пример, где есть 1.2. И не просто предоставить такой файл, а на этом файле должна быть проблема, о которой вы написали в сообщении 1.

Администратор

На листе ПРОБА в столбце C записано 2,1, а в коде вы пишите 1.2.
Цифры местами переставлены.

Посетитель 27.09.2024

Ну там много столбцов должно быть. от 1.1, 1.2, 1.3 1.4, 2.1, 2.2, 2.3, 2.4, 3.1. В программе на ВБА написан цикл для каждого из них. НО выводит почему-то не все. В сводную должна выводиться итоговая информация из макроса. Но она почему-то информацию одних столбцов выводит, а других - нет....

Администратор

Предоставьте файл, в котором есть 1.2 и в котором проблема.
Поясните, на каком листе посмотреть 1.2.

Посетитель 27.09.2024

Так..... Попробую еще раз объяснить.

В файле, который я скинул есть лист Микроэлектроника. Оттуда берутся данные результатов студентов (1.1, 1.2..... 2,1....3,1) и записываются в лист Проба. В одну общую таблицу. Далее из Таблицы проба необходимо в лист СводнаяМИКРО раскидать результаты студентов по соответствующим столбцам.

Собственно в этом-то и проблема, что в таблицу ПРОБА все результаты переносятся и 1,1 и 1,2 и т.п., а в СводнаяМИКРО не все, а только некоторые.

Администратор

Да, увидел, на листе есть 1,2, как должно быть. Значит проблема в другом.

В этом коде зачем после Else увеличиваете переменную i? Для какой цели вы это придумали?

For i = 1 To 300
    Worksheets("ПРОБА").Activate
    If ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value = 1.2 Then
        Worksheets("СводнаяМИКРО").Activate
        Cells(j, 5) = ThisWorkbook.Sheets("ПРОБА").Range("A" & i).Value
        Cells(j, 6) = ThisWorkbook.Sheets("ПРОБА").Range("B" & i).Value
        Cells(j, 7) = ThisWorkbook.Sheets("ПРОБА").Range("C" & i).Value
        j = j + 1
    Else
        i = i + 1
    End If
Next

Посетитель 27.09.2024

Добрый день. Что бы пустые строки пропускал. Да в принципе я ее убрал. Убрал и двоеточие после Else. Не помогло.