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

Страницы: 1 2 След.
График дежурств, автоматический график дежурств по месяцам
 

Думаю, что с такими требованиями эта тема будет перенесена в раздел "Работа".

Советую вам проанализировать проблему, изучить вопрос и попробовать самостоятельно создать этот график, а затем запросить помощь в том, что у вас не получается. Не думаю, что кто-то создаст этот график для вас с нуля. ChatGPT, безусловно, может вам в этом помочь.

Исправить путь в формуле к таблице в другой книге Excel
 
Добры вечер,

Написал формулу которая рассчитывает данные из другой книге, из таблице, пол дня мучаюсь над тем чтобы формула работало не открывая книгу из которой берутся данные.

При открытии UTIL_Lifetime.xlsx получаю ошибку при обновлении формул, если открываю Spare_parts.xlsm то все обновляется без ошибок, помогите исправить формулу чтобы обновлялось без открытия файла Spare_parts.xlsm.


методом тыка понял что проблема в пути к таблице, к столбцу таблице:  Spare_parts.xlsm'!Table6[[#All];[V0]]
Код
=IFERROR(SMALL(IF(Spare_parts.xlsm!Table6[[#All];[V0]]=$A3;Spare_parts.xlsm!Table6[[#All];[Contor]]);I$1)-SMALL(IF(Spare_parts.xlsm!Table6[[#All];[V0]]=$A3;Spare_parts.xlsm!Table6[[#All];[Contor]]);H$1);"")
если указать путь к диапазону ячеек или к столбцу то все работает: [Spare_parts.xlsm]DESCARCARE PIESE'!$M:$M
Код
=IFERROR(SMALL(IF('[Spare_parts.xlsm]DESCARCARE PIESE'!$M:$M=$A3;'[Spare_parts.xlsm]DESCARCARE PIESE'!$C:$C);I$1)-SMALL(IF('[Spare_parts.xlsm]DESCARCARE PIESE'!$M:$M=$A3;'[Spare_parts.xlsm]DESCARCARE PIESE'!$C:$C);H$1);"")

но нужен именно первый вариант, ссылка к столбцу таблицы так как данные пополняются и используя диапазон придется постоянно коректировать формулу а ссылка на весь столбец не подходит, формула массива и много формул, из за чего сильно тормозит.

Spare_parts.xlsm - книга откуда берутся данные
UTIL_Lifetime.xlsx - книга с формулами

Обновил файлы, в первый раз удалил строки дабы уменьшить размер но забыл оставить правильные строки чтоб увидеть работу формул

Спасибо!
Поиск даты в диапазоне и подстановка значения
 
Вроде так:
Код
=IFNA(LOOKUP(2;1/(диапазоны!A:A<=A5)/(диапазоны!B:B>=A5);диапазоны!C:C);"не попадает в диапазон")
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
На первый взгляд работает так как и хотел.

Спасибо огромное!
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
МатросНаЗебре Добрый день,

Выявил несколько проблем,
    - дата обновляется при каждом изменении ячейке из столбца "J" а так не должно быть.
    - если дата не правильная и исправляю в ручную то срабатывает макрос и ставит текущую дату, так не должно быть.
нужно чтобы макрос ставил дату только при первом заполнении ячейки "J"
я представляю это так: при активации одной ячейки из столбца "K" вставляется дата, при условии что ячейка пустая и также при условии что ячейка из столбца "J"  не пустая.

пробовал внедрить в код пару строк (вставлю ниже) но как оказалось они выключают выполнение макроса и он больше не работает.
Код
    If Target.Column <> 10 Or Target.Row >= 1 And Target.Row <= 2 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

- еще одна проблема в том что в каждом столбце таблицы есть условие на введение данных, но при вводе данных вне таблицы условие не успевает срабатывать  (то есть сначала принимаются введенное значение потом расширяется таблица с условием)
думаю это можно решить если расширять макросом таблицу на одну пустую строку, чтобы всегда была одна пустая строка а при добавление данных в какую либо ячейку из последней строки таблица автоматически расширялась на одну строку, и разблокировать для ввода уже не последнюю строку а последние две.

Спасибо.
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
День рождения вроде 25.04.1962
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
Ігор Гончаренко Я это знаю, и не один раз  так делал и получил решение быстро.

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

Вопрос не по теме но интересно, это как? Регистрация: 01.01.1970
Изменено: Vadim Burlac - 08.12.2021 23:45:03
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
МатросНаЗебре Проверил, вроде все работает как и хотел, единственное в строке If .Cells(1, [J1].Column).Value <> "" Then поменял = на <> чтобы дата выставлялось после заполнения столбца J

Спасибо вам большое.
Изменено: Vadim Burlac - 08.12.2021 21:36:46
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
Oписания задачи по приоритетам.

Есть таблица с данными таблица пополняется практически ежедневно.
    - Нужно чтобы после ввода информации нельзя было изменить
    - Все буквы которые вводится прописные.
    - добавить дату добавления информации.

я вижу это примерно так:
1. блокировать возможность редактирования всех строк таблицы кроме последней, при добавления новой информации таблица расширяется тем самым смещая последнюю строку, остальные можно изменить только при вводе пароля.
2. В столбец "K" вводить дату с условием что соседняя ячейка из столбца "J" не пустая.
3. все что вводится в столбце "B:E" переводить в верхнии регистр.
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
Файл не добавил так как в нём много информации и имеет более 6 Мб, отредактирую чтоб был по меньше и добавлю.  
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
нужно чтобы буквы стали прописными независимо от того каким регистром они пишутся, может есть другой способ...
эта часть не работает...
Код
If Target.Cells.Count > 1 Then Exit Sub    If Not Intersect(Target, Range("J1:J1048576")) Is Nothing Then
        Dim iCell As Range
        Application.EnableEvents = False
        For Each iCell In Target
            With Range("K" & iCell.Row)
                .Value = DateValue(Now)
            End With
        Next iCell
        Application.EnableEvents = True
    End If
Объединить три действия в одном макросе, срабатывающем при изменении в диапазоне
 
Добрый вечер,

Есть три макроса, нашел их на просторах интернета, в том числе и на этом форуме, скорректировал под свой задачи и вроде все три работают правильно но только по отдельность, не хватает навыков соединить их в один рабочии.

Помогите кто может.
Заранее благодарен!!
Код
Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("A1:L1048576")) Is Nothing Then
      If Target.Count > 1 Then Exit Sub
      If Target <> "" Then
   ActiveSheet.Unprotect Password:="123"
   Target.Locked = True
   ActiveSheet.Protect Password:="123"
      End If
      End If
End Sub

Код
Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Cells.Count > 1 Then Exit Sub
   For Each Cell In Target
       If Not Intersect(Cell, Range("J1:J1048576")) Is Nothing Then
     With Range("K" & Cell.Row)
        .Value = DateValue(Now)
          End With
          End If
         Next Cell
End Sub

Код
Private Sub Worksheet_Change(ByVal Target As Range)
       Target = UCase(Target)
End Sub
Из повторяющихся значений оставить одно с наименьшей датой напротив.
 
Та же формула в ФАЙЛ 1
Из повторяющихся значений оставить одно с наименьшей датой напротив.
 
Цитата
написал:
придется преобразовать текстовые строки во втором файле в числа
Я преобразовал в даты  скопировав в текстовой документ и обратно))
Из повторяющихся значений оставить одно с наименьшей датой напротив.
 
Добрый вечер,

Скопировал столбец А в столбец D удалил все дубликаты
В столбец E формула массива которая выдает наименьшую дату из столбца B которая соответствует значению из столбца D

Есть одна проблема, в столбце B есть пустоты и формула читает их как 1990 год но если сделать фильтр на пустоты и поставить например значение "N" то формула их не читает.

Формула:
Код
=(SMALL(IF(A:A=D2;B:B);1))
 ввод через Ctrl+Shift+Enter
Изменено: Vadim Burlac - 06.12.2021 20:00:20
Среднее значения по условию и по строкам
 
Цитата
написал:
Если же по количеству самих значений "Lifetime", то...
Нужно по количеству значении однако вторая формула выдает ошибку, но это не важно....

Я переделал формулы так чтобы значения в Part type отображалось только после того как будет значение в Lifetime B соответственно количество значении ровно количеству блоков умноженное на 2

Дальше переделал первую формулу чтобы получить среднее по значениям, добавил к COUNTIF умножение на 2

Код
=SUM(--IF(H2:T2="New";(OFFSET(H2:T2;0;-1)+OFFSET(H2:T2;0;-2))))/(COUNTIF(H2:T2;"New")*2)

Большое спасибо!

Как не фильтровать скрытые группиривкой данные
 
Самый легкии способ добавить пустую строку между этими  данными и скрыть её.
Если делаете в своём файле то сперва нужно отключить фильтр или после отключить и включить
Среднее значения по условию и по строкам
 
Цитата
написал:
все лишнее. Зачем ?
чтобы было сразу всё понятно и не было дополнительных вопросов...ну или занесло... :)

Попробую ваши формулы вечером и отпишусь.

Спасибо.
Поставить отметку, если дата этого месяца
 
Вроде все просто, зачем макрос?
Я бы сделал так))

Файл прикреплен.
Замена значений на всех листах с одного UserForm
 
Мда.....это что-то с чем-то.... :)  респект  Артёму!

Мне уже не было интересно что за проблема и решение, было интересно когда же Артём сдастся :D  
Изменено: Vadim Burlac - 17.11.2021 00:30:19
Среднее значения по условию и по строкам
 
Добрый вечер,

Перед тем как описать свою проблему хочу сказать большое спасибо всем кто не раз мне помог на этом форуме!

Файл с двумя листами:
    - Sonotrode
    - Sonotrode lifetime

Суть файла: есть оборудование предназначенное для сварки кабелей, на ней имеется счётчик и периодически меняем активную запчасть.
Запчасть имеет две рабочие стороны, после изнашивания одной стороны переворачиваем на другую сторону, потом меняем, при замене или переворачивание пишем счётчик  в листе "Sonotrode", при замене "Counter new part", при переворачивании "Change position A/B", также при замене указываем тип запчасти "Part type", может быть новой (New) или восстановленной (Recond.) Это все что касается листа "Sonotrode"

На втором листе "Sonotrode lifetime" рассчитываю время службы каждой запчасть, каждой стороной по счётчику, рассчитываю блоками из трех столбцов,  в первом столбце сколько отслужила первая сторона, во втором столбце вторая, в третьем столбце тип запчасти. вроде все...

Теперь то с чем нужна помощь:
В листе "Sonotrode lifetime" в столбце  "D" (Aver. lifetime New) нужна формула (например в "D2") которая будет рассчитывать среднее значении диапазона "F2:T2" из тех блоков где в столбце "Part type" имеется значение "New"

Аналогично с столбцом  "E" только меняется условие c "New" на "Recond."

Заранее благодарен и извиняюсь за свой русскии.  
Изменено: Vadim Burlac - 17.11.2021 08:13:04
Копирование с одного листа на другой в переменную ячейку макросом
 
Я по этому и попросил код на форуме, чтобы понять его, чтобы смог потом изменить его для других листов, изменить диапазоны....с формулами поднатаскался а вот с макросами пока что трудно...
Копирование с одного листа на другой в переменную ячейку макросом
 
Цитата
написал:
Если у вас установлен русский язык в системе
Система на англииском, рабочии ноутбук.
Цитата
написал:
С форума его нужно копировать в РУССКОЙ РАСКЛАДКЕ клавиатуры себе в файл
наверное что-то с шрифтом, когда вставляю в файл по любому каракули независимо от раскладке, в блокнот вставляется нормально но после сохранения когда открываю опять каракули, но все же прочитал на форуме.

Еще раз СПАСИБО БОЛЬШОЕ что помогли и написали правильный макрос, назначил его на кнопку и заполняю данные в один клик.

Супер!!! Спасибо!!
Копирование с одного листа на другой в переменную ячейку макросом
 
Цитата
написал:
посмотрите макрос CopyData в приложенном файле
попробовал, делает все правильно, большое спасибо.
Цитата
написал:
Там написаны комментарии, почитайте их
могли бы поставить тут код с комментариями, а то у меня одни каракули, хотелось бы понять и как работает )))
Код
Sub CopyData()
    Dim Rng As Range, NumberOfWeek As String, LastRow As Long

    'çàïîìèíàåì â ïåðåìåííóþ çíà÷åíèå ÿ÷åéêè Ñ2 íà ëèñòå CalculationErrorData
    NumberOfWeek = Worksheets("CalculationErrorData").Range("C2").Value
    
    'ÁËÎÊ 1
    'èùåì íà ëèñòå Data by machine íîìåð íåäåëè èç ÿ÷åéêè Ñ2 ëèñòà CalculationErrorData
    With Worksheets("Data by machine")
        Set Rng = .Rows(2).Find(NumberOfWeek, , xlFormulas, xlWhole)
        If Rng Is Nothing Then
            MsgBox "Óïñ, íîìåð íåäåëè " & NumberOfWeek & " íå íàéäåí íà ëèñòå 'Data by machine'", vbExclamation, "Âíèìàíèå"
            Exit Sub
        End If
        'Rng - ýòî ÿ÷åéêà ñ íàéäåííûì íîìåðîì íåäåëè íà ëèñòå Data by machine
        'MsgBox "Ìû íàøëè ÿ÷åéêó ñ íîìåðîì íåäåëè " & NumberOfWeek & " â ÿ÷åéêå " & Rng.Address(0, 0) & " íà ëèñòå 'Data by machine'", vbInformation, "Óðà!"
        'Rng.Column - ýòî íîìåð ñòîëáöà ñ óêàçàííûì íîìåðîì íåäåëè íà ëèñòå Data by machine
        'Rng.Row - ýòî íîìåð ñòðîêè ñ óêàçàííûì íîìåðîì íà ëèñòå Data by machine
    End With
    
    'êîïèðóåì äàííûå ñ ëèñòà CalculationErrorData
    Worksheets("CalculationErrorData").Range("C3:C44").Copy
    'âñòàâëÿåì äàííûå íà ëèñò Data by machine íà÷èíàÿ ñ 3-é ñòðîêè
    Worksheets("Data by machine").Cells(Rng.Row + 1, Rng.Column).PasteSpecial Paste:=xlPasteValues
   
    'ÁËÎÊ 2
    'èùåì íà ëèñòå Top 3 errors by machine íîìåð íåäåëè èç ÿ÷åéêè Ñ2 ëèñòà CalculationErrorData
    With Worksheets("Top 3 errors by machine")
        Set Rng = .Rows(2).Find(NumberOfWeek, , xlFormulas, xlWhole)
        If Rng Is Nothing Then
            MsgBox "Óïñ, íîìåð íåäåëè " & NumberOfWeek & " íå íàéäåí íà ëèñòå 'Top 3 errors by machine'", vbExclamation, "Âíèìàíèå"
            Exit Sub
        End If
        'Rng - ýòî ÿ÷åéêà ñ íàéäåííûì íîìåðîì íåäåëè íà ëèñòå Top 3 errors by machine
        'MsgBox "Ìû íàøëè ÿ÷åéêó ñ íîìåðîì íåäåëè " & NumberOfWeek & " â ÿ÷åéêå " & Rng.Address(0, 0) & " íà ëèñòå 'Data by machine'", vbInformation, "Óðà!"
        'Rng.Column - ýòî íîìåð ñòîëáöà ñ óêàçàííûì íîìåðîì íåäåëè íà ëèñòå Top 3 errors by machine
        'Rng.Row - ýòî íîìåð ñòðîêè ñ óêàçàííûì íîìåðîì íà ëèñòå Top 3 errors by machine
    End With
    
    'êîïèðóåì äàííûå ñ ëèñòà CalculationErrorData
    With Worksheets("CalculationErrorData")
        'íîìåð ïîñëåäíåé ñòðîêè â ñòîëáöå Í íà ëèñòå CalculationErrorData
        LastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
        .Range("G3:H" & LastRow).Copy
    End With
    'âñòàâëÿåì äàííûå íà ëèñò Top 3 errors by machine íà÷èíàÿ ñ 3-é ñòðîêè
    Worksheets("Top 3 errors by machine").Cells(Rng.Row + 1, Rng.Column).PasteSpecial Paste:=xlPasteValues
    
    
    'ÁËÎÊ 3
    'èùåì íà ëèñòå Quantity errors íîìåð íåäåëè èç ÿ÷åéêè Ñ2 ëèñòà CalculationErrorData
    With Worksheets("Quantity errors")
        Set Rng = .Rows(2).Find(NumberOfWeek, , xlFormulas, xlWhole)
        If Rng Is Nothing Then
            MsgBox "Óïñ, íîìåð íåäåëè " & NumberOfWeek & " íå íàéäåí íà ëèñòå 'Quantity errors'", vbExclamation, "Âíèìàíèå"
            Exit Sub
        End If
        'Rng - ýòî ÿ÷åéêà ñ íàéäåííûì íîìåðîì íåäåëè íà ëèñòå Quantity errors
        'MsgBox "Ìû íàøëè ÿ÷åéêó ñ íîìåðîì íåäåëè " & NumberOfWeek & " â ÿ÷åéêå " & Rng.Address(0, 0) & " íà ëèñòå 'Data by machine'", vbInformation, "Óðà!"
        'Rng.Column - ýòî íîìåð ñòîëáöà ñ óêàçàííûì íîìåðîì íåäåëè íà ëèñòå Quantity errors
        'Rng.Row - ýòî íîìåð ñòðîêè ñ óêàçàííûì íîìåðîì íà ëèñòå Quantity errors
    End With
    
    'êîïèðóåì äàííûå ñ ëèñòà CalculationErrorData
    With Worksheets("CalculationErrorData")
        'íîìåð ïîñëåäíåé ñòðîêè â ñòîëáöå L íà ëèñòå CalculationErrorData
        LastRow = .Cells(.Rows.Count, "L").End(xlUp).Row
        .Range("L3:L" & LastRow).Copy
    End With
    'âñòàâëÿåì äàííûå íà ëèñò Quantity errors íà÷èíàÿ ñ 3-é ñòðîêè
    Worksheets("Quantity errors").Cells(Rng.Row + 1, Rng.Column).PasteSpecial Paste:=xlPasteValues
       
    MsgBox "Êîïèðîâàíèå äàííûõ çàâåðøåíî!", vbInformation, "Êîíåö"
End Sub
Копирование с одного листа на другой в переменную ячейку макросом
 
Цитата
написал:
А на каком активном листе вы запускаете свой макрос?
Запускаю на листе CalculationErrorData

скопировать диапазон с одного листа на другой получается, в моем файле если запустить макрос он все сделает
но дело в том что на листе CalculationErrorData в ячейке С2 формула которая рассчитывает неделю с листа ErrorData  

В ячейки О1, О3, О5 формулы гиперссылки которые переходят на нужные листы, рассчитывают нужную ячейку в зависимости от результата ячейки С2, если в С2 "WK44" то гиперссылки переходят в первую строку в столбец где "WK44"

мой макрос записал адрес этой ячейки и даже если в С2 будет "WK45" макрос все равно скопирует в столбец "WK44", а нужно чтобы записал в "WK45"
Цитата
Вы из какого листа куда копируете?
Копирую с листа CalculationErrorData

Столбец "C" копирую на лист Data by machine
Столбец "G:H" копирую на лист Top 3 errors by machine
Столбец "L" копирую на лист Quantity errors
Изменено: Vadim Burlac - 07.11.2021 00:56:41
Копирование с одного листа на другой в переменную ячейку макросом
 
Добрый вечер,

Есть файл с несколькими листами, если коротко то в первом листе вставляются входные данные собранные сервером, во втором листе формулы которые обрабатывают эти данные, в следующие листы вставляются рассчитанные данные.

Есть гиперссылки через формулы которые переходят в нужную ячейку на нужном листе.

Хотел записать макрос который будет копировать все данные в нужные листы.
С макросами не очень, по этому записал макрос через рекордер, на первый взгляд всё хорошо но потом понял что при нажатии на гиперссылку макрос записывает не запуск гиперссылки а результат формулы то есть адрес ячейки, а это неправильно так как результат может изменятся в зависимости от введенных данных на первом листе.

вот формула одной гиперссылки
Код
=HYPERLINK("[Error Data per Week.xlsm]"&ADDRESS(1;MATCH(C2;'Data by machine'!A2:BC2;0);4;1;"Data by machine");"Data by machine")

вот часть кода которая записывается при нажатии на эту гиперссылку ( которая я думаю неправильна)
Код
Range("O1:R2").Select
    Application.Goto Reference:="'Data by machine'!R1C47"  

вот весь код, код можн сказать повторяется, копирую данные с листа расчётов, нажимаю нужную гиперссылку, перехожу в нужную ячейку, вставляю значения, нажимаю гиперссылку для перехода обратно на лист с расчетами, выбираю другие данные, копирую,  нажимаю другую гиперссылку.....и так далее...  
Код
Sub test1()
'
' test1 Macro
'

'
    Range("C1:C44").Select
    Selection.Copy
    Range("O1:R2").Select
    Application.Goto Reference:="'Data by machine'!R1C47"
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
    Columns("G:H").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("O3:R4").Select
    Application.Goto Reference:="'Top 3 errors by machine'!R1C89"
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
    Columns("L:L").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("O5:R6").Select
    Application.Goto Reference:="'Quantity errors'!R1C46"
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End Sub 
Изменено: Vadim Burlac - 07.11.2021 00:06:08
Найти совпадения кода в столбце1 и записать значение из столбца2 той строки, где находится наибольшее значение столбца3
 
Спасибо большое всем за помощь!
Найти совпадения кода в столбце1 и записать значение из столбца2 той строки, где находится наибольшее значение столбца3
 
Цитата
БМВ написал:
то язык интерфейса Eng.
да, так и есть... рабочий ноутбук, не могу и нельзя менять
Найти совпадения кода в столбце1 и записать значение из столбца2 той строки, где находится наибольшее значение столбца3
 
Цитата
Светлый написал: Разные локации.
работает!
не понял про локации, проверил формулы, идентичны, что-то в настройках?
Найти совпадения кода в столбце1 и записать значение из столбца2 той строки, где находится наибольшее значение столбца3
 
БМВ, формула работает!

Цитата
БМВ написал: а что если будет совпадение максимума у двух разных механизмов?
об этом не подумал... но можно добавить проверку столбца "D"
Страницы: 1 2 След.
Наверх