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

Страницы: 1 2 3 4 5 6 7 След.
Power Query. Как преобразовать дату в номер недели., Прошу подсказать как вычилить номер недели из даты дня в power query. В формулах это реализуется через НОМНЕДЕЛИ().
 
Если не ошибаюсь, код самого Николая Павлова для получения номера недели, аналогично формуле НОМНЕДЕЛИ.ISO().
[Дата] - это колонка с вашей датой из которой нужно получить номер недели.


Код
=Number.IntegerDivide(
        Duration.Days(
            [Дата]-#date(
                Date.Year(Date.AddDays(
                    [Дата],3-Date.DayOfWeek(
                        [Дата],1)
                    )
                ),1,3)
            )+Date.DayOfWeek(
            #date(
                Date.Year(
                    Date.AddDays(
                        [Дата],3-Date.DayOfWeek(
                            [Дата],1
                        )
                    )
                ),1,3
            ),0
        )+6,7
    )
Изменено: lis2109 - 21.03.2024 16:50:04
Загрузка адресной книги из Excel в OutLook
 
Добрый день.

Подсобрал из разных источников макрос для загрузки и удаления всех контактов.
Удаляет нормально, а при загрузке контактов происходит что-то интересное. Может подскажите, что делать?
Excel и Outlook 2016, Windows 10
1. Как заполнить свойство контакта "Отображать как"?
2. При загрузке иногда пропадает языковая панель (справа в углу)
3. Если запускать процедуру загрузки несколько раз, то в диспетчере задач повисает куча процессов Excel, каждый из которых надо завершать отдельно.
4. После загрузки адресов и закрытия файла, иногда, система предлагает его снова открыть, как будто он снова доступен для чтения и записи (скрин ниже)
Запуск макроса до обновления сводной
 
Добрый день.

Может кто знает, как отследить событие обновление сводной таблицы.
Требуется, чтобы выполнялась такая последовательность действий:
- нажимается стандартная кнопка "Обновить все" - для обновления всех сводных.
- выполняется макрос
- все сводные обновляются

Что самое близкое нашел, так это Worksheet_PivotTableUpdate, но в данном случае макрос выполняется после обновления сводной, а не до обновления.

Способ - повесить всю последовательность действий на отдельный макрос, к сожалению, не подходит для работы.
Запуск макроса при начале редактирования ячейки
 
А если не в режиме редактирования, а в момент до него?
Существует способ отловить нажатие клавиш?
Запуск макроса при начале редактирования ячейки
 
Добрый день.

Может сможете подсказать, есть ли способ запустить макрос, при начале ввода данных в ячейку?
Worksheet_Change - запускает уже после редактирования ячейки.
Worksheet_SelectionChange - при выделении ячейки.
Но идея - как только в указанном столбце пользователь начинает вводить данные (т.е. после первого же нажатия любой клавиши на клавиатуре) - должен происходить запуск макроса (вызов userform).
Combobox с поиском, VBA
 
Спасибо.
Срабатывает так как надо.
Combobox с поиском, VBA
 
ocet p, спасибо.
В вашем варианте почему-то поиск останавливался после ввода первой буквы. Немного изменил код (скорее всего не очень красиво сделал), вроде все получилось.
Выкладываю итоговый файл.
Если кто-нибудь знает как сюда прикрутить вывод в ComboBox только уникальных значений, да и по алфавиту, то думаю получится хороший инструмент.
Combobox с поиском, VBA
 
Цитата
Андрей VG написал: Вариант с использованием ADODB.Recordset
Андрей VG, добрый день.
При поиске выдает корректные результаты, но при попытке перехода по списку с помощью стрелок на клавиатуре, в списке просто выбирается первое значение. Не знаете как решить эту проблему? Чтобы при использовании стрелок был просто переход по найденным значениям списка?
Изменено: lis2109 - 09.02.2019 19:13:45
Автоматически поставить пароль по наступлению даты
 
Код
Private Sub Workbook_Open()

Dim i&, n&, P As Variant

Application.ScreenUpdating = False
   n = 2
If Date >= CDate("01.03.2019") Then
   For i = 1 To Sheets.Count
       Sheets(i).Activate
       Sheets(i).Protect "1234"
   Next
   
1:
   P = InputBox("Время использования книги истекло, для продолжения введите пароль", "ВВОД ПАРОЛЯ")

   If P = 1234 Then
      For i = 1 To Sheets.Count
          Sheets(i).Activate
          Sheets(i).Unprotect "1234"
      Next
   Else
      If n = 0 Then
         Application.DisplayAlerts = False
           ThisWorkbook.Close
         Application.DisplayAlerts = True
      Else
         MsgBox "Пароль не верный, у вас еще " & n & " попытки"
         n = n - 1
      End If
     GoTo 1
   End If

End If

Application.ScreenUpdating = True

End Sub
создание надстройки "вставить как значение"
 
https://www.planetaexcel.ru/plex/features/15/242/
Обработка большого количества строк макросом, перебор строк + транспонирование
 
Спасибо.
А я уж и так и сяк перепробовал, и все ошибку выдавало.
"а ларчик просто открывался" ))

Да, ваш вариант на моем компе выполнил работу почти в 3 раза быстрее, чем вариант, который я смастерил.
Еще раз спасибо.
Обработка большого количества строк макросом, перебор строк + транспонирование
 
Стыдно признаться, но что-то я даже не смог запустить процедуру CreateTransposed )
Обработка большого количества строк макросом, перебор строк + транспонирование
 
Спасибо.
С массивами знаком очень слабо, поэтому получилось как-то так:
Код
Public Function GetBlockRowCount(ByVal forRows As Long, ByVal forColumn As Long) As Long
    Dim vCount As Long, i As Long
    vCount = 1
    i = forRows
    Do Until Cells(i, forColumn).IndentLevel = 0
        i = i + 1
        vCount = vCount + 1
    Loop
        GetBlockRowCount = vCount
End Function

Sub test()
    t = Timer
  Dim первая_строка As Long: первая_строка = 3
  Dim колонка_с_текстом As Long: колонка_с_текстом = 1
  Dim колонка_с_суммой As Long: колонка_с_суммой = 2
    
    количество_строк_в_блоке = GetBlockRowCount(первая_строка, колонка_с_текстом)
         
Dim lLastRow As Long
    lLastRow = ActiveSheet.Cells(Rows.Count, колонка_с_текстом).End(xlUp).Row
   
   Dim massivStr() As String
   Dim massivLng_1() As Long
   Dim massivLng_2() As Long
    ReDim massivStr(lLastRow)
    ReDim massivLng_1(lLastRow)
    ReDim massivLng_2(lLastRow)
      первая_строка = первая_строка - 1
       
   Dim i As Long
     For i = первая_строка To lLastRow
         massivStr(i - первая_строка) = Cells(i, колонка_с_текстом)
         massivLng_1(i - первая_строка) = Cells(i, колонка_с_суммой)
         massivLng_2(i - первая_строка) = Cells(i, колонка_с_суммой + 1)
     Next i
       
Dim j As Long
    j = 1
Dim k As Long
    k = 1
   
   For i = первая_строка To lLastRow
        Sheets("Лист2").Cells(k, j) = massivStr(i - первая_строка)
        j = j + 1
        If j - 1 = количество_строк_в_блоке Then
           Sheets("Лист2").Cells(k, количество_строк_в_блоке + 1) = massivLng_1(i - первая_строка)
           Sheets("Лист2").Cells(k, количество_строк_в_блоке + 2) = massivLng_2(i - первая_строка)
           j = 1
           k = k + 1
        End If
   Next i
       MsgBox t
End Sub
В файле (https://yadi.sk/d/UkZqbPlhriDUG) пример на 700 тыс.строк.
Массивы не очень ускорили работу.
Скорее всего я что-то напортачил в коде.
Подскажите, пожалуйста, по оптимизации.
Обработка большого количества строк макросом, перебор строк + транспонирование
 
Цитата
А тогда что нужно получить в столбце Р для группы? Сумму по группе?
А точно, не сказал.
В каждом блоке, напротив каждого текста повторяется одна и та же сумма.
Т.е. каждый блок - это информация об одном платеже. Ее нужно развернуть в горизонтальное положение.
Еще раз пример прикрепил, посмотрите.
Т.е. сумму из каждого блока нужно взять только один раз.
Изменено: lis2109 - 13.05.2016 21:08:36
Обработка большого количества строк макросом, перебор строк + транспонирование
 
Цитата
Юрий М написал: Но я немного о другом: если НЕИЗМЕННО количество строк в каждом блоке. Т.е. везде одинаково ))
Количество строк в каждом блоке одинаковое, но внутри может быть разное.
Т.е. куча таких блоков по 5 строк в каждом, или по 6, или по 7.
Столбец с суммами справа (иногда их 2, но думаю это я и сам смогу дописать опираясь на ваш пример, поэтому не уточнял)
Т.е. структура отчетов точно такая, как в примере, только количество строк в блоках "плавающее".
Цитата
Hugo написал: Непонятно почему одинаковые цифры и по порядку. Почему?
Цифры по порядку просто для примера. Там суммы платежей будут.
Цитата
Андрей VG написал: после отступа 2 могут подряд идти от одного до десяти с отступом 3 (а куда их тогда девать?
Отступы всегда идут по нарастающей (в рамках одного блока). Т.е. нет подряд строк с одинаковыми отступами.
Обработка большого количества строк макросом, перебор строк + транспонирование
 
Добрый день.

Прошу помощи или совета как действовать.
Ко мне попадает файл (как в примере), он постоянно обновляется и мне нужно почти каждый день приводить из состояния "Исходник" в "то что нужно". Сейчас в файле уже больше 100 000 строк. К концу года будет более 500 000.
Я разворачивал в нужный мне вид привязываясь к отступам каждой строки (цикл по строкам, больше цифра отступа - больше номер колонки). Но уже сейчас этот процесс занимает довольно продолжительное время.
Каким способом можно ускорить получение результата?
Выбор листа через обычное меню на ленте - возможно ли?
 
http://www.excel-vba.ru/general/moi-nadstrojki/spisok-listov-knigi/
Копия сводной с формулами, Копирование сводной в виде значений с сохранением формул
 
Натолкните на саму идею, по какому принципу можно воссоздавать формулы? За что зацепиться?
Копия сводной с формулами, Копирование сводной в виде значений с сохранением формул
 
Дмитрий, сводная копируется на второй лист, но почему-то остается тоже в виде сводной.
Копия сводной с формулами, Копирование сводной в виде значений с сохранением формул
 
Добрый день.
Кто-нибудь знает как можно скопировать сводную таблицу в значения (отвязать от исходных данных), но при этом сохранить формулы внутри таблицы.
Понятно, что такое только макросами.
Как отвязать от исходников я разобрался, а вот как формулы сохранить?
Даже не знаю от чего оттолкнуться, т.к. естественно структура сводной всегда разная.
Показать все связи листа
 
К сожалению не знаю кто автор.
Код
Sub Связи_активной_книги()
If MsgBox("Вывести список всех связей книги на новый лист?", vbYesNo + vbQuestion, "Связи книги") = vbNo Then Exit Sub
  Dim wsSh As Worksheet
    On Error Resume Next
     Set wsSh = Sheets("Связи_книги")
      If wsSh Is Nothing Then Sheets.Add(Sheets(1)).name = "Связи_книги"
       wsSh.Activate
        Cells.Clear
         Sheets("Связи_книги").Move before:=Sheets(1)

Dim spisws(), spiscell(), spl(), spce(), splni(), i, j, ii, iii, nl, iLinks As Variant
Dim ws As Worksheet, rr As Range, cell As Range, rLast As Range, iLinkNum As Integer, iArrowNum As Integer
Dim rlastf, fff, nml, bNewArrow As Boolean

Application.ScreenUpdating = False
iLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(iLinks) Then nl = UBound(iLinks)
For Each ws In Sheets
ws.Select
On Error Resume Next
Set rr = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
If Err.Number = 0 Then
On Error GoTo 0
For Each cell In rr
    If Not IsEmpty(nl) Then
        If InStr(cell.Formula, "[") > 0 Then
            rlastf = Replace(cell.Formula, "[", "")
  For iii = 1 To nl
    If InStr(rlastf, iLinks(iii)) > 0 Then
                i = i + 1
            ReDim Preserve splni(0 To i)
            ReDim Preserve spl(0 To i)
            ReDim Preserve spce(0 To i)
            ReDim Preserve spisws(0 To i)
            ReDim Preserve spiscell(0 To i)
            
                spl(i) = ws.name
                spce(i) = cell.Address(False, False, xlA1)
                splni(i) = iLinks(iii)
        End If

  Next iii
    End If
End If
    cell.Select
    ActiveCell.ShowPrecedents
    Set rLast = ActiveCell
    iArrowNum = 1
    iLinkNum = 1
    bNewArrow = True
Do
    Do
    Application.GoTo rLast
        On Error Resume Next
ActiveCell.NavigateArrow TowardPrecedent:=True, ArrowNumber:=iArrowNum, LinkNumber:=iLinkNum
        If Err.Number > 0 Then Exit Do
            On Error GoTo 0
                If rLast.Address(external:=True) = ActiveCell.Address(external:=True) Then Exit Do
                    bNewArrow = False
                        If rLast.Worksheet.Parent.name = ActiveCell.Worksheet.Parent.name Then
                            If rLast.Worksheet.name <> ActiveCell.Parent.name Then
                    i = i + 1
            ReDim Preserve splni(0 To i)
            ReDim Preserve spl(0 To i)
            ReDim Preserve spce(0 To i)
            ReDim Preserve spisws(0 To i)
            ReDim Preserve spiscell(0 To i)
 
                spl(i) = ws.name
                spce(i) = rLast.Address(False, False, xlA1)
                spisws(i) = Selection.Parent.name
                spiscell(i) = Selection.Address(False, False, xlA1)
        End If
    End If
        iLinkNum = iLinkNum + 1
    Loop
        If bNewArrow Then Exit Do
            iLinkNum = 1
            bNewArrow = True
            iArrowNum = iArrowNum + 1
    Loop
        rLast.Parent.ClearArrows
        Application.GoTo rLast
Next cell

        Set rr = Nothing
    End If
        Next ws
    Sheets("Связи_книги").Activate
  On Error Resume Next
Range(Cells(1, 2), Cells(i + 1, 2)) = Application.WorksheetFunction.Transpose(spce)
Range(Cells(1, 3), Cells(i + 1, 3)) = Application.WorksheetFunction.Transpose(splni)
    Sheets("Связи_книги").Activate
Range(Cells(1, 5), Cells(i + 1, 5)) = Application.WorksheetFunction.Transpose(spiscell)
Range(Cells(1, 1), Cells(1, 6)) = Array("лист", "ячейка", "внешняя ссылка", "лист ссылки", "ячейки ссылки", "примечание")
    Range("A1:F1").AutoFilter
    Range("B2").Select
    ActiveWindow.FreezePanes = True
    For j = 1 To i
    If Not IsEmpty(Cells(j + 1, 3)) Then
    Set fff = CreateObject("Scripting.FileSystemObject")
    If fff.FileExists(Cells(j + 1, 3).Value) Then
     Set fff = Nothing
            Worksheets("Связи_книги").Hyperlinks.Add anchor:=Cells(j + 1, 3), Address:=Cells(j + 1, 3).Value
     
     Else
     Cells(j + 1, 3) = "Битая ссылка"
     End If
    
     End If
             Worksheets("Связи_книги").Hyperlinks.Add anchor:=Cells(j + 1, 1), Address:="", SubAddress:="'" & spl(j) & "'" & "!" & spce(j)
         Cells(j + 1, 1).Formula = spl(j)
             Worksheets("Связи_книги").Hyperlinks.Add anchor:=Cells(j + 1, 4), Address:="", SubAddress:="'" & spisws(j) & "'" & "!A1"
         Cells(j + 1, 4).Formula = spisws(j)
         
    Next j
    Cells.Columns.AutoFit
    With Cells
        .VerticalAlignment = xlTop
        .WrapText = True
    End With
End Sub
Смещение относительно последнего ненулевого значения в строке
 
Спасибо. А я не догадался.
Смещение относительно последнего ненулевого значения в строке
 
Добрый день.

Подскажите, как найти последнее ненулевое значение в строке и смещение относительно него.
Т.е. значение не нулевое можно найти с помощью формулы =ПРОСМОТР(9E+307;1/D5:M5;D5:M5)
Но никак не удается придумать формулу, чтобы она работала со смещением относительно найденного ненулевого значения.
Пример в файле. Желтые ячейки - что необходимо подтянуть формулой.
Заранее спасибо.
Суммирование в плавающем диапазоне по условию, обработка оборотки
 
JayBhagavan, спасибо, работает.
Сергей, спасибо, что откликнулись. Формула крутая у вас получилась ))
Суммирование в плавающем диапазоне по условию, обработка оборотки
 
Цитата
ФИО идут всегда после "70" и до "71" без разрывов диапазонов?
Да.
Суммирование в плавающем диапазоне по условию, обработка оборотки
 
Добрый день.

Помогите, пожалуйста.
Требуется найти сумму всех положительных и всех отрицательных чисел в диапазоне выделенном желтым цветом.
Количество строк "Фамилия Имя Отчество" всегда разное.
Вертикальное расположение (с какой строки начинается этот диапазон) на листе всегда разное.
Расположение колонок неизменно.
случайная пустая ячейка
 
К примеру, нужно выбрать в рандомном порядке не пустые ячейки в диапазоне
Код
Sub t()
  Set d = CreateObject("scripting.dictionary")
  For Each c In [a4:a14].Cells
    If Not IsEmpty(c) Then
       i& = i& + 1
       d(i) = c.Address
    End If
  Next
  MsgBox d(CInt(Rnd() * d.Count + 0.5))
End Sub
И чтобы значения из диапазона максимально редко повторялись.
Изменено: lis2109 - 03.11.2014 21:59:49
случайная пустая ячейка
 
А если запустить его всего один раз, то результат будет абсолютно уникальным ))
А если серьезно - это возможно реализовать?
случайная пустая ячейка
 
Ух здорово.
А как сделать, чтобы результат макроса максимально редко повторялся?
Расширенный фильтр макросом. Поиск по маске *текст*, http://www.planetaexcel.ru/techniques/2/197/
 
Да, это типа не хочется набирать две *, т.к. таблица подразумевает постоянный ввод две *.
Спасибо огромное, то что нужно.
Страницы: 1 2 3 4 5 6 7 След.
Наверх