3. Запрещено ... 3.2. Использовать в сообщениях, подписях и логинах на форумах нецензурную лексику, текст с пЕреМеНнЫм регистром или бессмысленным набором символов, заменять буквы другими символами.
Согласие есть продукт при полном непротивлении сторон
Вы понимаете что такое файл-ПРИМЕР? Тут не нужны все данные от Вашего логиста
Цитата
2.3. Приложите файл(ы) с примером (общим весом не более 300Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
И над названием Темы подумайте и предложите (тут, в сообщении) новое, соответствующее правилам Форума
Цитата
2.1. Название темы должно отражать смысл проблемы. ...
Пока вопрос к Excel отношения не имеет. Вам нужно на форум экономистов.
Согласие есть продукт при полном непротивлении сторон
Выбор строки с наибольшим значением, Из избранных строк в таблице, выбор строки целиком с наибольшим значением итоговой оценки.
Модератор
Сообщений: Регистрация: 10.01.2013
31.03.2026 10:32:26
В файле покажите желаемый результат. Хотя бы для НК и объясните по каким критериям он лучший
Согласие есть продукт при полном непротивлении сторон
Закрепить диапазон данных в группировке данных, сгруппированные данные, закрепление диапазона при расчете формулы
Модератор
Сообщений: Регистрация: 10.01.2013
31.03.2026 10:29:54
Согласие есть продукт при полном непротивлении сторон
Макрос для замены данных в активной ячейки
Модератор
Сообщений: Регистрация: 10.01.2013
31.03.2026 07:30:37
Тогда так
Код
If Intersect(Union([G1:G10000], [H1:H10000]), Target) Is Nothing Or Target.Count <> 1 Then Exit Sub
остальное - без изменений (макрос из сообщения #9)
Согласие есть продукт при полном непротивлении сторон
Макрос для замены данных в активной ячейки
Модератор
Сообщений: Регистрация: 10.01.2013
31.03.2026 07:06:28
Цитата
YuriBarvi1983 написал: Как исправить, чтобы писало в одной
Вам нужно что-бы менялись данные в одной ячейке? Или в конкретном диапазоне? Или что Вам нужно? Может угадал? См. комментарии в коде
Скрытый текст
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'для всех ячеек столбцов 'G' и 'H'
If Intersect(Union(Columns("G"), Columns("H")), Target) Is Nothing Or Target.Count <> 1 Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long, Tmp
Tmp = Target
fndList = Array("FHH", "FGA", "+")
'в строке ниже 'Target.Column =...' должно быть равно НОМЕРУ столбца, для которого 'проверено...', во втором будет 'зачищено...'
rplcList = IIf(Target.Column = 8, Array("FST", "FPT", "проверено"), Array("FST", "FPT", "зачищено"))
For x = LBound(fndList) To UBound(fndList)
Target.Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next x
If Tmp <> Target Then Target = Target & " - " & Date
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
Макрос для замены данных в активной ячейки
Модератор
Сообщений: Регистрация: 10.01.2013
31.03.2026 06:18:27
Порадовало
Код
Private Sub Worksheet_Yuri(ByVal Target As Range)
Скрытый текст
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Union(Columns("A"), Columns("B")), Target) Is Nothing Or Target.Count <> 1 Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long, Tmp
Tmp = Target
fndList = Array("FHH", "FGA", "+")
rplcList = IIf(Target.Column = 1, Array("FST", "FPT", "проверено"), Array("FST", "FPT", "зачищено"))
For x = LBound(fndList) To UBound(fndList)
Target.Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next x
If Tmp <> Target Then Target = Target & " - " & Date
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
Динамические примечания
Модератор
Сообщений: Регистрация: 10.01.2013
31.03.2026 02:45:55
Цитата
Kofevark написал: Что-то типа комментария или примечания
В модуль листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Call Several
End Sub
В общий модуль
Скрытый текст
Код
Sub Several()
Dim arr()
Dim rngGrafik As Range
Dim iCl As Range
Dim iDt As Date
Dim iTxt$
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Лист1") 'лист с Графиком и таблицей
arr = .Range("G4:I" & .Cells(.Rows.Count, "I").End(xlUp).Row).Value 'адрес таблицы с обозначениями
Set rngGrafik = .Range("B4:E7") 'адрес диапазона-графика
For Each iCl In rngGrafik.SpecialCells(xlCellTypeFormulas).Cells
If iCl = "неск." Then
iDt = CDate(rngGrafik(1, iCl.Column - 1).Value) ' -1 - смещение по столбцам (диапазон-график начинается со столбца 'B')
For I = LBound(arr, 1) To UBound(arr, 1)
If iDt = CDate(arr(I, 1)) Or iDt = CDate(arr(I, 2)) Then
iTxt = IIf(iTxt = "", arr(I, 3), iTxt & vbCrLf & arr(I, 3))
End If
Next
With iCl
.ClearComments
.AddComment
.Comment.Text (iTxt)
.Comment.Shape.TextFrame.AutoSize = True
End With
End If
Next
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Макрос срабатывает при любом изменении в любой ячейке на листе 'Лист1'
Согласие есть продукт при полном непротивлении сторон
Поиск значений по частичному совпадению
Модератор
Сообщений: Регистрация: 10.01.2013
30.03.2026 14:05:55
Версия Excel?
Согласие есть продукт при полном непротивлении сторон
Согласие есть продукт при полном непротивлении сторон
Выбрать из массива значения отличающиеся друг от друга на определенную величину (шаг), Поиск другого решения трудоёмкой прикладной специфической задачи
Модератор
Сообщений: Регистрация: 10.01.2013
30.03.2026 10:37:58
Разнес по столбцам. См.файл
Согласие есть продукт при полном непротивлении сторон
Динамические примечания
Модератор
Сообщений: Регистрация: 10.01.2013
30.03.2026 04:31:03
Динамическое примечание можно сделать только макросом, но Вашу формулу можно заменить на такуй, которая будет собирать эти несколько значнний в нужную ячейку
Согласие есть продукт при полном непротивлении сторон
Имена умных таблиц, Как при помощи VBA задать имена Умных таблиц, используя Имя Листа и значение из Умной таблицы
Модератор
Сообщений: Регистрация: 10.01.2013
29.03.2026 13:31:58
Код
Private Sub Test()
Dim t As ListObject
For Each t In ActiveSheet.ListObjects
With t
.Name = .Parent.Name & "_" & .HeaderRowRange(1).Text
End With
Next
End Sub
Согласие есть продукт при полном непротивлении сторон
Неправильное отображение результата формул
Модератор
Сообщений: Регистрация: 10.01.2013
29.03.2026 04:35:21
Хотя-бы скриншоты приложите. Без ошибок и с ошибкой. И какие формулы в этих ячейках то-же не мешало бы видеть.
Согласие есть продукт при полном непротивлении сторон
Выбор значения из таблицы по условию, не работает ВПР
Модератор
Сообщений: Регистрация: 10.01.2013
28.03.2026 07:17:36
У ВПР() есть необязательный, но очень важный третий параметр. =ВПР(B13;данные!$A$2:$B$13;2;0) и будет Вам счастье
Изменено: - 28.03.2026 07:17:55
Согласие есть продукт при полном непротивлении сторон
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 13:08:55
Цитата
Дмитрий(The_Prist) Щербаков написал: свойство по умолчанию VBA может выбрать на свое усмотрение... VBA применит ClearContents...
В этом конкретном случае или всегда ClearContents?
Согласие есть продукт при полном непротивлении сторон
Выбор значения из таблицы по условию, не работает ВПР
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 13:04:58
60 сообщений на форуме и с Правилами не знакомы? Название Темы не о чем. Закрыто Изменил название темы, учтите на будущее
Изменено: - 28.03.2026 07:16:10
Согласие есть продукт при полном непротивлении сторон
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 10:41:58
Дмитрий, вот теперь все встало на место, спасибо большое)
Согласие есть продукт при полном непротивлении сторон
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 10:35:42
Да, я переопределяю ВТОРОЙ объект, но почему изменяется ПЕРВЫЙ? Т.е. из двух объектов, после таких манипуляций, остается один?
Согласие есть продукт при полном непротивлении сторон
Протянуть формулу с определенным шагом
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 09:52:11
ignatukcp, файл-пример (Excel) приложите. Как есть - Как надо
Согласие есть продукт при полном непротивлении сторон
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 09:44:37
Не, это все я понимаю. Не дает покоя некоторая противоречивость) Тут то мы создаеи ДВА НЕЗАВИСИМЫХ объекта
Код
Set dic = CreateObject("Scripting.Dictionary")
Set dicCopy = CreateObject("Scripting.Dictionary")
но почему
Цитата
MikeVol написал: dicCopy - после Set dicCopy = dic указывает на тот же самый объект.
Наверное это перекликается с
Согласие есть продукт при полном непротивлении сторон
Сплайн-интерполяция (UDF)
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 07:39:04
Переносим в Копилку?
Согласие есть продукт при полном непротивлении сторон
Выбрать из массива значения отличающиеся друг от друга на определенную величину (шаг), Поиск другого решения трудоёмкой прикладной специфической задачи
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 05:46:41
Цитата
ПавелW написал: ...но с учётом количества таких формул - будет несколько ресурсоёмко)
Цитата
Дмитрий Никитин написал: Время обработки данных на моём компьютере - в районе 3 секунд.
Решение макросом. Время - около 100 МИЛЛИсекунд )
Скрытый текст
Код
Option Base 1
Sub Pathfinder()
Const Bg& = 50, Ed& = 2000, Sp& = 50 'первое значение шага, последнее значение шага, шаг
Dim arr()
Dim arrItog()
Dim dic As Object
Dim dicItog As Object
Dim I&, J&, N&, ii&
Dim iKey, iTmp, iVr
Dim tm As Single
tm = Timer
On Error Resume Next
Application.ScreenUpdating = False
With Worksheets("Условия")
arr = .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row).Value
End With
Set dic = CreateObject("Scripting.Dictionary")
Set dicItog = CreateObject("Scripting.Dictionary")
ReDim arrItog(1 To UBound(arr, 1), 1 To Int(Ed / Sp))
ReDim iTmp(1 To 1)
For N = Bg To Ed Step Sp
For I = LBound(arr, 1) To UBound(arr, 1): iVr = dic(arr(I, 1)): Next
For I = LBound(arr, 1) To UBound(arr, 1)
iKey = arr(I, 1)
If dic.Exists(iKey + N) Then
J = 1
For ii = I To UBound(arr, 1)
If dic.Exists(iKey + N * J) Then
dic.Remove (iKey + N * J)
J = J + 1
End If
Next
J = J - 1
iTmp(UBound(iTmp)) = iKey & " [" & J & "]"
ReDim Preserve iTmp(UBound(iTmp) + 1)
End If
Next
dicItog.Add N, iTmp
ReDim iTmp(1 To 1)
Next
N = 0: J = 0
For Each iKey In dicItog.Keys
J = J + 1
iTmp = dicItog(iKey)
For I = LBound(iTmp) To UBound(iTmp)
N = N + 1
arrItog(N, J) = iTmp(I)
Next
N = 0
Next
With Worksheets("МАКРОС")
.UsedRange.Value = Empty
.Range("A1").Resize(, dicItog.Count) = dicItog.Keys
.Range("A2").Resize(UBound(arrItog, 1), UBound(arrItog, 2)) = arrItog
.Activate
End With
Application.ScreenUpdating = True
MsgBox "Done!" & vbCrLf & Round((Timer - tm) * 1000, 0) & " мсек.", vbOKOnly
End Sub
Не стал разносить значение и количество по разным столбцам (при необходимости можно доработать) Макросу не нужен список шагов. В коде задаются первое/последнее значения и сам шаг. Можно сделать - Начало/Шаг/Количество шагов Можно их вбивать на листе, а не в коде На листе 'Условия' нажмите на кнопку
Согласие есть продукт при полном непротивлении сторон
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
Модератор
Сообщений: Регистрация: 10.01.2013
27.03.2026 05:18:23
Всем привет. Столкнулся с таким неприятным моментом. Есть необходимость работать с Копией словаря, в т.ч. и с удалением элементов из нее. Словарь-родитель должен при этом оставаться неизменным, но при удалении элементов из копии так-же удаляется элемент из основного словаря Не хотелось-бы каждый раз при изменении копии перезаполнять основной, да и смысл в копии тогда теряется. В чем причина такого поведения? Как обойти? Спасибо
Скрытый текст
Код
Sub Remove_From_dicCopy()
Dim arr()
Dim dic As Object
Dim dicCopy As Object
Dim iTmp, iKey
Set dic = CreateObject("Scripting.Dictionary")
Set dicCopy = CreateObject("Scripting.Dictionary")
With Worksheets("Лист1")
arr = .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row).Value
'заполняем основной словарь Ключами, без значений
For Each iKey In arr
iTmp = dic(iKey)
Next
'копия основного словаря
Set dicCopy = dic
'удаляем из КОПИИ словаря ключи, кратные 3 (не важно какие)
For Each iKey In dicCopy.Keys
If iKey Mod 3 = 0 Then dicCopy.Remove (iKey)
Next
.Range("D2").Resize(dic.Count) = Application.Transpose(dic.Keys)
.Range("E2").Resize(dicCopy.Count) = Application.Transpose(dicCopy.Keys)
End With
End Sub
УПС. Вопрос, наверное, исчерпан в той теме) Хотя, как мне кажется, остался не раскрыт вопрос - ПОЧЕМУ? Если я создаю переменную (dicCopy), то под нее выделяется свой участок памяти (или ошибаюсь?) Вот что пишут у соседей
Цитата
Апострофф Привет! Наверно потому, что dic2 = dic1 т.е. это один и тот же объект
?
Мне нужно было для решения в теме
Изменено: - 27.03.2026 08:20:51(нашел обсуждение на другом форуме)
Согласие есть продукт при полном непротивлении сторон