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

Страницы: 1 2 След.
Адресация в умных таблицах по имени столбца и номеру строки
 
aleck,я в таких случаях использую =СМЕЩ(), чтобы не слетали формулы по желанию экселя. Также удобно адресовать соседние строки/столбцы относительно текущей ячейки.
StepanWolkoff, +1 :)
Код
=СМЕЩ(Таблица1[[#Заголовки];[Сотрудник]]; 3; 0)
Изменено: ArtHome - 24.05.2016 11:45:54
Найти минимальный период, для которого верно условие, VBA, пользовательская функция
 
Williams, попробуйте исправить
Код
For t = 1 To rowNum
на
Код
For t = 1 To rowNum - 1
Ну или выложите файл с тестовыми данными плюс что должно быть. Впрочем будет больше пользы, если действительно сами разберётесь :) - у меня уже конец рабочей недели на носу.
Изменено: ArtHome - 20.05.2016 11:37:41
Поиск, совпадение и выдача результата числовых значений разных форматов
 
Во вложении ваш макрос. Файл источник должен быть открыт. Не обессудьте, что без проверок на ошибки - похабно оформленный пример, не совпадающий с условиями задачи и не содержащий подходящих данных для решения требует выдерживать стиль автора :)
Код
Option Explicit

Const file1 = "Файл 1.xls"

Sub Кнопка1_Щелчок()
    
    ' Ссылка на столбец с цифрами
    Dim file2Cell As Range
    Dim curNo As Long
    
    ' Первый файл - активный лист
    Dim file1Sheet As Worksheet
    Set file1Sheet = Application.Workbooks(file1).ActiveSheet
    
    ' Дата, вставляемая при выполнении условий
    Dim dat As Date
    dat = file1Sheet.Range("AF6").Value
    
    For Each file2Cell In Range("D:D").Cells
        
        ' Если попалась пустая строка, то прерываемся
        If file2Cell.Value = "" Then
            Exit For
        End If
        
        ' Извлекаем число, начиная со второго символа
        curNo = Val(Mid(file2Cell.Value, 2))
        
        ' Ищем строчку с этим числом в файле 1
        If Not file1Sheet.Range("E:E").Find(curNo, , xlValues, xlWhole) Is Nothing Then
            ' Если нашли, записываем дату
            file2Cell.Offset(0, -1).Value = dat
        End If
        
    Next file2Cell
    
End Sub
Найти минимальный период, для которого верно условие, VBA, пользовательская функция
 
Вот ваша функция. Только я её не смог отладить :), например я не смог получить значение #ND - или его надо возвращать, когда размер периода совпадает с количеством данных?
Код
Public Function Williams(srcRange As Range) As Variant

    ' Функция для пользователя Williams от Артёма Хоменко с форума http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=78037&TITLE_SEO=78037-nayti-minimalnyy-period-dlya-kotorogo-verno-uslovie&MID=652872
    ' В качестве аргумента должен быть передан один столбец
    '
     
    ' Если в переданный диапазон попадут нечисловые данные, просто пропускаем их.
    On Error Resume Next
    
    ' Количество элементов
    Dim rowNum As Long, i As Long, j As Long, t As Long
    rowNum = srcRange.Rows.CountLarge
    
    ' Создадим вектор под исходные данные и под максимумы
    Dim arrSrc() As Variant, arrMax() As Double
    ReDim arrMax(1 To rowNum)
     
    ' Скопируем в массив данные для оптимизации, чтобы не обращаться к ячейкам.
    arrSrc = srcRange.Columns(1).Value

    ' Начинаем с периода в 1 и до максимального
    For t = 1 To rowNum
        
        ' Перебираем элементы с первого и до конца
        For i = 1 To rowNum - t + 1
            
            ' Начальное значение
            arrMax(i) = arrSrc(i, 1)

            ' Перебираем элементы внутри периода - ищем максимум
            For j = 1 To t - 1
                If arrMax(i) < arrSrc(i + j, 1) Then
                    arrMax(i) = arrSrc(i + j, 1)
                End If
            Next j
            
            ' Если очередной максимум меньше предыдущего, продолжать нет смысла.
            If i > 1 Then
                If arrMax(i) > arrMax(i - 1) Then
                    GoTo next_t
                End If
            End If
            
        Next i
        
        ' Если попали сюда, то значит перебрали все максимумы и все они убывают - бинго
        Williams = t
        Exit Function
        
next_t:
    Next t
    
    ' Ничего не нашли
    Williams = CVErr(xlErrNA)
End Function
Для вызова
Код
=Williams(Таблица2[Data])
Замена в документе ФИО на латинице на русский вариант, Программа выдает наряд на работы с персоналом на латинице, нужна замена на русские ФИО перед печатью.
 
Цитата
Валерий Соболев написал:
Если просто подскажете алгоритм действий и какие формулы (темы из форума) использовать,
буду очень признателен.
1. Как перебрать все файлы в папке яндекс выдал первую ссылку http://www.excel-vba.ru/chto-umeet-excel/prosmotret-vse-fajly-v-papke/
2. В примере из ссылки просто записывается в левый верхний угол строка "www.excel-vba.ru", а вам надо в этом месте выполнить команду "заменить всё" для каждой латинской фамилии на русскую.
Последовательное выполнение макросов по одной кнопке, Необходимо, чтобы несколько макросов выполнялись последовательно, НО по клику на одну и ту же кнопку.
 
sachazzz,назначте на кнопку функцию main, а её измените на следующую
Код
Dim flag As Boolean

Sub Main()

    If flag Then
        Del_B
        flag = False
    Else
        Del_B1
        flag = True
    End If
End Sub

Найти минимальный период, для которого верно условие, VBA, пользовательская функция
 
Williams,это понятно, что пользовательская функция нужна, а не вручную перебирать. Вопрос был про понимание условий задачи - логика расчёта и ответ верный?
Изменено: ArtHome - 19.05.2016 12:01:06
Найти минимальный период, для которого верно условие, VBA, пользовательская функция
 
Условия мож сформулированы и точно, но сложны для понимания. Во вложении решение безо всякого VBA с использованием мускульной силы по подбору периода - ответ 101 верен? Там вводится период в ячейку G1 и в строке G2 отображается либо NA либо введённый период.
Загляните и если всё ок, то переписать это на vba без проблем.
Загрузка данных из внешнего файла по условию.
 
Agronom, я потому и спрашивал, почему нельзя открыть книгу с сетевого диска, чтобы решить возможные технические ограничения. Как я сейчас понял, вы не хотите открывать книгу на экране лишь по эстетическим соображениям и никаких технических ограничений нет.
Значит можно макросом:
а) скопировать файл с сетевого диска во избежание ошибок совместного доступа во временную локальную папку, впрочем раньше вы обходились и без этого;
б) считать с него все данные со всех листов в рабочий файл любым из способов по ссылке JeyCi или многократно обпробованной вами "GetExtData" в скрытые листы;
в) удалить временный файл;
г) в примере из поста №2 из формулы исключить название файла, чтобы ссылка шла на текущую книгу.
Изменено: ArtHome - 19.05.2016 10:56:53
Загрузка данных из внешнего файла по условию.
 
Agronom, судя по вопросу, вы не стали тратить время на скачивание примера. :) Да, там требуется:
1. Открыть файл с данными, при этом обновится расчётная форма.
2. Сохранить полученный результат куда-либо ещё, например на соседний лист, но уже со значениями, а не с формулами, или вставить в word, или отправить на печать.
3. Закрыть файл с данными.
Эти три пунка требуются вне зависимости от того, будет ли это делать человек или макрос. Я и спрашивал три раза, в чём проблема с открытием файла именно в экселе. Ну ладно, не буду вас больше мучить, досвидания. :)
Загрузка данных из внешнего файла по условию.
 
Agronom,в третий раз спрашиваю, чем вас не устраивает выложенный пример из поста 2? :) Вы поясните. Я искренне не понимаю, зачем вы хотите залезть в ADO и SQL, лишь бы файл не открывать в экселе. Если эта операция трудоёмка, то я могу написать макрос, который будет за вас открывать файл-источник, сохранять полученные данные и закрывать источник. Но я боюсь что проблема в чём-то другом, что вы вторые сутки решение на форуме ищете...))
Загрузка данных из внешнего файла по условию.
 
Agronom,так в чём проблема-то с открытием сетевого файла? Макросу же всё равно надо его будет открывать. Я потому макрос и не пишу, что не понимаю, что вас не устраивает в примере из поста 2...))

PS Из закрытых файлов считывать информацию возможно только экстрасенсы умеют. Эксель даже с макросами не потянет...))
Изменено: ArtHome - 18.05.2016 09:02:40
Загрузка данных из внешнего файла по условию.
 
Agronom, А макрос кто запускать будет, человек или планировщик задач? Я имею ввиду, что было бы надёжнее, если бы оператор открыл оба файла, убедился что данные поступили корректно, ключи совпадают, ошибок нет, после чего сохранил бы результат уже в виде значений. Трудозатраты на 30 секунд, их автоматизировать в ущерб безопасности я бы не стал...
Загрузка данных из внешнего файла по условию.
 
Не совсем понятно, что значит "автоматически". Если подразумевается, что возможно открыть одновременно и файл с данными и конечный файл, то нужная формула будет выглядеть вот так для левого верхнего угла, дальше её можно раскопировать
Код
=ВПР($A4; ДВССЫЛ("'[Файл с данными.xlsx]" & B$2 & "'!$1:$1048576");5;ЛОЖЬ)

Кроме того, названия листов в файле с данными должны совпадать с названиями колонок в конечном файле. Во вложении - работающий вариант, открывать нужно оба файла.
Переделать макрос на Универсальный с пользовательским интерфейсом
 
Ливиан,замысел непонятен, что значит более изящное решение. Вы хотите в выпадающем списке указывать формулу, в которую обернуть имеющиеся данные или же как написал Игорь дооборачивать новые значения?
Выстраивание данных из двух столбцов в одну строчку
 
Alexey200,тут от вас не денег просят, я предоставить информацию принятым на форуме способом.
[ Закрыто] Отправить комп в режим сна(SuspendState), VBA
 
В итоге самурай всех победил. Хотя возможно ещё не конец, придёт добивать...))
[ Закрыто] Отправить комп в режим сна(SuspendState), VBA
 
camypai,во вложении пример, в котором в зёлёную ячейку указываете время выключения.
При нажатии кнопки "старт" макрос начнёт отсчитывать время, если вдруг передумаете - есть кнопка "стоп".
На синхронизацию с интернет-временем силы тратить не стал, так как с вашим скудным багажом знаний вам ещё учиться и учиться...)

PS Да и надоело компутер включать...)
Оптимизировать формулы таблицы продаж, возможно ли как нибудь облегчить формулы?
 
Tomas15,Для определения цены следует использовать не суммесли, как у вас, а
Код
=ЕСЛИОШИБКА(ВПР(B3; товары!$B:$C;2;ЛОЖЬ); 0)
Ну и защиту листа снимите, как иначе увидеть ваши формулы-то.
Проверка работоспособности гиперссылок
 
Код
Sub Кнопка1_Щелчок()
    
    Dim cell As Range
    Dim winHttpReq As Object
    Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    On Error GoTo l_error
        
    For Each cell In Range("Таблица1").Columns(1).Cells
        
        cell.Offset(0, 1).Value = "Неверный адрес"
        Call winHttpReq.Open("GET", cell.Value, False)
        
        Call winHttpReq.Send
        If winHttpReq.Status = 200 Then
            cell.Offset(0, 1).Value = "Всё ок"
        Else
            cell.Offset(0, 1).Value = "Неверный запрос"
        End If
        
l_error:

    Next cell
End Sub
Какие комплектующие ПК влеяют на скорость обработки данных в Таблице
 
Цитата
Андрей VG написал:
Excel использует многопоточные вычисления для расчётов формул. VBA же как был однопоточным, так и остался. Так что ваше замечание, в рамках темы не совсем корректно.
Два разных несвязанных документа - без проблем, будут исполнятся в разных потоках. Но речь идёт у ТС про один проект, в котором изменение одной ячейки приводит к перерасчётам продолжительностью в несколько секунд.

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

Потоки ещё могут использоваться при построении деревьев вычислений. Но для случая ТС уже вся эта работа выполнена, проект в активном актуальном состоянии. И после внесения изменений пользователем тупо начинается пересчёт всей цепочки. Возможно у ТС всё усугубляется неверной работой макросов - например запрещать и разрешать события надо всего один раз, избегая вложенностей.

Но на своих проектах, в оптимальности которых я уверен, я неоднократно видел, что когда эксель выполняет перерасчёты, грузится только одно ядро.

Более того, программируя на более других языках многопоточные приложения под Windows, я понимаю, почему это происходит именно так - трудно начать расчёт в параллельном потоке с середины вычислений не имея результата предыдущей части. Можно только что-то оптимизировать и подготовиться, но эта оптимизация выполняется в самом начале, и на десятый раз уже давно всё выоптимизировано...)
Какие комплектующие ПК влеяют на скорость обработки данных в Таблице
 
Цитата
Фродо написал: не хватило сил прочесть все посты
Как в анекдоте - чукча не читатель, чукча писатель, однако! :)
Какие комплектующие ПК влеяют на скорость обработки данных в Таблице
 
Бахтиёр, это для успокоения пользователей. Видимо в определённых ситуациях даёт прирост производительности, когда есть несвязанные блоки вычислений. Но в узких местах может быть только один процесс.

Пример - выполняем бесконечный цикл
Код
Option Explicit

Sub Кнопка1_Щелчок()
While True
Wend
End Sub

При этом видим, что у четырёхядерного процессора загрузка всего 25%. Операционная система бросает эксель с одного ядра на другое, но общая загрузка процессора - 25%, увы.
как автофигуры на диаграмме переместить ЗА сетку?
 
Цитата
iva2000 написал:
В прикрепленном примере есть график с фоновым рисунком за сеткой, то есть сделать так теоретически возможно.
Чтобы увидеть, как там сделано у "комо-то удалось" - смотрите свойства области построения и видите, что там в качестве заливки использован рисунок (image1.jpeg с радугой включён в экселовский файл), а вовсе ни какое помещение других объектов на задний план, как вам и написал Андрей VG. Соответственно чтобы сделать также, вам надо под каждое изменение диаграммы генерировать подходящий рисунок для фона и вставлять его из файла. Насколько он при этом останется векторным для "других программ" - вопрос.
Модель с выпадающим списком с целью контроля пользователей при формировании матриц, ограничить и предписывать возможности выбора для пользователей
 
Kirill Gureev, без макросов только если как-то так.
Логика реализована для только для ячеек С3 и В3 - дальше размножайте.
Как сделать паузу в макросе
 
stop, так как вы не выложили файл примера, то и ответ будет на пальцах.
Самый простой способ в MS Windows запустить параллельный процесс в рамках текущего потока это использовать PostMessage.

В первом макросе вы отправляете пользовательское оконное сообщение через механизм PostMessage и продолжаете молотить вашу логику.
Во втором макросе, запускаемом по получению сообщения вы отображаете диалоговое окно и ждёте реакции пользователя.
Суммирование дебиторов по ИНН, Как с помощью макроса просуммировать дебиторов по их ИНН
 
Цитата
eska написал:
В сводной не получается выводить наименование дебиторов.
Вы реально думаете, что мировая корпорация Майкрософт, реализовав сводные таблицы, не догадалась о такой малости? См. вложение.

Касательно макроса sv2013 - работать будет без проблем, только стоит перейти на именованные диапазоны или смарт-таблицы.
Какие комплектующие ПК влеяют на скорость обработки данных в Таблице
 
В экселе на быстродействие влияет тупо частота процессора. Так как он грузит только одно ядро процессора.

ЗЫ А памяти у ТС и так уже много.
Изменено: ArtHome - 13.05.2016 11:54:31
Суммирование дебиторов по ИНН, Как с помощью макроса просуммировать дебиторов по их ИНН
 
eska, а вам действительно по какой-то причине макросы нужны, штатные сводные таблицы не устраивают?
См. вложение.
Поиск в ячейке по определенному значению
 
Цитата
pavel456 написал:
если ввести 16.09.2016 и она будет сравниваться с 26.09.2016 то показывает 0.
pavel456,ничего не понял. Я ещё раз открыл файл, в нём уже введено 16.09.2016 и в результате показано 2.
Вы макросы включили в файле?

Касательно как работает макрос - нажмите Alt+F11, в открывшемся коде поставьте курсор на строку "dateVal = Range("cInput").Value", нажмите F9 для установки точки прерывания.

Затем вернитесь в эксель и нажмите на кнопку запуска макроса. Эксель переключится в режим отладки и меню Debug плюс Яндекс к вашим услугам. Ещё загляните на закладку "формулы" в "диспетчер имён".
Изменено: ArtHome - 11.05.2016 14:37:03
Страницы: 1 2 След.
Наверх