Valery37, Добрый день. Нужно добавить 2 строки и 4 точки:
Код
Sub Подборка()
Dim I As Long, j As Long, a(), b()
Application.ScreenUpdating = False
a = Sheets("Лимон").UsedRange.Value ': Cells.Clear
With Sheets("Яблоко")
For I = 2 To UBound(a, 2) ' с какого столбика копировать "i = 4"
j = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
b = Application.Index(a, 0, I)
.Cells(j, 1).Resize(UBound(b)).Value = b
Next
.Columns(1).SpecialCells(4).Delete xlUp
End With
End Sub
Изменено: Hugo - 15.09.2025 11:52:33(ошибся в посте (не в коде) - не 3, а 4 точки)
Ольга Фадеева, если используете VBA и Эксель старый - то вот код UDF P.S. посмотрел файл - для этой UDF нужно сперва заполнить пустые ячейки значениями. Или доработать код.
- ну не выделять ничего никак не получится, Ваш код выделял всё что вставил, я предлагаю выделить одну определённую ячейку. Ну а Copy согласен можно убрать, т.к. не озвучено зачем оно там написано.
Ну или можно так чуть одну строку кода доработать (и выделение перевести, раз требовалось):
Код
Sub xx()
With Application
.ScreenUpdating = 0: .EnableEvents = 0: .DisplayAlerts = False
Open ActiveWorkbook.Path & "\1.txt" For Input As #1
With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText CreateObject("OlePrn.OleCvt.1").ToUnicode(Input$(LOF(1), 1), 65001)
.PutInClipboard
End With
Close #1
With [A2]
Range(.Cells, .End(xlDown)).ClearContents
.Cells(1).PasteSpecial xlPasteAll
.Copy
End With
.CutCopyMode = 0
[A1].Select
.ScreenUpdating = 1: .EnableEvents = 1: .DisplayAlerts = 1
End With
End Sub
Можно любой подсказанной ботом процедурой в начале макроса перекодировать текст куда-нибудь в Temp, далее как написано. А чтоб не выделялось - убрать .copy, и активировать например [A1]
Мэйвис, вот например для приложенного файла - выделить ячейки, выполнить код:
Код
Sub tt()
Dim c
For Each c In Selection
c.Value = "'" & Trim(Replace(c.Value, " 1 шт.", ""))
Next
End Sub
P.S. Только смотрю там местами (в примере всюду, кроме одного) ведущие пробелы лишние, можно ещё для порядка и их убрать, добавил это в код. И чуть его сократил.
hAWK123, тут и формула, и макрос (UDF), но можно делать через ЕСЛИ(ОБЪЕДИНИТЬ()). Но если такие у Вас есть P.S. @ Эксель сам поставил, можно убрать, но не мешает. Если нет УНИК(), ОБЪЕДИНИТЬ(), ФИЛЬТР() - можно UDF использовать. Или написать сразу одну на всю работу, но без динамических массивов придётся угадывать с диапазоном куда её вводить, или вводить с запасом.
Maxleon написал: Может быть есть какой то способ вытащить то что видно?
- для тех кто боится UDF - скопировать столбец в текст (блокнот), затем скопировать назад на лист в ячейки отформатированные как текст. И далее слить как уже умеете.
Для первого файла вполне отрабатывает такая простая UDF
Скрытый текст
Код
Function TimeSum(r)
Dim t1 As Date, t2 As Date
Dim c, a, x, sm
r = r.Value
For Each c In r
If InStr(c, "-") Then
a = Split(c, "-")
t1 = a(0): t2 = a(1)
x = (t2 + -(t2 < t1)) - t1
sm = sm + x
End If
Next
TimeSum = sm
End Function
Для второго не годится - всякие 24:00 и 24:02 не по феншую, нет такого времени, их дополнительно в коде нужно обрабатывать. P.S. хотя можно добавить одну строку...
Скрытый текст
Код
Function TimeSum(r)
Dim t1 As Date, t2 As Date
Dim c, a, s$, x, sm
r = r.Value
For Each c In r
If InStr(c, "-") Then
a = Split(c, "-")
s = Replace(a(1), "24:", "00:")
t1 = a(0): t2 = s
x = (t2 + -(t2 < t1)) - t1
sm = sm + x
End If
Next
TimeSum = sm
End Function
Как вариант - т.к. особого разнообразия не наблюдается (всего 16 вариантов), то можно где-то сделать таблицу соответствия с количеством минут, и подтягивать из неё. По примеру непонятно какие именно суммы интересуют и куда. Слева чтоль по строке выводить? Приложил файл.
Шарон, Добрый день. Извлечь из этих текстовых строк данные в два столбца, где будет дата и время начала работы и дата и время окончания работы, и тогда достаточно просуммировать разности. Иначе намучаетесь, особенно с Вт 21:00-7:00
Поддержу совет MadNike. Можете например использовать один из листов файла-примера, например "август операции", только даты нужно вводить датами, а не непредсказуемым текстом, ну и остатки на начало и конец месяца оттуда убрать, их можно высчитывать где-то на листе с итоговыми сводными, если интересуют. баланс нал и баланс счет можно продолжать там же в базе и высчитывать на каждый день, потом сможете график построить )) Хотя имхо интересно число на сейчас, после всех операций, и это тоже можно на итоговом листе вывести по сумме всех приходов и расходов.
Andrew Rubanov написал: на выходе ... можно делать итоговые сводки или отчёты и т
- так вот это итоговая цель? Для этого совершенно не нужна одна многопользовательская база данных, но конечно можно и одну базу, та же 1С например использовалась как источник данных, плюс всякие эксельки и тхт...
Andrew Rubanov написал: руководство не купит нам никаких программ
- глупое руководство. Но можно что-то делать и в бесплатной версии PowerBI (хотя я сейчас не в теме, может она и не бесплатна уже), но помню что если нужно хорошо и объёмы большие - были получше программы. А вообще основной вопрос прежний - зачем? Что именно нужно получить на выходе?
Нужно ответить на вопрос - для чего? зачем? Например для аналитики есть другие инструменты, которые используют Эксель наравне с другими хранилищами данных (базы, тексты, 1С) - и это намного удобнее во всех смыслах - и изучать начальству, и создавать специалисту. А например накладные, бланки какие-то - это можно делать в Экселе. Да и например настроечные таблички для программ аналитики... ))
Можно их пересчитать через findnext, а затем заменить как сейчас. Основное - зачем знать сколько их? Определить наличие косяка данных можно поискав один раз, и это быстро.