Добрый день, Алексей! Спасибо, да, есть такая проблема. Обычно пустые фигуры - прямоугольники появляются и при копировании-вставке с сайтов. Просто удалять, наверное, некорректно, нужно будет проверять, что они пустые. Давно напрашивается сделать к коду надстройку, подумаю.
irabel написал: Если диаграмма находится правее (ниже) последнего столбца с данными (строки), то макрос удаляет такую диаграмму.Поправил немного код, заменил
Zagadka написал: Мне кажется, я его как раз и использовал...или какой-то более старый вариант
У Вас там была предыдущая версия №3 от 2010-06-16. А здесь использовал версию №4 от 2019-03-08, в которой вместо очистки содержимого ячеек они удаляются вместе с форматами и т.п., подробности есть в теме по ссылке моего предыдущего сообщения.
Zagadka написал: Кто может что подсказать из своего опыта?
Добрый день! Использовал код, который когда-то публиковал, сократило сильно (приложил). На большинстве листах, если нажать Ctrl-End, то попадаем к последний столбец листа. Это означает, что множество столбцов и их ячеек справа от данных избыточно попадают в используемый диапазон (UsedRange) и сохраняются в книге.
Ярослав Малышенко написал: Game over но в это время все могут читать текст.
Собственно, сообщение Game over - лишнее, достаточно очистки листа. А задержать игру в Excel можно разными способами: двойной или правый клик, сочетание клавиш, например Ctrl-F, нажать что-нибудь на ленте с диалогом или сообщением и т.п. Фанаты Dictator application это тоже отключают, но здесь вряд ли имеет смысл. Приложил вариант без сообщений с таймером в формате "hh:mm:ss" и с блокировкой (код в модуле листа2) двойного и правого клика
Изменено: ZVI - 07.04.2024 03:01:34(Исправлены кодовые имена листов на Sh1 и Sh2 - спасибо Владимиру (Sokol92)!)
Andypetr, доброе утро. Да это хороший вариант, только автору темы, возможно, удобнее минуты и секунды отображать. Ещё у автофигур обновление надписи прекращается при редактировании ячейки (по F2), а вот Application.StatusBar обновляется и в этом случае. Прорабатывал вариант и с API-таймером с одной кнопкой Start/Stop без MsgBox-ов. Но интерфейс пусть лучше себе автор темы выбирает.
Добрый день, правильнее тему было бы назвать "Копия диапазона, отсортированного в случайном порядке строк, с таймером" Приложил решение.
Код
Код
Option Explicit
Dim dt As Date
Sub Create_Random()
' ZVI:2024-04-05 https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&TID=164251
Const TimeLimit = "00:00:15" ' "hh:mm:ss"
Dim a(), b()
If dt > 0 Then
MsgBox "Game is running, use Stop", vbExclamation, "Restart is blocked"
Exit Sub
End If
' Main
With Лист1.Range("A1:B1").CurrentRegion.Resize(, 3)
a() = .Value
With .Columns(3)
.Formula = "=RAND()"
.Value = .Value
End With
.Sort .Cells(3), xlAscending, Header:=xlYes
b() = .Value
.Value = a()
End With
' Write result
Лист2.UsedRange.Offset(1).ClearContents
Лист2.Range("A1:B1").Resize(UBound(a)).Value = b()
' Reset UsedRange
With Лист1.UsedRange: End With
With Лист2.UsedRange: End With
' Charge stop timer
dt = Now + TimeValue(TimeLimit)
Application.OnTime dt, "StopTheGame"
End Sub
Sub StopTheGame()
If dt > 0 Then
Application.OnTime Now, "Auto_Close"
MsgBox "Game is over!", vbInformation, "Game Timer"
End If
Лист2.UsedRange.Offset(1).ClearContents
End Sub
Private Sub Auto_Close()
On Error Resume Next
If dt > 0 Then Application.OnTime EarliestTime:=dt, Procedure:="StopTheGame", Schedule:=False
dt = 0
End Sub
Alex_ST написал: кнопки включения/отключения на панелях не создаются...
Алексей, привет! Кнопки создаются, где - я обозначил в предыдущем сообщении:
Цитата
В современных версиях Excel две кнопки надстройки будут на ленте на вкладке Надстройки.
Цитата
Хотел попробовать расковырять, а проект запаролен
А вот нечего ковырять что попало! Код собственно выделения, который в надстройке, открыт в Пример_таблицы_коорд_выделения_версия3.xls - см. модуль листа1, этот код работает и без надстройки. И обсуждался в той теме. Да и какая там в VBA защита...
Добрый вечер всем. Тема вечная ) Еще вот здесь выкладывал надстройку координатного выделения. Там в архиве есть файл Пример_таблицы_коорд_выделения_версия3.xls для тестирования с объединенными ячейками и заголовками, на которых альтернативные варианты координатного выделения могут выглядеть не очень адекватно. Также обычно в альтернативных решениях перемещение на очередную ячейку очищает буфер обмена и нельзя, например, пользоваться отменами по Ctrl-Z. И есть проблемы работы на защищенных листах. Все эти нюансы были учтены в надстройке ZVI_CoordSelection.xla. Там 3-я версия, была и 4я, но отличия не принципиальные. В современных версиях Excel две кнопки надстройки будут на ленте на вкладке Надстройки. Одна из кнопок включает-выключает, вторая открывает форму выбора варианта выделения. В архиве есть и справка. Давно это было (2008г), но описанные нюансы до сих пор актуальны )
Изменено: ZVI - 03.04.2024 18:52:28(Добавлено про работу на защищенных листах)
У Вас 4 листа и 6 диаграмм и не очень понятно, с какими именно данными "такая же проблема". Взял 'Тренд (проба)'!A2:C8, посчитал (см. приложение) коэффициенты тренда для yy в C14:C18 по формулам, приведенным в ссылке моего предыдущего письма. Затем по этим коэффициентам рассчитал значения в E3:E9 и построил расчетный график тренда (Trend yy). Коэффициенты и расчетные значения 'Trend yy' хорошо совпали со значениями встроенного полиномиального тренда диаграммы. На основе приложенных расчетов посмотрите самостоятельно, что именно посчитано не так у Вас.
Решение оптимизационной задачи о назначении, Необходимо распределить автобусы разной вместимости на конкретные рейсы с учетом мощности пассажиропотока на них
Добрый вечер, Алексей! У Вас все выглядит логично, мне нравится! Формулы можно немного упростить, но это не важно. В реальных задачах должно еще существовать ограничение на автомобильный парк – сколько автомобилей определенной вместимости имеется, от этого зависит решение. Но здесь, похоже, задача теоретическая.
papaflash написал: данные в получаемом ответе не обновляются
Данные кэшируются локально. Весь кэш браузера чистится, например, так: CreateObject("wscript.shell").Run "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255", 0, True С помощью API DeleteUrlCacheEntry можно чистить кэш конкретного URL.
Sub Optimize() '--> Менять здесь: Const УстановитВ = "B18:M18" Const Значения = "B3:M3" Const Изменяя = "B7:M7" '<-- Dim i AsLong Application.MaxChange = 0.00001 With Range(УстановитВ) For i = 1 To .Cells.Count If .Cells(i).HasFormula Then .Cells(i).GoalSeek Goal:=Range(Значения).Cells(i), ChangingCell:=Range(Изменяя).Cells(i) Range(Изменяя).Cells(i) = Round(Range(Изменяя).Cells(i), 0) EndIf Next EndWith EndSub
Решение оптимизационной задачи о назначении, Необходимо распределить автобусы разной вместимости на конкретные рейсы с учетом мощности пассажиропотока на них
Если задача теоретическая или учебная, то уменьшить количество переменных и объяснить причину. Или попытаться использовать какой-нибудь другой солвер, например, OpenSolver, не имеющих таких ограничений на количество переменных. Можно вместо Excel использовать LibreOffice, там вроде OpenSolver и используется. Но много вариантов перебрать также не получится, так как перебор через пересчет формул на листе - медленный. Если же задача коммерческая, то она же будет иметь приличный коммерческий эффект, в т.ч. и с учетом затрат на заказ коммерческого решения.
Решение оптимизационной задачи о назначении, Необходимо распределить автобусы разной вместимости на конкретные рейсы с учетом мощности пассажиропотока на них
написал: Думал может их можно как-то обойти... или на C написать макрос...
Перебирать все варианты - жизни не хватит. Вариант - перебирать большое количество вариантов по Монте-Карло, фиксируя минимальное значение решения. Лучше на оптимизированном коде в C, конечно, чтобы больше вариантов было за разумное время. Вот здесь использовал такой подход, но на другой задаче
Решение оптимизационной задачи о назначении, Необходимо распределить автобусы разной вместимости на конкретные рейсы с учетом мощности пассажиропотока на них
Что пытались сделать и с какой конкретно проблемой столкнулись – не написано, и в файле параметры Поиска решения пустые. Собственно, и просьб в сообщении нет.
Файл посмотрел, сочувствую – такие задачи встроенным в Excel Поиском решения не решить из-за ограничения – не более 200 переменных.
Nadezhda995 написал: Некорректно срабатывает функция Разндат
Добрый день! РАЗНДАТ всегда работала хитро, выдавая в некоторых случаях отрицательные дни или неправильно их считая.
Это устаревшая функция для совместимости с древними версиями, давно не рекомендованная Microsoft к применению. Особенности этой функции и ее замена VBA-функцией обсуждались в 2008г. в теме Разница дат
P.S. В Вашем случае =РАЗНДАТ("31.03.2024";"07.12.2026";"m") сработала корректно, т.к. разница 2 года 10 мес. 7 дн., в месяцах это 32. Но зачем там +1 непонятно. Если бы прибавлялся 1 день для стажа, то смысл есть, но у Вас прибавляется 1 месяц.
Igor Paperin, добрый день, и все же добро пожаловать на Планету! Видел Ваше сообщение #1 ранее в ветке Работа. Там ему точно не место: Вы – не Заказчик конкретной работы, а для исполнителя Вам там рановато быть согласно Правилам ветки. Получается, одно из двух: либо Вы не ознакомились с Правилами, либо решили их проигнорировать. И то и другое сводит на нет всю солидность Вашего предложения о сотрудничестве.
Здесь, в Курилке как бы нет ограничений, хотя вроде бы обсуждалось, что сообщения рекламного характера нужно сначала согласовывать с админом. Можете попросить модераторов, чтобы просто удалили тему, если посчитаете, что она сработала против Вас. Активность похвальна, просто учитывайте правила.
Всем местным - ну, кто из нас не ошибался? Может, вернемся к обсуждению тематики Excel? Хотя, это же Курилка )
Очень печальное известие. Соболезную семье и близким.
Он активно участвовал здесь, а потом создал и поддерживал свой креативный сайт по Excel, ставший точкой сбора знаний и решений его множества участников.
Остались фотки онлайн встреч, которые Сергей неоднократно организовывал, остался его чудесный сайт и светлая память о Сергее Изотове.
Для инфо: В современных операционках буфер обмена (БО) - множественный: хранит не только последнее, но и предыдущие значения, а там могут быть тяжеловесные объекты. Перейдите на рабочий стол и нажмите Win+V - откроется панель БО операционной системы. Такое нововведение (с Win10 вроде бы) тормозит работу приложений с БО. От его заполненности и неповоротливости зависят и задержки. OpenClipboard(0) очищает лишь последнее значение в буфере обмена. Excel использует свой собственный БО, который взаимодействует и с БО операционной системы. Кроме того, есть приложения, которые мониторят содержимое БО, что еще добавляет проблем. Тестировать код лучше с БО операционки, набитым всякими разными данными.