Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Meluzina
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 7
#1

Не работает код в макросе - VBA/Excel

20.04.2018, 11:43. Просмотров 232. Ответов 19

Есть исходная программа, которая выделяет данные из одной таблицы и копирует в другую. Всего в таблице три месяца, исходная выделяет только из марта. Мне нужно сделать аналогичное,разве что с апрелем. Но код почему то нормально копирует только вторую строку, а из первого только одно значение, хотя по идее код аналогичен. Что не так, почему он не работает?
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
Sub Кнопка1_Щелчок()
'Таблица для марта
j_m = 10
'Определение даты заказа
For i = 10 To 40 ' счетчик. будет выполнено 31 раз. всего дне в месяце 31. т. е. каждое оборот цикла  - это обрашение к одной ячейке столбца.
    If ActiveSheet.Cells(i, 3).Value = ActiveSheet.Cells(3, 9).Value Then ' если значение активной ячейки строки i, столбец 3 равно значению активной ячейки 3 строки 9 стобца, проще говоря 1000,Тогда
        ActiveSheet.Cells(10, j_m).Value = ActiveSheet.Cells(i, 2).Value ' значение активной ячейки 10 строки j_m равно значению активной ячейки i строки 2 столбца
        j_m = j_m + 1
    End If
Next i ' переход следующему
'Определение даты доставки. Все полностью аналогично, только строка записи результата иная.
j_m = 10
For i = 10 To 40
    If ActiveSheet.Cells(i, 3).Value = ActiveSheet.Cells(3, 7).Value Then
        ActiveSheet.Cells(11, j_m).Value = ActiveSheet.Cells(i, 2).Value
        j_m = j_m + 1
    End If
Next i
'Определение месяца и форматирование заголовка с названием месяца. формирует диапазон и название благодаря значениям в ячейках результата.
ActiveSheet.Cells(9, 10).Value = MonthName(Month(ActiveSheet.Cells(11, j_m - 1).Value)) ' значение активной ячейки 9 10 равно (MonthName - функция, возращающая название месяца)
Range(ActiveSheet.Cells(9, 10), ActiveSheet.Cells(9, j_m - 1)).Select ' выбрать и сформировать как диапазон от ячйки 9 10 до ячейки 9 13
Selection.Merge ' выбор и объединение
'Форматирование таблицы
Range(ActiveSheet.Cells(9, 10), ActiveSheet.Cells(11, j_m - 1)).Select 'объеденили как диапазон всю таблицу марта
'Выравнивание
With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
End With
'Установка шрифта
With Selection.Font
        .Name = "Times New Roman"
        .Size = 10
End With
'Установка границ
With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
 End With
 
 'Таблица для апреля
j_а = 13
'Определение даты заказа
For i = 10 To 40 ' счетчик. будет выполнено 31 раз. всего дне в месяце 31. т. е. каждое оборот цикла  - это обрашение к одной ячейке столбца.
    If ActiveSheet.Cells(i, 5).Value = ActiveSheet.Cells(3, 9).Value Then ' если значение активной ячейки строки i, столбец 3 равно значению активной ячейки 3 строки 9 стобца, проще говоря 1000,Тогда
        ActiveSheet.Cells(10, j_а).Value = ActiveSheet.Cells(i, 4).Value ' значение активной ячейки 10 строки j_m равно значению активной ячейки i строки 2 столбца
        j_a = j_a + 1
    End If
Next i ' переход следующему
'Определение даты доставки. Все полностью аналогично, только строка записи результата иная.
j_a = 13
For i = 10 To 40
    If ActiveSheet.Cells(i, 5).Value = ActiveSheet.Cells(3, 7).Value Then
        ActiveSheet.Cells(11, j_a).Value = ActiveSheet.Cells(i, 4).Value
        j_a = j_a + 1
    End If
Next i
'Определение месяца и форматирование заголовка с названием месяца. формирует диапазон и название благодаря значениям в ячейках результата.
ActiveSheet.Cells(9, 14).Value = MonthName(Month(ActiveSheet.Cells(11, j_a - 1).Value)) ' значение активной ячейки 9 10 равно (MonthName - функция, возращающая название месяца)
Range(ActiveSheet.Cells(9, 14), ActiveSheet.Cells(9, j_a - 1)).Select ' выбрать и сформировать как диапазон от ячйки 9 10 до ячейки 9 13
Selection.Merge ' выбор и объединение
'Форматирование таблицы
Range(ActiveSheet.Cells(9, 14), ActiveSheet.Cells(11, j_a - 1)).Select 'объеденили как диапазон всю таблицу марта
'Выравнивание
With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
End With
'Установка шрифта
With Selection.Font
        .Name = "Times New Roman"
        .Size = 10
End With
'Установка границ
With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
 End With
 
ActiveSheet.Cells(9, 9).Select ' активная ячейка после всего цикла
End Sub
0
Вложения
Тип файла: xlsx 3.xlsx (12.9 Кб, 3 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2018, 11:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Excel Не работает код в макросе (VBA):

Друзья! не работает код с версией файла в 2003 офисе, на 2010 все работает, суть: копирование из закрытой книги
Sub Zagruzka_dannyh() UserForm1.Label117.Visible = False...

Друзья! не работает код с версией файла в 2003 офисе, на 2010 все работает, суть: копирование из закрытой книги
Sub Zagruzka_dannyh() UserForm1.Label117.Visible = False...

Ошибка в Макросе
Написал Макрос Sub AfterMarket() 'Rows("1:1").Select 'Selection.Delete...

Ошибка в макросе
Добрый день, Подскажите где ошибка в моем макросе

Ошибка в макросе
Помогите, пожалуйста, определить ошибку в макросе и исправить ее. Sub ÔÓ() ...

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

19
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 12:25 #2
100 раз говорилось - используйте Option Explicit!

Добавлено через 15 минут
Если не поняли - это ответ и решение
0
Meluzina
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 7
20.04.2018, 12:30  [ТС] #3
Нет, не прояснило
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 12:31 #4
Как это не прояснило? Не можете проанализировать свои переменные?
0
Meluzina
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 7
20.04.2018, 12:35  [ТС] #5
Оно выдает ошибку, когда вставляю Option Explicit)
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 12:37 #6
Естественно - оно требует объявлять переменные. Объявляйте - увидите свою ошибку. И более такого допускать не будете. Надеюсь
0
Meluzina
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 7
20.04.2018, 12:47  [ТС] #7
Он на саму команду ругается)
0
Миниатюры
Не работает код в макросе  
shanemac51
Модератор
Эксперт MS Access
7768 / 2986 / 423
Регистрация: 07.08.2010
Сообщений: 8,141
Записей в блоге: 1
20.04.2018, 13:04 #8
не туда вставили

Option Explicit должно быть первой в модуле
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 14:00 #9
Это ведь гуглится на раз
0
fever brain
oh my god
1100 / 574 / 108
Регистрация: 05.01.2016
Сообщений: 1,764
Записей в блоге: 7
20.04.2018, 15:50 #10
а что не работает-то
мне не хочется рассматривать кучу кода который скопипастен из макродела
проще самому написать если знать цель задачи, что там даты проставить в колонку ?
или найти должника ? ))
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 17:30 #11
Да там просто "a" с "а" перепутано. Или наоборот, не изучал...
А вообще конечно код требует оптимизации, но в принципе всё работает, если в переменных порядок навести.

Добавлено через 2 минуты
Их там всего кажется 3
0
fever brain
oh my god
1100 / 574 / 108
Регистрация: 05.01.2016
Сообщений: 1,764
Записей в блоге: 7
20.04.2018, 17:49 #12
код переполнен форматированием и украшательствами таблицы
это делается в последнюю очередь, для того чтобы обратиться на серьезный форум
нужно дать функциональную часть

вот код.. вот надо вычислить тото и тото ..

или своими словами хотяб рассказать

1 ставим даты
2 устанавливаем кредиторов
3 регестрируем должников и ставим из на счетчик ... чтото в этом роде
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 18:46 #13
Не, глянул ещё чуть - есть ещё косяки.
Нужно задавать
Visual Basic
1
j_а = j_m
2 раза

P.S. Обнаружил что в моей переменной кириллица, осторожно!
0
fever brain
oh my god
1100 / 574 / 108
Регистрация: 05.01.2016
Сообщений: 1,764
Записей в блоге: 7
20.04.2018, 18:54 #14
Цитата Сообщение от Hugo121 Посмотреть сообщение
Обнаружил что в моей переменной кириллица
Это не важно, можно использовать более ста символов ansi
в ansi есть зарезервированные символы например под чешскую кодировку
даже такое написание будет работать: ¶ = № + € + Љ + ђ

в VBA нет строгого указание на латинницу (а жаль), поэтому можно перепутать
от того и нужно обязательно ставить Option Explicit я всегда если вижу что это инструкция опущенна
то даже и не пытаюсь чтото исправлять, исправлений в этом быдлокоде может потребоваться оочень много
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 18:57 #15
Это я к тому сказал про кириллицу - что если тупо с форума копипастить в код без Option Explicit то может опять получиться как было
0
fever brain
oh my god
1100 / 574 / 108
Регистрация: 05.01.2016
Сообщений: 1,764
Записей в блоге: 7
20.04.2018, 19:01 #16
Конечно, если мне это будет жизненно необходимо тогда я выброшу все в мусорку не глядя и перепишу заново
тестируя функцию за функцией на работоспособность, деля на задачу и разные подзадачи и в конце сделал бы украшение и свистульки

пс
извиняюсь за то что много наговорил
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 19:20 #17
Наладил, чуть подчистил, убрал мигание и кириллицу в переменных.
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
Option Explicit
 
Sub Кнопка1_Щелчок()
    Dim j_m&, i&, j_a&, t
 
    Application.ScreenUpdating = False
 
    'Таблица для марта
    j_m = 10
    'Определение даты заказа
    With ActiveSheet
        t = .Cells(3, 9).Value
        For i = 10 To 40    ' счетчик. будет выполнено 31 раз. всего дне в месяце 31. т. е. каждое оборот цикла  - это обрашение к одной ячейке столбца.
            If .Cells(i, 3).Value = t Then    ' если значение активной ячейки строки i, столбец 3 равно значению активной ячейки 3 строки 9 стобца, проще говоря 1000,Тогда
                .Cells(10, j_m).Value = .Cells(i, 2).Value    ' значение активной ячейки 10 строки j_m равно значению активной ячейки i строки 2 столбца
                j_m = j_m + 1
            End If
        Next i    ' переход следующему
        'Определение даты доставки. Все полностью аналогично, только строка записи результата иная.
        j_m = 10
        t = .Cells(3, 7).Value
        For i = 10 To 40
            If .Cells(i, 3).Value = t Then
                .Cells(11, j_m).Value = .Cells(i, 2).Value
                j_m = j_m + 1
            End If
        Next i
        'Определение месяца и форматирование заголовка с названием месяца. формирует диапазон и название благодаря значениям в ячейках результата.
        .Cells(9, 10).Value = MonthName(Month(.Cells(11, j_m - 1).Value))    ' значение активной ячейки 9 10 равно (MonthName - функция, возращающая название месяца)
        Range(.Cells(9, 10), .Cells(9, j_m - 1)).Merge    ' выбрать и сформировать как диапазон от ячйки 9 10 до ячейки 9 13
 
        'Форматирование таблицы
        With Range(.Cells(9, 10), .Cells(11, j_m - 1))    'объеденили как диапазон всю таблицу марта
            'Выравнивание
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
 
            'Установка шрифта
            With .Font
                .Name = "Times New Roman"
                .Size = 10
            End With
 
            'Установка границ
            With .Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlInsideVertical)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlInsideHorizontal)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
 
        End With
 
 
        'Таблица для апреля
        j_a = j_m
        'Определение даты заказа
        t = .Cells(3, 9).Value
        For i = 10 To 40    ' счетчик. будет выполнено 31 раз. всего дне в месяце 31. т. е. каждое оборот цикла  - это обрашение к одной ячейке столбца.
            If .Cells(i, 5).Value = t Then   ' если значение активной ячейки строки i, столбец 3 равно значению активной ячейки 3 строки 9 стобца, проще говоря 1000,Тогда
                .Cells(10, j_a).Value = .Cells(i, 4).Value    ' значение активной ячейки 10 строки j_m равно значению активной ячейки i строки 2 столбца
                j_a = j_a + 1
            End If
        Next i    ' переход следующему
        'Определение даты доставки. Все полностью аналогично, только строка записи результата иная.
        j_a = j_m
        t = .Cells(3, 7).Value
        For i = 10 To 40
            If .Cells(i, 5).Value = t Then
                .Cells(11, j_a).Value = .Cells(i, 4).Value
                j_a = j_a + 1
            End If
        Next i
        'Определение месяца и форматирование заголовка с названием месяца. формирует диапазон и название благодаря значениям в ячейках результата.
        .Cells(9, 14).Value = MonthName(Month(.Cells(11, j_a - 1).Value))    ' значение активной ячейки 9 10 равно (MonthName - функция, возращающая название месяца)
        Range(.Cells(9, 14), .Cells(9, j_a - 1)).Merge    ' выбрать и сформировать как диапазон от ячйки 9 10 до ячейки 9 13
 
        'Форматирование таблицы
        With Range(.Cells(9, 14), .Cells(11, j_a - 1))    'объеденили как диапазон всю таблицу марта
            'Выравнивание
 
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
 
            'Установка шрифта
            With .Font
                .Name = "Times New Roman"
                .Size = 10
            End With
            'Установка границ
            With .Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlInsideVertical)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Borders(xlInsideHorizontal)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
        End With
 
        .Cells(9, 9).Select    ' активная ячейка после всего цикла
    End With
 
    Application.ScreenUpdating = True
End Sub
1
fever brain
oh my god
1100 / 574 / 108
Регистрация: 05.01.2016
Сообщений: 1,764
Записей в блоге: 7
20.04.2018, 19:26 #18
А я бы еще установку границ оптимизировал:
там их аж два раза
Visual Basic
1
2
3
4
5
6
7
8
9
    'Установка границ
    
    For ii = xlEdgeLeft To xlInsideHorizontal
        With Selection.Borders(ii)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
        End With
    Next
0
Hugo121
6214 / 2333 / 390
Регистрация: 19.10.2012
Сообщений: 6,914
20.04.2018, 19:30 #19
Я на это глянул, но вдруг ТС захочет где-то например двойную рамку протянуть
И вот прямо так наверное не пойдёт. Кажется туда в цикл ещё нужно with/end with воткнуть. Но не проверял.
0
fever brain
oh my god
1100 / 574 / 108
Регистрация: 05.01.2016
Сообщений: 1,764
Записей в блоге: 7
20.04.2018, 19:39 #20
Цитата Сообщение от Hugo121 Посмотреть сообщение
With ActiveSheet
это можно не делать так-как программа не переходит на другие листы и работает в кнопке
к примеру так:
Кликните здесь для просмотра всего текста

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
Sub Кнопка1_Щелчок()
    Dim j_m&, i&, j_а&, ii&
    
    'Таблица для марта
    j_m = 10
    'Определение даты заказа
    For i = 10 To 40 ' счетчик. будет выполнено 31 раз. всего дне в месяце 31. т. е. каждое оборот цикла  - это обрашение к одной ячейке столбца.
        If Cells(i, 3).Value = Cells(3, 9).Value Then ' если значение активной ячейки строки i, столбец 3 равно значению активной ячейки 3 строки 9 стобца, проще говоря 1000,Тогда
            Cells(10, j_m).Value = Cells(i, 2).Value ' значение активной ячейки 10 строки j_m равно значению активной ячейки i строки 2 столбца
            j_m = j_m + 1
        End If
    Next i ' переход следующему
    'Определение даты доставки. Все полностью аналогично, только строка записи результата иная.
    j_m = 10
    For i = 10 To 40
        If Cells(i, 3).Value = Cells(3, 7).Value Then
            Cells(11, j_m).Value = Cells(i, 2).Value
            j_m = j_m + 1
        End If
    Next i
    'Определение месяца и форматирование заголовка с названием месяца. формирует диапазон и название благодаря значениям в ячейках результата.
    Cells(9, 10).Value = MonthName(Month(Cells(11, j_m - 1).Value)) ' значение активной ячейки 9 10 равно (MonthName - функция, возращающая название месяца)
    Range(Cells(9, 10), Cells(9, j_m - 1)).Select ' выбрать и сформировать как диапазон от ячйки 9 10 до ячейки 9 13
    Selection.Merge ' выбор и объединение
    'Форматирование таблицы
    Range(Cells(9, 10), Cells(11, j_m - 1)).Select 'объеденили как диапазон всю таблицу марта
    'Выравнивание
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    'Установка шрифта
    With Selection.Font
        .Name = "Times New Roman"
        .Size = 10
    End With
    'Установка границ
    
    For ii = xlEdgeLeft To xlInsideHorizontal
        With Selection.Borders(ii)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
        End With
    Next
 
 
    
    'Таблица для апреля
    j_а = 13
    'Определение даты заказа
    For i = 10 To 40 ' счетчик. будет выполнено 31 раз. всего дне в месяце 31. т. е. каждое оборот цикла  - это обрашение к одной ячейке столбца.
        If Cells(i, 5).Value = Cells(3, 9).Value Then ' если значение активной ячейки строки i, столбец 3 равно значению активной ячейки 3 строки 9 стобца, проще говоря 1000,Тогда
            Cells(10, j_а).Value = Cells(i, 4).Value ' значение активной ячейки 10 строки j_m равно значению активной ячейки i строки 2 столбца
            j_а = j_а + 1
        End If
    Next i ' переход следующему
    'Определение даты доставки. Все полностью аналогично, только строка записи результата иная.
    j_а = 13
    For i = 10 To 40
        If Cells(i, 5).Value = Cells(3, 7).Value Then
            Cells(11, j_а).Value = Cells(i, 4).Value
            j_а = j_а + 1
        End If
    Next i
    'Определение месяца и форматирование заголовка с названием месяца. формирует диапазон и название благодаря значениям в ячейках результата.
    Cells(9, 14).Value = MonthName(Month(Cells(11, j_а - 1).Value)) ' значение активной ячейки 9 10 равно (MonthName - функция, возращающая название месяца)
    Range(Cells(9, 14), Cells(9, j_а - 1)).Select ' выбрать и сформировать как диапазон от ячйки 9 10 до ячейки 9 13
    Selection.Merge ' выбор и объединение
    'Форматирование таблицы
    Range(Cells(9, 14), Cells(11, j_а - 1)).Select 'объеденили как диапазон всю таблицу марта
    'Выравнивание
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    'Установка шрифта
    With Selection.Font
        .Name = "Times New Roman"
        .Size = 10
    End With
    'Установка границ
    
    For ii = xlEdgeLeft To xlInsideHorizontal
        With Selection.Borders(ii)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
        End With
    Next
    
    Cells(9, 9).Select ' активная ячейка после всего цикла
End Sub


Но я там особо не подчищал, только прировнял все десять j_a к одной, они там разные были с кириллицей и латинницей

Добавлено через 4 минуты
в VBA комманда есть полной компиляции, но в обычном наборе команд она отсутствует называется Compile VBAProject если есть сомнения в конфликтах переменных можно ее использовать, без запуска самого макроса
0
20.04.2018, 19:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2018, 19:39
Привет! Вот еще темы с решениями:

добавление нажатия F9 в макросе
Проблема в том, что нужно выводить сгенерированные числа в определенном...

Где ошибка в макросе?
Macros: Sub ExcelReport() Dim ExcelSheet As Object Set...

Ошибка в макросе условия
Помогите найти ошибку в макросе If Range("B" & i).Value = Empty...

Организация цикла в макросе
Помогите, пожалуйста сделать макрос! Есть файл Excel с листами «Общий», n1, n2,...


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

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

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