Добрый день. При двойном клике на ячейках диапазона C13:C206 выдает ошибку 381 Could not set the list property. Invalid property array index. Я так понимаю, значения собираются но не заносятся в listbox. Не могу понять в чем проблема. Как исключить ошибку и вывести заполненный Listbox?
Добрый день. Подскажите пожалуйста, как по двойному клику на листе "список" диапазона В3:В10000, появлялся диапазон по условию J3:J10000, с листа "Состав". То есть сделав двойной клик по ячейке B5 (Овощи), выводился перечень овощей с листа "Состав". После выбора которого данные вставлялись бы на лист "Список"
Добрый день. Подскажите пожалуйста как по двойному клику в столбце b6:b1000 по надписи овощи сортировка менялась по значению столбца A "да" D "Ово", а по двойному клику в столбце b6:b1000 по надписи морковь сортировка менялась по значению столбца A "да" D "Ово", E "мор"
Добрый день друзья. Нужна помощь. Необходимо с помощью двойного клика по диапазону в столбце G в столбец J. Не удаляя при этом значения в в ячейке J, но зачеркивая их.
Добрый день друзья. Помогите пожалуйста. Имеется таблица. Необходимо по двойному клику на диапазоне значений 7 столбца, перенести данное значение в 9 столбец, предварительно осуществить перенос имеющегося в этой таблице значения ниже. Исходная таблица Конечная таблица
Друзья. Помогите пожалуйста формулу в vba прописать: если(индекс(Smeta_contractor_all_works;поискпоз(Smeta_contractor_finish;Smeta_all_contractor;0);поискпоз($BX15;Smeta_contractor_works;0))="да";1;0) Поясню: Есть ячейки и текстом: "Smeta_contractor_finish"=...... "$BX15"=......... Есть таблица: "Smeta_contractor_works" (20, 50) = .............. Вертикальный столбец в таблице: "Smeta_all_contractor" = .................... Горизонтальная строка в таблице: "Smeta_contractor_works" = ..........
На пересечении данных по условию: Smeta_contractor_finish = Smeta_all_contractor $BX15 = Smeta_contractor_works Находится значение и если оно равно "да" то значение становится 1 и подставляется в формулу если равно "нет" то значение становиться 0 и подставляется в формулу.
Код
For sv = 1 To UBound(VB_Smeta_full)
If VB_Smeta_full(sv, 14) = 0 Then
VB_Smeta_full(sv, 4) = 0
VB_Smeta_volume(sv, 1) = VB_Smeta_full(sv, 4)
Else
If VB_Smeta_full(sv, 20) = "да" Then
If VB_Smeta_contractor = VB_Smeta_contractor_fix Then
VB_Smeta_full(sv, 4) = Round(VB_Smeta_full(sv, 14) * VB_Smeta_full(sv, 15), 0)
VB_Smeta_volume(sv, 1) = VB_Smeta_full(sv, 4)
Else
'в это место и должна встать эта злополучная формула
If VB_Smeta_full(sv, 74) = VB_Smeta_contractor Then
VB_Smeta_full(sv, 4) = Round(VB_Smeta_full(sv, 14) * VB_Smeta_full(sv, 15), 0)
VB_Smeta_volume(sv, 1) = VB_Smeta_full(sv, 4)
End If
End If
End If
End If
Next
Sub Пересчет_наличия_строк()
Dim List_smeta, List_materials, List_works, List_materialsVC, List_worksVC As Worksheet
Dim VB_Smeta_full(), VB_Smeta_m_full(), VB_Smeta_w_full() As Variant
Dim SmetaFinalRow, SmetaFinalColumn As String
Dim i, n As Long
Set List_smeta = Application.ThisWorkbook.Sheets("Смета")
Set List_materials = Application.ThisWorkbook.Sheets("Материалы")
Set List_works = Application.ThisWorkbook.Sheets("Работы")
Set List_materialsVC = Application.ThisWorkbook.Sheets("Материалы ВиК")
Set List_worksVC = Application.ThisWorkbook.Sheets("Работы ВиК")
VB_Smeta_m_full() = Range("Smeta_m_full").Value
VB_Smeta_w_full() = Range("Smeta_w_full").Value
With List_smeta
VB_Smeta_full = .Range("B14:BX" & .Cells(.Rows.Count, "BX").End(xlUp).Row).Value
VB_Smeta_contractor = .Range("Smeta_contractor").Value
VB_Smeta_contractor_fix = .Range("Smeta_contractor_fix").Value
End With
ReDim VB_Smeta_full_new(1 To UBound(VB_Smeta_full), 0): n = 1
For i = 1 To UBound(VB_Smeta_full)
If Not IsEmpty(VB_Smeta_full(i, 14)) Then
If VB_Smeta_full(i, 20) = "да" Then
If VB_Smeta_contractor = VB_Smeta_contractor_fix Then
If VB_Smeta_full(i, 74) = VB_Smeta_contractor Then
VB_Smeta_full_new(n, 0) = Round(VB_Smeta_full(i, 14) * VB_Smeta_full(i, 15), 0)
End If
End If
End If
End If
Next
Debug.Print VB_Smeta_full_new(3, 0)
Range("Smeta_mat_volume") = VB_Smeta_full
End Sub
Задача разбивается на несколько этапов (все операции выполняются на листе "Смета"): 1. определяем наличие объёма в столбце N соответствующей ячейки. Если значение отсутствует, смысла считать нет. 2. проверяем столбец U, если стоит "да" продолжаем расчёты дальше. 3. проверяем столбец bW, если в ячейке соответствует человеку в ячейке $V$4, или в ячейке $V$4=BZ$20 стоит эталон, продолжаем расчеты дальше 4. И последнее условие, выполняет ли соответствующий человек в ячейке bw соответствующую работу из диапазона by1:h20. Если все ок. То берем значение из ячейки N, умножаем на значение ячейки P и округляем вверх до целого значения. Спасибо за помощь Александру в корректировке макроса по первой части.
5. Проверяем массив VB_Smeta_full, столбец 2 и сравниваем с массивом VB_Smeta_m_full столбец 2, если массивы совпадают 6. Проверяем VB_Smeta_contractor с массивом VB_Smeta_m_full строка 1 7. При совпадении значение пересечения заносится в массив VB_Smeta_full столбец 5 6. Перемножаем в массиве VB_Smeta_full столбец 4 5 и проставляем значение в столбец 6 округлённое значение до копеек. 7. Затем данные из массива ячеек 4,5,6 вставляем в столбцы E,F,G листа Смета
Sub Пересчет_наличия_строк()
Dim List_smeta, List_materials, List_works, List_materialsVC, List_worksVC As Worksheet
Dim VB_Smeta_works_volume, VB_Smeta_mat_volume, VB_Smeta_wm_volume As Variant
Dim i, Smeta_wm_volume As Long
Set List_smeta = Application.ThisWorkbook.Sheets("Смета")
Set List_materials = Application.ThisWorkbook.Sheets("Материалы")
Set List_works = Application.ThisWorkbook.Sheets("Работы")
Set List_materialsVC = Application.ThisWorkbook.Sheets("Материалы ВиК")
Set List_worksVC = Application.ThisWorkbook.Sheets("Работы ВиК")
'Копирую данные в массив
VB_Smeta_wm_volume = Range("Smeta_wm_volume").Value
VB_Smeta_contractor = Range("Smeta_contractor").Value
VB_Smeta_contractor_fix = Range("Smeta_contractor_fix").Value
For i = 1 To 6123
'Само значение объёма работ берётся из ячейки VB_Smeta_wm_volume(i, 17)
If VB_Smeta_wm_volume(i, 17) <> 0 Then
If VB_Smeta_wm_volume(i, 23) = "да" Then
If VB_Smeta_wm_volume(i, 75) = VB_Smeta_contractor_fix Then
If VB_Smeta_wm_volume(i, 75) = VB_Smeta_contractor Then
VB_Smeta_wm_volume(i, 5) = ROUNDUP (VB_Smeta_wm_volume(i, 15) * VB_Smeta_wm_volume(i, 16),0)
Next
End If
End If
End If
End If
Range("Smeta_wm_volume") = VB_Smeta_wm_volume
End Sub
Задача разбивается на несколько этапов: 1. определяем наличие объёма в столбце N соответствующей ячейки. Если значение отсутствует, смысла считать нет. 2. проверяем столбец U, если стоит "да" продолжаем расчёты дальше. 3. проверяем столбец bW, если в ячейке соответствует человеку в ячейке $V$4, или в ячейке $V$4=BZ$20 стоит эталон, продолжаем расчеты дальше 4. И последнее условие, выполняет ли соответствующий человек в ячейке bw соответствующую работу из диапазона by1:h20.
Если все ок. То берем значение из ячейки N, умножаем на значение ячейки P и округляем вверх до целого значения.
Добрый день. Может кто из знатоков подскажет, как мне ускорить работу макроса. Имеются три таблицы на разных листах. Из двух таблиц данные подтягиваются в основную, а из основной обратно в оставшиеся две. Основная таблица A13:BX6000 Столбцу E13:E6000 присвоил имя "Smeta_mat_volume" и считаю: With Range("Smeta_mat_volume") .Formula = "=IF(AND(RC[16]=""да"",OR(RC[70]=R4C22,R4C22=R20C[73])),ROUNDUP(RC[10]*RC[11],0),0)*IF(INDEX(Smeta_contractor_al l_works,MATCH(Smeta_contractor_fini sh,Smeta_all_contractor,0),MATCH(RC 76,Smeta_contractor_works,0))=""да" ",1,0)" .Calculate .Value = .Value End With Столбцу F13:F6000 присвоил имя "Smeta_mat_price" и считаю: With Range("Smeta_mat_price") .Formula = "=SUMIFS(Materials_price,Materials_ name,RC[-3])" .Calculate .Value = .Value End With Столбец имеющий имя Materials_price с другого листа Необходимо диапазону дать имя, скопировать в массив и из этого массива брать данные только из 3 столбца Столбец имеющий имя Materials_name с третьего листа Необходимо диапазону дать имя, скопировать в массив и из этого массива брать данные только из 4 столбца
Столбцу G13:G6000 присвоил имя "Smeta_mat_summa" и считаю: With Range("Smeta_mat_summa") .Formula = "=ROUND(RC[-2]*RC[-1],2)" .Calculate .Value = .Value End With
Это все занимает очень много времени
Хотел бы таблице A13:BX6000 дать имя, скопировать данные в массив Расчеты произвести в нем и выгрузить на лист только нужную информацию.
Добрый вечер. Я знаю что данная тема поднималась многократно и я просмотрел всевозможные варианты. И вот что смог написать в приложенном файле. Буду очень рад если кто нибудь из специалистов посмотрит и поможет это всё дело упростить. Спасибо.
P.S. Если вдруг что нибудь не понятно, немного поясню. Данные с листа Альфа автоматически копируются на лист "отбор" через определённый промежуток времени, но копируются по не скольким условиям. С листа Альфа данные отмеченные галочкой в столбце "О" автоматически копируются на лист "сделки". После копирования галочка удаляется, в принципе можно и без галочки, но запускать макросы по нажатии на любую ячейку я ещё не научился ((( Спасибо за понимание.
При помощи специалистов форума KukLP, создал файл бюджета. Буду признателен если кто-нибудь ещё посмотрит и внесёт изменения. Сначала нажми зелёную кнопку "Удаление данных" (Макрос удалит все старые данные предыдущего года) А затем "Добавить" (Макрос вставит несколько первых расходов текущего года). Мне кажется, не совсем корректно построены макросы, возможно их улучшить? Спасибо. http://letitbit.net/download/09903.04ab69d3b92f571af95e3eb9dcd4/Budzhet.xlsm.html Файл в office 2007.
Как из таблицы 11(Ноябрь), нажав на кнопку "Для всех банков" выбрав несколько имён, создать для каждого имени свой файл excel в котором бы указывались все сделки совершённые им в указанном дне. И каждому имени отправлялись бы по почте. Формулы расчёта я указал в макросе "Формулы_расчёта"
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
Добрый день. Есть не большая проблема. На листе "Расходы" есть кнопка "Вставить товар" При нажатии на кнопку необходимо выбрать соответствующий товар и вставить его номер в ячейку P4:P16. Пример файла я приложил. <EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>