Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Сводные таблицы через VBA
 
Да, B3 остается без изменений. Ваш вариант подходит на все 100%. Спасибо!
Сводные таблицы через VBA
 
1. Кнопка "внести на лист2" делал в качестве примера переноса на другой лист."
2. Алгорит переноса такой: выбор даты в комбобоксе, очистка формы на лист3, очистка фрагмента таблицы (между загловом и строккой итого), и перенос всех значений, которые верстаются  по найденной дате между заголовком и строчкой итого.
3. По-хорошему Итого должно считатся кодом, но получилось отделался формулой.

Собственно очистить форму пробую также циклом:
Код
Private Sub CommandButton3_Click()
Dim iRange2 As Range
Set iRange2 = Worksheets(3).Columns(2).Find(What:="ИТОГО:")
Do
If Not iRange2 Is Nothing Then iRange2.Offset(-1).EntireRow.Delete
Loop While iRange2.Cells.Offset(rowOffset:=-1).Text = "Порядковый номер"
End Sub

Идея в том, чтобы удалялась каждая вышестоящая строка от строки с ячейкой "ИТОГО:", до строки содержащей ячекй заголовка таблицы.
Но пока удаляется только одна строка, цикл не выполняется.
Сводные таблицы через VBA
 
1. Переносить на лист 3.
2. В идеале при выборе даты  и нажатии кнопки должна изменяться размерность таблицы.
3. Расчет "ИТОГО" задается формулой,  я её просто не выложил в примере.
Сводные таблицы через VBA
 
немного продвинулся  в решении задачи. Все работает правильно только с первого запуска программы, а дальше надо очистить данные, и тогда все снова работает.
Код
Private Sub CommandButton2_Click()
Dim iRange As Range
Dim iLastRow As Long
Dim FirstAdr As String
Dim iNomer As Integer
Set iRange = Worksheets(1).Columns(1).Find(what:=ComboBox1.Value)
    FirstAdr = iRange.Address
    n = 1
     iLastRow = Worksheets(3).Cells(n + 3, 1).Row
      iNomer = Worksheets(1).Cells(iRange.Row, 2)
        
    Do
     If Worksheets(3).Cells(iLastRow, 2) = "ИТОГО:" Then
     Worksheets(3).Rows(iLastRow).Insert Shift:=xlDown
     n = n + 1
     End If
      Worksheets(3).Cells(iLastRow, 1) = Worksheets(1).Cells(iRange.Row, 1)
      Worksheets(3).Cells(iLastRow, 1).NumberFormat = "d/m/yyyy"
      Worksheets(3).Cells(iLastRow, 2) = iNomer
     Select Case iRange.Offset(, 2)
      Case "MosPrime0N"
           Worksheets(3).Cells(iLastRow, 3) = Worksheets(1).Cells(iRange.Row, 4)
           Worksheets(3).Cells(iLastRow, 3).NumberFormat = "0%"
      Case "MosPrime1W"
           Worksheets(3).Cells(iLastRow, 4) = Worksheets(1).Cells(iRange.Row, 4)
           Worksheets(3).Cells(iLastRow, 4).NumberFormat = "0%"
      Case "MosPrime2W"
           Worksheets(3).Cells(iLastRow, 5) = Worksheets(1).Cells(iRange.Row, 4)
           Worksheets(3).Cells(iLastRow, 5).NumberFormat = "0%"
     End Select
    Set iRange = Worksheets(1).Columns(1).FindNext(iRange)
      If Worksheets(1).Cells(iRange.Row, 2) <> iNomer Then
       iLastRow = Worksheets(3).Cells(n + 4, 1).Row
       iNomer = Worksheets(1).Cells(iRange.Row, 2)
      End If
    
    Loop While iRange.Address <> FirstAdr
End Sub


 
Сводные таблицы через VBA
 
Всем привет!

В примере есть сводная таблица (лист3), расположенная между заголовком и справочной информацией. Каким образом обозначить этот дипазон в коде  для формирования записей в этой сводной таблице. На листе2 представлен вариант сводной таблицы, когда на листе есть только сводная таблица.


 
Вывод данных по дате
 
Kuzmich, спасибо огромное! это именно то, что нужно!
Вывод данных по дате
 
Сводная - отличный вариант, но задачу нужно решить через vba.
Вывод данных по дате
 
Круто! Но в Вашем решении данные отражаются так:

ДатаПорядковый номерMosPrime0NMosPrime1WMosPrime2W
10.10.2014211%
10.10.2014212%
10.10.201428%
10.10.201437%
10.10.201434%
10.10.201435%
А нужно вот так:


ДатаПорядковый номерMosPrime0NMosPrime1WMosPrime2W
10.10.2014211%12%8%
10.10.201437%4%5%
Изменено: sc0ffer - 09.10.2014 16:26:15
Вывод данных по дате
 
Поправил.
Возникла маленькая проблема:

Код
Dim iRange As RangeSet iRange = Columns(3).Find(What:=ComboBox1)Cells(2, 1) = iRange  ' выводится ошибка, что объект неопределен. ошибка возникает в случае. если продолжить писать код дальше после этой строки
Для переноса процентов воспользовался циклом:
Код
Private Sub CommandButton1_Click()
'Dim iRange As Range
'Set iRange = Columns(3).Find(What:=ComboBox1)
'Cells(2, 1) = iRangen = Range(Cells(10, 3), Cells(Rows.Count, 3).End(xlUp)).Count
For i = 10 To nIf Cells(2, 1).Value = Cells(i, 3).Value And Cells(1, 3).Value = Cells(i, 5).Value Then Cells(2, 3) = Cells(i, 6).Value
If Cells(2, 1).Value = Cells(i, 3).Value And Cells(1, 4).Value = Cells(i, 5).Value Then Cells(2, 4) = Cells(i, 6).Value
If Cells(2, 1).Value = Cells(i, 3).Value And Cells(1, 5).Value = Cells(i, 5).Value Then Cells(2, 5) = Cells(i, 6).Value
Next i
End Sub


Подскажите, а как заносить порядковый номер ведь для трех процентных ставок в исходной таблице он одиннаковый. а в красной - стоит 1 раз.

Собственно, это основной затык, так как, например. при выборе в комбобоксе "10.10.2014" должно вывестись две строки с порядковым номером "2" и "3" соотвественно. Получается метод .FindNext запускается внутри условия, когда дата следующей записи такая же как в предыдущей. а порядковый номер другой. Я правильно понимаю?
Изменено: sc0ffer - 09.10.2014 15:57:24
Вывод данных по дате
 
Да, я уже изучаю метод FindNext.
Вывод данных по дате
 
Здравствуйте!
Столкнулся со следующей проблемой. Есть база данных, и из неё на определенную дату требуется выводит данные в другую таблицу, которая построена по другому. Ранше пользовался обычными функциями ИНДЕК И ПОИСКПОЗНАЧ. Сейчас надо выбрать дату, и чтобы в красную таблицу (см.пример) , занеслась вся информация из исходной таблицы по этой дате. Подскажите как это можно реализовать.
Удаление строки перед строкой Итого
 
Спасибо!
Удаление строки перед строкой Итого
 
Ок. я гашл глобально два примера удаления строк по условию:
Вариант 1
Код
Sub eee() lr = Selection.CurrentRegion.Rows.Count 'Cells(Rows.Count, 2).End(xlUp).Row For i = lr To 2 Step -1 If Val(Cells(i, 6)) = 0 Then Rows(i).Delete End If Next End Sub
Вариант 2:
Код
Sub Макрос1() Dim iRange As Range Set iRange = Columns(1).Find(what:="Toyota", LookIn:=xlFormulas, lookAt:=xlWhole) If Not iRange Is Nothing Then iRange.EntireRow.Delete End If End Sub
Предположим. я хочу подсвой пример использовать второй вариант. Тогда программа удет находить ячейку, содержащую текст "Итого" и удалять строку выше.
Код
Sub Макрос1() 
Dim iRange As Range 
Set iRange = Columns(1).Find(what:="ИТОГО" 
If Not iRange Is Nothing Then 
iRange.EntireRow.Delete              'как указать здесь адресс предыдущей ячейки?    
End If 
End Sub

Пользуйтесь кнопками оформления сообщения [МОДЕРАТОР]
Изменено: sc0ffer - 06.10.2014 15:17:06
Удаление строки перед строкой Итого
 
Здравствуйте!

Подскажите как удалить предыдущую строку перед строкой "ИТОГО". Ранее рассмотренные примеры по удалению строк не подходят для этой задачи, т.к. эта таблица является частью ещё большей таблицы.
Поиск локальных максимумов в таблице
 
Спасибо! Думал, формулами такое не решить.
Поиск локальных максимумов в таблице
 
Здравстуйте!
Подскажите пожалуйста способ решения следующей задачи:
Имеется таблица данными по ценам. Как определить максимум в рамках одного номера?
Справа от ячейки  с максимальной ценой должна стоят цифра "1", в остальных слуаях "0"

На форуме есть пример, где создается дополнительный столбец, в который в каждую ячейку заносится  каждое предыдущее максимальное значение цены, и если оно меньшее значения цены, то в этот столбец заносится новое максимальное знаение. У меня не получилось подогнать этот пример под свою задачу.
По коду, как я понял, надо определять строку с начальной и конечной строками, в рамках которых будет проводится поиск максимального значения. А что дальше делать непонятно...
Код
Sub Кнопка1_Щелчок()
Dim iLastRow As Long, iStartRow As Long, iEndRow As Long
Dim iNumber As Long
iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
For i = 4 To iLastRow
If iStartRow = 0 Then iStartRow = i
iNumber = Cells(i, "B").Value
If Cells(i + 1, "B")<> iNumber Then iEndRow = i
'основной код
End Sub
Поиск ячеек и копирование данных методом find
 
Максим, спасибо!
Поиск ячеек и копирование данных методом find
 
Спасибо, а вообще корректно указывать после метода Find какое либо свойство объекта?
Поиск ячеек и копирование данных методом find
 
Добрый день!

Подскажите, пожалуйста, где ошибка в коде?
Идея состоит в том, чтобы выбрать интересующее значение из списка, найти его в некоторой таблице и скопировать его в ячейку.
И ещё если можно дайте подсказку как скопировать вместе с найденой  ячейкой, ячейку содержащую дату рождения  сотрудника.


Код
Private Sub UserForm_Initialize()
ComboBox1.List = Worksheets("Лист1").Range(Cells(2, 3), Cells(Rows.Count, 3).End(xlUp)).Value
End Sub
Private Sub CommandButton1_Click()
With Worksheets("Лист1")
Set a = .Range(Cells(2, 3), Cells(Rows.Count, 3).End(xlUp)).Value
a.Find(What:=ComboBox1.Value, LookIn:=xlValues, LookAt:=xlWhole).Value
End With
ActiveCell.Value = a
End Sub
Копирование данных одного динамического массива в другой
 
Если надо скопировать часть таблицы, размер которой может меняться в столбцы другой таблицы, размер которой тоже меняется:
Код
Sub Кнопка1_Щелчок()n = Worksheets("Лист2" ).Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To n     
With Worksheets("Лист1")    
LastRow = .Cells(65536, 1).End(xlUp).Row + 1     
.Cells(LastRow, 8).Value = Worksheets("Лист2") .Cells(i, 2).Value     
End With
Next i
End Sub
Какая проблема: из второй таблицы на Листе2 копируется только последняя ячейка диапазона B4:B9 в первую ячейку диапазона Н2:Н8 первой таблицы на Лист2.
а надо соотвественно, чтобы диапазон B4:B9 переходил в Н2:Н8 именно в такой постановке кода.
Ошибка при выполнении инициализации Userform
 
Ещё один маленький вопрос:
Если надо скопировать  часть таблицы, размер которой может меняться в  столбцы другой таблицы, размер которой тоже меняется

Код
Sub Кнопка1_Щелчок()n = Worksheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To n     
With Worksheets("Лист1")    
LastRow = .Cells(65536, 1).End(xlUp).Row + 1     
.Cells(LastRow, 8).Value = Worksheets("Лист2").Cells(i, 2).Value     
End With
Next i
End Sub


Какая проблема: из второй таблицы на Листе2 копируется только последняя ячейка диапазона B4:B9 в первую ячейку диапазона Н2:Н8 первой таблицы на Лист2.
а надо соотвественно, чтобы диапазон B4:B9  переходил в Н2:Н8  именно в такой постановке кода.
Ошибка при выполнении инициализации Userform
 
Большое спасибо!
Ошибка при выполнении инициализации Userform
 
Файл в студии =)
Изменено: sc0ffer - 22.09.2014 22:58:15
Ошибка при выполнении инициализации Userform
 
Всем привет!
Столкнулся со следующей проблемой: есть база данных, которая заполняется через userfrom на листе1, и в этой userform есть combobox1 со значениями, которые берутся из листа 4 и через эту форму заносят на лист1 при выборе соответствующего значения. При выполнении вылезает ошибка: 1004 Application-defined or object-defined error. Выкладываю код:

Код
Private Sub UserForm_Initialize()
ComboBox1.List = Worksheets("Лист4").Range(Range("B4"), Range("B" & Rows.Count).End(xlUp)).Value
End Sub 
 

Private Sub CommandButton1_Click() 
    Application.ScreenUpdating = False                 
    Application.Calculation = xlCalculationManual
Код
     With Worksheets("Лист1")
     LastRow = .Cells(65536, 1).End(xlUp).Row + 1
     .Cells(LastRow, 1).Value = TextBox1.Text           
     .Cells(LastRow, 2).Value = TextBox2.Text          
     .Cells(LastRow, 3).Value = TextBox3.Text
     .Cells(LastRow, 4).Value = TextBox4.Text
     .Cells(LastRow, 6).Value = TextBox5.Text
     .Cells(LastRow, 8).Value = ComboBox1.Value
     End With
    
    Application.Calculation = xlCalculationAutomatic    
    Application.ScreenUpdating = True                
End Sub
 
Список дат в ComboBox c уникальными записями и привязанные к динамичному массиву дат
 
Хорошо, тогда поясните как написать следующее условие. Если выбранное значение в списке ComboBox1 совпадает хотя бы с одним значением ячейки из массива iMassavie, то происходит копирование этой ячейки на другой лист.  
Список дат в ComboBox c уникальными записями и привязанные к динамичному массиву дат
 
Еще один вопрос. Знаю, что не хорошо писать, не имея своего первичного кода, пусть и неверного, но сейчас его нет. Допустим, есть массив, состоящий из нескольких столбцов. Через окно UserForm требуется задать начальное значение в ComboBox 1 и конечное в ComboBox2.  Затем используя эти значения, копировать часть массива со всеми столбцами на другой лист.



Код
Private Sub UserForm_Initialize()
iMassiv = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
ComboBox1.List = iMassiv
ComboBox2.List = iMassiv
End Sub
Private Sub CommandButton1_Click()
If iMassiv(Cell(i).Value) = ComboBox1.Value;iMassiv (Cell (j).Value) = ComboBox2.Value Then
Range(Cell(i), Cell(j)).Select
Worksheets("Лист2").Paste
End If
End Sub
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub

Знаю, что код неверный в части ComboBox  и дальнейшего копирования на другой лист. Идея процедуры If в коде  заключается в том, что если значение  в ComboBox 1 находит совпадение в ячейке массива, и если значение  в ComboBox 1 находит совпадение в ячейке массива, то происходит копирование диапазона ячеек, где начальной и конечной ячейками будут вышеописанные ячейки.
Список дат в ComboBox c уникальными записями и привязанные к динамичному массиву дат
 
Словарь - отличное решение! И сам код меньше =) К VBA возвращаюсь время от времени, и пока словарей и коллекций касался очень косвенно.
Список дат в ComboBox c уникальными записями и привязанные к динамичному массиву дат
 
Да, спасибо, Максим огромное! А без словаря получается здесь никак не обойтись, если мы говорим об уникальных записях в выпадающем списке ComboBox?
Список дат в ComboBox c уникальными записями и привязанные к динамичному массиву дат
 
Так пробовал прописать. Не работает.
Список дат в ComboBox c уникальными записями и привязанные к динамичному массиву дат
 
Здравствуйте!
Столкнулся со следующей проблемой,  прошу помощи опытных форумчан.
Требуется создать форму с списком, списком который будет иметь следующие свойства:

1. Иметь формат даты: dd/mm/yyyy
2. Содержать уникальные записи в выпадающем списке ComboBox
3. Массив дат на листе может сокращаться или увеличиваться, и список в ComboBox тоже должен это учитывать.
С первой задачей я вроде справился, вторую пробою решить через UniqueItems, но что-то не получается. По третьей задаче, я думал написать следующий код, но excel выводит ошибку:
Код
Private Sub UserForm_Initialize()
Dim iMassiv As Range
Set iMassiv = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
ComboBox1.Value = iMassiv
End Sub
Прошу помочь, подсказать, где можно что-нибудь изучить, чтобы решить эти задачи.
Страницы: 1 2 След.
Наверх