This is one of those things that I’m sure there’s a built-in function for (and I may well have been told it in the past), but I’m scratching my head to remember it.
How do I loop through each row of a multi-column range using Excel VBA? All the tutorials I’ve been searching up seem only to mention working through a one-dimensional range…
asked Sep 22, 2009 at 23:53
1
Dim a As Range, b As Range
Set a = Selection
For Each b In a.Rows
MsgBox b.Address
Next
answered Sep 23, 2009 at 0:19
MikeMike
2,9751 gold badge18 silver badges14 bronze badges
0
Something like this:
Dim rng As Range
Dim row As Range
Dim cell As Range
Set rng = Range("A1:C2")
For Each row In rng.Rows
For Each cell in row.Cells
'Do Something
Next cell
Next row
answered Sep 22, 2009 at 23:58
David AndresDavid Andres
31.2k7 gold badges45 silver badges36 bronze badges
1
Just stumbled upon this and thought I would suggest my solution. I typically like to use the built in functionality of assigning a range to an multi-dim array (I guess it’s also the JS Programmer in me).
I frequently write code like this:
Sub arrayBuilder()
myarray = Range("A1:D4")
'unlike most VBA Arrays, this array doesn't need to be declared and will be automatically dimensioned
For i = 1 To UBound(myarray)
For j = 1 To UBound(myarray, 2)
Debug.Print (myarray(i, j))
Next j
Next i
End Sub
Assigning ranges to variables is a very powerful way to manipulate data in VBA.
answered Dec 9, 2015 at 1:33
tc_NYCtc_NYC
1921 gold badge2 silver badges11 bronze badges
1
In Loops, I always prefer to use the Cells
class, using the R1C1 reference method, like this:
Cells(rr, col).Formula = ...
This allows me to quickly and easily loop over a Range of cells easily:
Dim r As Long
Dim c As Long
c = GetTargetColumn() ' Or you could just set this manually, like: c = 1
With Sheet1 ' <-- You should always qualify a range with a sheet!
For r = 1 To 10 ' Or 1 To (Ubound(MyListOfStuff) + 1)
' Here we're looping over all the cells in rows 1 to 10, in Column "c"
.Cells(r, c).Value = MyListOfStuff(r)
'---- or ----
'...to easily copy from one place to another (even with an offset of rows and columns)
.Cells(r, c).Value = Sheet2.Cells(r + 3, 17).Value
Next r
End With
answered Aug 20, 2015 at 16:50
LimaNightHawkLimaNightHawk
6,5033 gold badges40 silver badges60 bronze badges
0
Hi, I am trying to create a macro that has a loop which copies a function down column 1 (VOL) and another function down column 2 (CAPACITY) for each Station. This is what I have so far:
Sub TieOut()
Dim i As Integer
Dim j As Integer
For i = 1 To 3
For j = 1 To 3
Worksheets("TieOut").Cells(i, j).Value = "'=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A9,"m/dd/yyyy"),'ZaiNet Data'!$C$1:$C$39038,0), 4)"
Next j
Next i
End Sub
The picture of what I WANT is below: You can see that I have manually copied and pasted my two functions down each column. I just need a macro that can loop through it.
The function I want to be looped down the VOL column for each Station is:
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 4)
The function I want to be looped down the CAPACITY column for each Station is:
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 5)
Could someone please help? Thank you!
UPDATE
****How can I make the loop run automatically without having to manually enter the formula into the first two cells and click on macro?
Also how can I make the loop run through all the columns/rows? (horizontically)****
I included two screen shots to show what I mean. Below is my current code.
Thanks!
Sub Loop3()
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
Dim i As Integer
Dim j As Integer
With Worksheets("Loop")
i = 1
Do Until .Cells(10, i).Value = "blank"
For j = 1 To 10
.Cells(j, i).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),4)"
.Cells(j, i + 1).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),5)"
Next j
i = i + 2
Loop
End With
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
End Sub
Добрый день. Нужна помощь в создании макроса, а точнее цикла. Я в этом деле новенький и пока есть проблемы и пробелы в знания. Есть скрипт для работы в SAP. Его необходимо вставить в макрос и что б макрос по очереди брал данные из строк с листа EXCEL. Я это вижу так. В скрипте есть переменные типа n1.n2.n3.n4….. Все они находятся в первой строке таблицы. Макрос берет скрипт с переменными в первой строке, выполняет все действия из скрипта и переходит к второй строке (переменные стоят в тех же столбцах но на одну строку ниже) берет их, опять вставляет в скрипт и выполняет его. И так весь цикл пока данные не кончатся. Количество строк может меняться. От 200 и до 1000. За любую помощь буду очень благодарен. |
|
Roman M Пользователь Сообщений: 58 |
Добрый день. А почему не использовать этот скрипт в макросе ? Почему именно в скрипт вставлять переменные ? |
Roman M
, Наверное я не очень корректно описал проблему. Скрипт должен быть в макросе и при запуске макроса скрипт должен по очереди брать данные из таблицы. Скрипт взял данные из первой строки сделал все действия потом данные из второй строки и так по кругу. |
|
Roman M Пользователь Сообщений: 58 |
Т.е. вам нужен пример скрипта в Excel, который что-то делал бы в SAP? |
Mershik Пользователь Сообщений: 8277 |
Evgenii Kov, спрошу так ? ЗАЧЕМ ЗДЕСЬ УПОМИНАНИЕ SAP? Вам нужно работа в файле EXCEL? ЦИКЛЫ ТУТ если какой-то конкретный вопрос — то ознакомитесь с правилами там есть что почитать (про файл-пример например) Изменено: Mershik — 02.10.2020 15:31:26 Не бойтесь совершенства. Вам его не достичь. |
Roman M, нет. С САПом у меня все нормально. Нужен макрос который будет построчно брать данные с листа экселя (с каждым новым циклом смещаться на одну строку вниз) и подставлять их в скрипт в места где стоят переменные типа n1. n2. n3. |
|
Mershik, SAP вписал машинально. спасибо за ссылку. Буду пробовать искать подходящий. Файл пример скинуть нет возможности. Он на рабочем компе. Там все заблокировано. Изменено: Evgenii Kov — 02.10.2020 15:33:41 |
|
Mershik Пользователь Сообщений: 8277 |
#8 02.10.2020 15:38:33 плохо прочитали там файл-пример, а не Ваш рабочий документ…
Не бойтесь совершенства. Вам его не достичь. |
||
Roman M Пользователь Сообщений: 58 |
У вас есть скрипт (.vbs ?), который что-то делает и вам в него нужно передать переменные из Excel? |
Да. и что переменные после каждого цикла брались со следующей строки. |
|
Roman M Пользователь Сообщений: 58 |
#11 02.10.2020 16:10:18 Будет примерно так В Excel макрос
В скрипте добавляете в начале
и дальше в скрипте подставляете эти переменные. К модераторам: тему можно поменять на «Передать циклом переменные в скрипт/vbs» |
||||
Roman M
спасибо. буду пробовать. |
|
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#13 02.10.2020 16:55:27
этот
я бы не был так уверен. Поэтому Roman M и обратился к модераторам По вопросу: уверены, что хорошая идея передавать из приложения переменные в скриптовый файл? Почему не сделать всё из Excel? Будет и проще, и быстрее, и надёжнее Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||||
Evgenii Kov Пользователь Сообщений: 56 |
#14 02.10.2020 17:15:01 Jack Famous, у меня все в Excel. есть макрос в который вставлен скрипт. Макрос заходит в САП, идет по шагам скрипта, в нужных шагах вставляет данные с листа Excel (данные расположены в виде строк). Когда скрипт заканчивается он должен вернутся в начало и опять идти по темже шагам скрипта только брать данные из стоки ниже. И так по кругу. Некоторые шаги типа session.findById(«wnd[0]») я заменю на переменные.
Изменено: Evgenii Kov — 05.10.2020 08:03:51 |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Evgenii Kov, код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение. |
Evgenii Kov Пользователь Сообщений: 56 |
#16 05.10.2020 19:03:14 Roman M, Пожалуйста, подскажите где ошибка ))
|
||
Evgenii Kov Пользователь Сообщений: 56 |
#17 05.10.2020 19:06:45 Jack Famous, я попробовал добавить все в макрос. и вот что получилось. работать не хочет. уже не знаю что делать. |
Перебор строк по условию с помощью цикла (макрос) |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Прошу не ругаться и помидорами не кидаться. Я новичок.
Имеются записи (столбец E)
Source
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1
В столбец D необходимо записать значение из массива (TQX, LQM и так далее) если строка содержит элемент массива.
Не могу понять, как написать цикл, чтобы он перебирал все строки в столбце E и искал в них один из элементов массива.
При нахождении элемента в ячейку D заносил найденый элемент массива. Ну и при отсутствии такового записывал в ячейку D пометку, что нет совпадений.
D: E:
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
LQM HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Arr()
Sheets(«DATA»).Select
Range(«E1»).Select
Selection.CurrentRegion.Select
KolStpData = Selection.Rows.Count ‘количество строк.
Dim myArray As Variant
Dim txt As String
Dim i As Long
myArray = Array(«TQX», «NS3», «LQM», «ND2», «LDG», «LBES», «FDGS», «TMRS», «TRC», «LWC», «LBE», «NS2», «TOM», «TDX», «LWX», «LDM»)
Range(«D2»).Select
For i = 1 To KolStpData — 1
Dim sStr As String
sStr = myArray(0)
pStr = Range(«E» & i + 1)
If InStr(1, pStr, sStr, vbTextCompare) > 0 Then
ActiveCell.FormulaR1C1 = myArray(0)
Else
ActiveCell.FormulaR1C1 = «———-!»
End If
ActiveCell.Offset(1, 0).Select
Next
Прошу не ругаться и помидорами не кидаться. Я новичок.
Имеются записи (столбец E)
Source
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1
В столбец D необходимо записать значение из массива (TQX, LQM и так далее) если строка содержит элемент массива.
Не могу понять, как написать цикл, чтобы он перебирал все строки в столбце E и искал в них один из элементов массива.
При нахождении элемента в ячейку D заносил найденый элемент массива. Ну и при отсутствии такового записывал в ячейку D пометку, что нет совпадений.
D: E:
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
LQM HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Arr()
Sheets(«DATA»).Select
Range(«E1»).Select
Selection.CurrentRegion.Select
KolStpData = Selection.Rows.Count ‘количество строк.
Dim myArray As Variant
Dim txt As String
Dim i As Long
myArray = Array(«TQX», «NS3», «LQM», «ND2», «LDG», «LBES», «FDGS», «TMRS», «TRC», «LWC», «LBE», «NS2», «TOM», «TDX», «LWX», «LDM»)
Range(«D2»).Select
For i = 1 To KolStpData — 1
Dim sStr As String
sStr = myArray(0)
pStr = Range(«E» & i + 1)
If InStr(1, pStr, sStr, vbTextCompare) > 0 Then
ActiveCell.FormulaR1C1 = myArray(0)
Else
ActiveCell.FormulaR1C1 = «———-!»
End If
ActiveCell.Offset(1, 0).Select
Next
Сообщение Прошу не ругаться и помидорами не кидаться. Я новичок.
Имеются записи (столбец E)
Source
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1
В столбец D необходимо записать значение из массива (TQX, LQM и так далее) если строка содержит элемент массива.
Не могу понять, как написать цикл, чтобы он перебирал все строки в столбце E и искал в них один из элементов массива.
При нахождении элемента в ячейку D заносил найденый элемент массива. Ну и при отсутствии такового записывал в ячейку D пометку, что нет совпадений.
D: E:
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
LQM HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Arr()
Sheets(«DATA»).Select
Range(«E1»).Select
Selection.CurrentRegion.Select
KolStpData = Selection.Rows.Count ‘количество строк.
Dim myArray As Variant
Dim txt As String
Dim i As Long
myArray = Array(«TQX», «NS3», «LQM», «ND2», «LDG», «LBES», «FDGS», «TMRS», «TRC», «LWC», «LBE», «NS2», «TOM», «TDX», «LWX», «LDM»)
Range(«D2»).Select
Источник
VBA Excel. Цикл For Each… Next
Цикл For Each… Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For Each… Next.
Цикл For Each… Next в VBA Excel предназначен для выполнения блока операторов по отношению к каждому элементу из группы элементов (диапазон, массив, коллекция). Этот замечательный цикл применяется, когда неизвестно количество элементов в группе и их индексация, в противном случае, более предпочтительным считается использование цикла For…Next.
Синтаксис цикла For Each… Next
В квадратных скобках указаны необязательные атрибуты цикла For Each… Next.
Компоненты цикла For Each… Next
Компонент | Описание |
---|---|
element | Обязательный атрибут в операторе For Each, необязательный атрибут в операторе Next. Представляет из себя переменную, используемую для циклического прохода элементов группы (диапазон, массив, коллекция), которая предварительно должна быть объявлена с соответствующим типом данных*. |
group | Обязательный атрибут. Группа элементов (диапазон, массив, коллекция), по каждому элементу которой последовательно проходит цикл For Each… Next. |
statements | Необязательный** атрибут. Операторы вашего кода. |
Exit For | Необязательный атрибут. Оператор выхода из цикла до его окончания. |
*Если цикл For Each… Next используется в VBA Excel для прохождения элементов коллекции (объект Collection) или массива, тогда переменная element должна быть объявлена с типом данных Variant, иначе цикл работать не будет.
**Если не использовать в цикле свой код, смысл применения цикла теряется.
Примеры циклов For Each… Next
Цикл для диапазона ячеек
На активном листе рабочей книги Excel выделите диапазон ячеек и запустите на выполнение следующую процедуру:
Информационное окно MsgBox выведет адреса выделенных ячеек и их содержимое, если оно есть. Если будет выбрано много ячеек, то полностью информация по всем ячейкам выведена не будет, так как максимальная длина параметра Prompt функции MsgBox составляет примерно 1024 знака.
Цикл для коллекции листов
Скопируйте следующую процедуру VBA в стандартный модуль книги Excel:
Информационное окно MsgBox выведет список наименований всех листов рабочей книги Excel по порядковому номеру их ярлычков, соответствующих их индексам.
Цикл для массива
Присвоим массиву список наименований животных и в цикле For Each… Next запишем их в переменную a. Информационное окно MsgBox выведет список наименований животных из переменной a.
Повторим ту же процедуру VBA, но всем элементам массива в цикле For Each… Next присвоим значение «Попугай». Информационное окно MsgBox выведет список наименований животных, состоящий только из попугаев, что доказывает возможность редактирования значений элементов массива в цикле For Each… Next.
Этот код, как и все остальные в этой статье, тестировался в Excel 2016.
Цикл для коллекции подкаталогов и выход из цикла
В этом примере мы будем добавлять в переменную a названия подкаталогов на диске C вашего компьютера. Когда цикл дойдет до папки Program Files, он добавит в переменную a ее название и сообщение: «Хватит, дальше читать не буду! С уважением, Ваш цикл For Each… Next.».
Информационное окно MsgBox выведет список наименований подкаталогов на диске C вашего компьютера до папки Program Files включительно и сообщение цикла о прекращении своей работы.
В результате работы программы будут выведены не только наименования подкаталогов, видимых при переходе в проводнике к диску C, но и скрытые и служебные папки. Для просмотра списка всех подкаталогов на диске C, закомментируйте участок кода от If до End If включительно и запустите выполнение процедуры в редакторе VBA Excel.
46 комментариев для “VBA Excel. Цикл For Each… Next”
Здравствуйте!
Я новичок в VBA, поэтому ,возможно, вопрос глупый, но не могу никак придумать процедуру для сравнения двух массивов с помощью цикла For Each… Next.
т.е. имеются столбцы A:B — ФИО1 Дата1 и столбцы C:D — ФИО2 Дата2. Хочу сравнить и при совпадении выделить совпадающие ячейки цветом.
Подскажите, хотя бы примерно, как это сделать.
Спасибо
Здравствуйте!
Диапазоны в примере одинаковые по размеру, но могут быть любые:
Спасибо большое, Евгений!
Я немного неправильно сформулировал.
Нужно выделить, если пары ФИО и Дата совпадают.
т.е. Иванов 1979 и Иванов 1979 выделялись, а Иванов 1979 и Иванов 1980 нет. Так же как и Иванов 1979 и Петров 1979 не нужно выделять.
Пока придумал только если создать дополнительные столбцы и в них прописать «=A1&B1» и по ним сравнивать.
Можно ли как то сделать по другому?
Можно и по-другому, попробуйте так:
Спасибо огромное. То, что нужно!
Добрый день.
Есть задача посложнее.
Лист 1 . А1 инвентарный номер (10 или 12 знаков) . В1 колличество полученных деталей.
Лист 2 . Колонка J содержит инвентарный номер (может быть несколько строк). Колонка S содержит текст внутри которого колличество полученных деталей (B1 листа 1). Колонка N содержит дату получения деталей.
Задача надо найти по данным Листа1 совпадение А1&В1 на Листе 2 данные колонки n
Здравствуйте!
Подскажите пожалуйста, как с помощью цикла For Each…Next можно выполнить задачу:
Есть диапазон со значениями, например («B1:С5»)
Нужно все значения из этого диапазона последовательно вынести в столбец A (раздельно, не в одну ячейку)
Большое спасибо!
У вас очень классный сайт, существенно мне помог разобраться в VBA Excel
Добрый день, очень часто пользуюсь информацией с Вашего сайта, но вот тут возникла задача, с которой справиться не получается, возможно вы сможете помочь.
У меня есть массив:
В данном массиве необходимо сравнить каждую ячейку с каждой из этого же массива и найти такую же цифру, только с противоположным знаком, если такой цифры с противоположным знаком нет -> (то вывести в столбик такие цифры, к которым нет противоположных), а если есть цифра с противоположным знаком -> (то ничего делать с ней не нужно).
Найденные числа записываются в первый столбец листа «Лист1». Пустые ячейки (нули) игнорируются.
Правильно ли будет отрабатываться условие «если такой цифры с противоположным знаком нет -> (то вывести в столбик такие цифры, к которым нет противоположных)» во втором цикле? Будет ложное срабатывание, когда val1=5 и val2=6, например, ведь 5<>-6.
проверяет, с какими значениями переменных закончился внутренний цикл. Если это 5 и 6, значит в массиве нет значения -5, и это не ложное, а верное срабатывание.
Добрый вечер! Подскажите, пожалуйста, как исправить проблему? Дана строка символов, и нужно определить, встречаются ли в ней 5 символов «$» и 3 символа «%»? Почему-то в любом случае результат, что «Символы не встречаются». Заранее спасибо.
Дарья, объявление переменных
А код измените следующим образом:
Здравствуйте.
Подскажите, пожалуйста, как выполнить задачу. Есть лист1. В нем столбик А с ячейками ID(заранее известно количество строк). Нужно сравнить с ячейками ID столбика А листа2 и при совпадении записать данные из столбика К листа1 в столбик D листа2 вместе с цветом ячейки. В листе2 не известно заранее сколько строк. Я написала начало, дальше не пойму как.
Здравствуйте, Елена!
Как я понял из вашего кода, просмотр начинается с 3 строки. Вот два варианта решения, где вам нужно только заменить Лист11 на Worksheets(«22.11-28.11») и Лист12 на второй ваш лист:
Спасибо большое! Первый вариант мне как-то более понятен. Т.е. теперь, чтобы передать цвет ячейки, надо дописать перед выходом из внутреннего цикла
Только это не работает.
Елена, вы правильно написали, надо добавить именно эту строку, и она работает — только что проверил. Может быть, вы в ней не поменяли названия листов?
Да работает. Просто цвета, созданные условным форматированием, не переносятся
Результат не гарантирован, так как он будет зависеть от формулировок правил условного форматирования.
Как-то частично переносит цвет.
Заметила, что и на первом листе и на втором игнорируется последняя строка. Поставила n1 + 1, n2 + 1 и все работает как надо.
Подскажите, пожалуйста,как обозначить выполнение цикла операций после проведения отбора каждого из возможных значений по одному из столбцов?
Есть массив данных(много столбцов) с разными значениями в ячейках столбца День(от 1до 31). Нужно последовательно для каждого дня вывести массив, скопировать его (отдельные части) и перенести в другую книгу. Так для каждого дня. Т.е последовательно скопировать и вставить массивы данных в другую книгу. В общем массиве могут быть не все даты месяца.
Подскажите пожалуйста есть ли способ с помощью этого цикла перекрасить объекты (Shape) имеющие в себе гиперссылки (Hyperlink) во всей книге.
Для листа у меня вышло а для книги не могу понять как, прошу помощи так как только начал разбираться в vba.
Код макроса.
Здравствуйте, Денис!
Ваш код для всей текущей книги:
Здравствуйте. А как быть, если выбраны пользователем несмежные ячейки? Перебор не идёт (
Здравствуйте, Владимир!
У меня цикл For Each… Next работает и с выбранными несмежными ячейками — Selection , и с заданными как объект Range — Range(«B4:B5,D7:D8,G1:G2») . Проверьте у себя еще раз на примере цикла для диапазона ячеек (test1).
Здравствуйте.
Я инженер, работаю со сметами. У нас разделы в смете, и после каждого раздела нужна подсчитать итог, разделы начинаются : » РАЗДЕЛ «НОМЕР» ****** » . У меня не получается никак. Подскажите пожалуйста.
Здравствуйте, Андрей!
Недостаточно информации для понимания ситуации. Объясните структуру сметы: в каком столбце находятся названия разделов, какие диапазоны надо суммировать, куда записывается результат суммирования.
Таблица в столбцах A:H. Раздел находится в столбцах B:F (одна строка) мне нужно суммировать столбец H от первого раздела до следующего раздела ( все разделы по отдельности). Вверху раздела одна пустая строка, там должно вписаться результат суммы раздела в столбце H. Все разделы должны по отдельности суммироваться.
По вашему описанию я представляю так:
Сстрока 1 — шапка таблицы.
Блок раздела 1:
ячейка B2 — наименование раздела (РАЗДЕЛ 1)
диапазон H3-H8 — диапазон суммирования
ячейка H9 — сумма
Блок раздела 2:
ячейка B10 — наименование раздела (РАЗДЕЛ 2)
диапазон H11-H20 — диапазон суммирования
ячейка H21 — сумма
и так далее (диапазон суммирования — величина переменная). Правильно?
Да. Но разделы не «B2» а «B2:F2» то есть они объединены в одну строку (столбцы). Разделы начинаются со слова , например «Раздел 1. Кровля» , то есть разделы начинается : «Раздел «номер» «****» . и т.д. Мне нужно пробегаться по этим разделам и вставить итог в конце. Остальное все правильно.
Андрей, в объединенной ячейке отображается только значение первой ячейки, поэтому обращаться к объединенной ячейке «B2:F2» будем «B2» . Код будет работать при отсутствии пустых ячеек внутри суммируемых диапазонов, нули допускаются:
Привет, Евгений. Ну я вписал, не работает, только n подсчитывает последнюю строку. Сумма в столбце H не вставляется, m тоже не работает.
Андрей, у меня все работает. Возможно, у вас структура таблицы другая.
В строке раздела в столбце «H» пусто.
Структура:
В 1 столбце нумерация.
В 2ом обоснование.
В 3ем наименование.
В 4ем ед.измерение.
В 5ом норма.
В 6ом по проекту.
В 7ом цена
В 8ом сумма.
Если на пересечении строки раздела и столбца «H» пусто, тогда:
Привет Евгений. Можно функцию сумм как формулу ввести, чтобы в ячейке была формула?
Можно и формулу вставить:
Спасибо Евгений, удачи тебе, очень помог.
Здравствуйте, по работе нужно модернизировать существующий макрос, чтобы он для ячеек из диапазона столбцов от G до N заполнял пустые ячейки прочерками «-«, как я полагаю, используя For Each, можете помочь?
Источник
Adblock
detector