Здравствуйте! Помогите пожалуйста автоматизировать небольшой процесс. У меня есть таблица в которой я прописываю в ячейках и Exel умеет заполнять нижестоящие ячейки формулами, принцип всем известен когда выделяешь ячейку с исходной формулой и двойным кликом по нижнему правому углу протягиваешь ее вниз.
Подскажите можно прописать такой макрос которым бы мог проделывать эту операцию Получается я выделю ячеку/ячейку или несколько ячеей с формулами (условие что они будут рядом , как в примере 1 и 2) И запускаю макрсос котрый растягивает формулы вниз автоматически (с учетом того что количество строк/и выделенных ячеек может меняться )
Код
Sub Fill_Blanks()
For Each cell In Selection
If IsEmpty(cell) Then cell.Value = cell.Offset(-1, 0).Value
Next cell
End Sub
Нашел такой пример очень удобный но он не копирует формулы а копирует значение (
День добрый! Подскажите пожалуйста можно ли решить мою задачу с помощью формулы Есть таблица в которой есть конкретное количество повторений ID транзакции Сама формула должна понимать какие записи уже были учитанны для суммировани и учитвать приоритет суммирования (честно даже не понимаю как это описать) я сейчас обрабатываю это глазами таким образом : Если 3 записи по критерию . Вариант 1 есть три записи и есть запись в которой реф начинается на JXAU* с "+" в сумме я нахожу вторую запись с "-" в сумме и выделю цветом (сумма этих двух записей равна 0) Вариант 2 если по одному критерию три записи и нет записи в которой реф начинается на JXAU* я беру любые две записи с "+" и "-" с одиновой суммой и выделю цветом (сумма этих записей равна нулю) Если 5 записи по критерию . Вариант 1 есть пять записей по одному критерию и есть запись в которой реф начинается на JXAU* с "+" я нахожу вторую запись с "-" в сумме и выделю цветом (сумма этих двух записей равна 0) остальные три записи отрабатываю по принципу если по одному критерию три записи я беру любые две записи с "+" и "-" с одинаковой суммой и выделю цветом (сумма этих записей равна нулю) Вариант 2 есть пять записей одному критерию и нет записи в которой реф начинается на JXAU* с "+" я нахожу две записи с "-" и две записи с "+" в сумме и выделю цветом (сумма этих 4 записей равна 0)
Примечание: По одному критерию в таблице может быть только одна запись JXAU с "+" а также суммы без учета знаков будут всегда одинаковая по одному критерию
Здравствуйте! На форме нашел макрос который удаляет ячейки со сдвигом вверх по условию :
Код
Sub Макрос2()
Dim iRange As Range
Dim iText As Variant
Dim i As Long
iText = Array("05056280*","06056280*","01056280*") 'список слов на удаление
For i = 0 To UBound(iText)
Set iRange = Range("A:B").Find(What:=iText(i), LookIn:=xlFormulas, Lookat:=xlPart)
If Not iRange Is Nothing Then
Do
iRange.Delete Shift:=xlShiftUp
Set iRange = Range("A:B").Find(What:=iText(i), _
LookIn:=xlFormulas, Lookat:=xlPart)
Loop Until iRange Is Nothing
End If
Next i
MsgBox "ненужные строки удалены!", 64, "конец"
End Sub
Данный макрос удаляет все ячейки в диапазоне которые начинаются на 05056280 или 06056280 или 01056280 , подскажите как его модернизировать что бы удалили все кроме 05056280 и 06056280 и 01056280 (указать в макросе те которые нужно оставить а не удалить т.к. оставить нужно порядка 10 масок а удалить намного больше и количество масок вырастает)
Помогите пожалуйста настроить через макрос сохранения файлов в сsv
я использовал стандартный мастер записи макросов и у меня получилось следующее
Код
Sub SVS_invoice()
ActiveWorkbook.SaveAs filename:= _
"D:\Работа\Invois\Master\2016\Январь\Invoice\MCE_Invoice_01-31-2016_6250.csv", _
FileFormat:=xlCSV, CreateBackup:=False
End Sub
Помогите его сделать универсальным Что бы папка для сохранения файла = папке где находится файл ктороый я пытаюсь сохранить в csv Что бы имя нового файла файла csv = имя файла который я пытаюсь сохранить в csv без учета расширения (было MCE_Invoice_01-31-2016_6250.xsl стало MCE_Invoice_01-31-2016_6250.csv
День добрый подскажите как формулой можно сделать такое Было 2155,und,mPay,ECP,2016-07-26 10:15:25,unde,47************09,21333142,13,16,,214268720,1.00,0.01600,0.98400,UAH ,0.03,0.00048,0.02952,EUR,,,2016-07-26 10:15:25 Стало 2155,und,mPay,ECP,2016-07-26 10:15:25,unde,47************09,21333142,13,16,,214268720,-1.00,-0.01600,-0.98400,UAH ,-0.03,-0.00048,-0.02952,EUR,,,2016-07-26 10:15:25
Строка из csv отчета структура всегда одинаковая ,разделитель запятая , меняются только значения
Добрый день! Уважаемые знтаnjки помогите доработать макрос Получается я использовал обычную запись макроса, но увы он фиксирует конкретно тот диапазон который именно сейчас актуален. Можете подправить его что бы он сам понимал какой диапазон сейчас актуален в этих местах:
Код
ActiveWorkbook.Worksheets("29095134568014").Sort.SortFields.Add Key:=Range( _ "G5:G12263"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortTextAsNumbers - тут G5 константа а вот G12263 всегда разная так как диапазон меняется
.SetRange Range("A5:G12263") - тут А5 константа а вот G12263 всегда разная так как диапазон меняется
Range("G12263").Select - G12263 всегда разная так как диапазон меняется
Range("H5:H12263").Select - тут H5 константа а вот H12263 всегда разная так как диапазон меняется
Range("H12263").Select - H12263 всегда разная так как диапазон меняется
Весь код указал ниже. Очень прошу помочь пытался сам у меня все валится ((... (находил на форуме как определить последнюю ячейку но применить не смог)
Добрый день. В просторах интернета не смог найти макроса для что бы "сцепить" несколько файлов csv в один (нашел примеры с xls - очень крутой, запускаешь макрос и он обьденяет фалы которые ты сам выбреешь в проводнике записывает их друг под другом) Возможно у Вас есть примеры подобного и для csv.
Добрый день. Столкнулся с задачей изменения знака (*-1) числа по условию Есть файл с листами "29242824698003","29244824698012","29095829098101","29247824698912" (это массив в котором нужно проверить ) - где нужно поменять знак в столбце B , если значение в А есть на листе справочника "OTRIC" в колонке А Лист справочник "OTRIC" в столбце A условие формулой это выглядит так : =ЕСЛИ(СЧЁТЕСЛИ(OTRIC!A:A;'29242824698003'!A2)>0;B2*-1;B2) первая проблемма что при помощи формул мне приходится создавать доп колонки так как поменять знак в столбце B я не могу но проблема в том что по этой формуле я перебераю все значения на листах хотя по факту на листе OTRIC может быть 3 занчения а на листах кде нужно поменять знак 50 тыс. Помогите с макросом которой брал бы значение из листа "OTRIC" и прогонял его по листам "29242824698003","29244824698012","29095829098101","29247824698912" в случаии нахождения проставлял знак "-" в следующей ячейки в колонке B. Пример прикрепляю.
Добрый день. Пользуюсь сейчас макроса импорт данных из DBF , он записывает записи на одном листе из всех файлов каталога выглядит он так
Код
Option Explicit
Sub CollectAllClients() 'сбор данных из файлов dbf на лист Общий
Dim BazaWb As Workbook 'текущая книга (общий файл)
Dim BazaSht As Worksheet 'лист Общий в общем файле
Dim iTempFileName As String 'имя поочерёдно открываемого файла
Dim iPath As String 'путь к папке, где лежат все файлы
Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле в столбце A
Dim iLastRowTempWb As Long 'последняя заполненная строка в поочерёдно открываемом файле в столбце A
Dim iNumFiles As Long 'количество открываемых файлов
With Application
.ScreenUpdating = False 'отключение обновления экрана
.DisplayAlerts = False 'отключение предупреждений
.Calculation = xlManual 'пересчет формул
Set BazaWb = ThisWorkbook
Set BazaSht = BazaWb.Sheets("DBF")
iPath = BazaWb.Path & "\" 'путь к папке с файлами dbf
iTempFileName = Dir(iPath & "*.dbf") 'перебор всех файлов dbf
Do While iTempFileName <> ""
If iTempFileName <> BazaWb.Name Then 'окрытие файла dbf
With .Workbooks.Open _
(Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
iNumFiles = iNumFiles + 1
'последняя строка в открытом файле
iLastRowTempWb = .Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1
'последняя строка в базе
iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 1
'вносим полное имя файла dbf на лист Общий в столбец А
.Sheets(1).Range(Cells(2, 1), Cells(iLastRowTempWb, 14)).Copy _
Destination:=BazaSht.Cells(iLastRowBaza, 1)
.Close saveChanges:=False
End With
End If
iTempFileName = Dir
Loop
.Calculation = xlAutomatic
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
Помогите его изменить что бы заносил каждый файл в отдельный лист и если это возможно то лист называть именем файла. Перерыл все форумы не нашел примеров (((
Добрый день. Помогите прописать вместе ActiveWorkbook.Path путь "D:\Работа\Важно\Проводки Юнистрим\Privat\ZIP\22.06.2014_7872.xml" где 22.06.2014_7872.xml - значение ячейки A:2 на листе "Итого" вот как выглядит код которым сейчас пользуюсь
Добрый день подскажите как доработать макрос что бы при обработки этого фрагмента макроса не просто копировать последнюю ячейку но и перемещение на нее окна EXEL что бы визуально увидеть что скопировано
Добрый день Помогите доработать открытие файла записал с помощью записи получилось следующее
Код
Sub Макрос3()
Workbooks.Open Filename:= _
"D:\Работа\Важно\Проводки Юнистрим\Privat\ZIP\19.06.2014_7872.xml"
Cells.Select
Selection.Copy
Windows("Юнистрим_report.xlsm").Activate
ActiveSheet.Paste
End Sub
Добрый день. Уважаемые эксперты помогите доработать макрос :
Код
Sub test()
Dim i As Long
Dim nRow As Long
nRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
i = 2
On Error Resume Next
While i <> nRow
If Cells(i, 4).Value = "" Then
Cells(i, 4).Value = WorksheetFunction.VLookup(Cells(i, 1).Value, Sheets("DBF_EO").Range("A:C"), 3, 0)
End If
If Cells(i, 4).Value = "" Then
Cells(i, 4).Value = WorksheetFunction.VLookup(Cells(i, 1).Value, Sheets("DBF_EO").Range("B:C"), 2, 0)
End If
i = i + 1
Wend
End Sub
Работает по принципу функции ВПР только вот незадача когда он не находит значение просталяет пусто "" и идет дальше, можно проставлять значение "не найден" вместо пусто "" и ити дальше ?
Я в принципе понимаю что он не может удалить того чего нет (приходиться фиктивно добавлять знаечение "0" в ячейку что бы он отработал до конца вот весь код
Код
Sub Del_SubStr29090102776930()
Sheets("29090102776930").Select
With Range("D2", Cells(Rows.Count, "D").End(xlUp)).Offset(, 1)
.FormulaR1C1 = "=SUMIF(C[-1],RC[-1],C[-3])"
.Value = .Value
End With
Range("A1").AutoFilter Field:=5, Criteria1:="0"
With ActiveSheet.AutoFilter.Range
.Rows(2).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
ActiveSheet.AutoFilterMode = False
Dim r As Range
With ActiveSheet
Set r = Intersect(.UsedRange, .[c:d]).Offset(1)
r.FormulaLocal = r.FormulaLocal
End With
Columns("C:C").Select
Selection.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ActiveWindow.ScrollRow = 2
Range("E1").Select
Sheets("Справочник").Select
Range("A1").Select
End Sub
Подскажите пожалуйста как можно справиться с бедой остановки макрса так как он останавливается
Добрый день Столкнулся с проблемой запуска нескольких макросов через один макрос с использованием Call (более 20 таких Call -ов) вот сокращенный пример кода
Код
Sub Over()
Call CollectAllClients29091102777916
Call CollectAllClients29091102777917
Call CollectAllClients29091102777918
Call CollectAllClients29091102777919
Call CollectAllClients29091102777920
End Sub
Возможно автоматически пропускать ошибку которая возникает при обработки CollectAllClients29091102777916 и переход к обработке следующего CollectAllClients29091102777917 и так далее.
Добрый день. Подскажите как совместить два макроса в один
1 Копирования в буфер обмена значения ячейки $I$3 при нажатии на нее.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$I$3" Then: Call Module2.GetFormula_For_VBA
примечание где : Sub GetFormula_For_VBA()
Код
Sub GetFormula_For_VBA() ' скопировать в буфер обмена формулу из ActiveCell, готовую для вставки в код VBA
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText ActiveCell.Formula: .PutInClipboard
End With
End Sub
2. Перекрашивание активной ячейки листа в случаи если заливки нет
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.EntireRow.Interior.ColorIndex = xlNone Then
Target.EntireRow.Interior.ColorIndex = 6
Else
Target.EntireRow.Interior.ColorIndex = xlNone
End If
End Sub
Как я только не крутил коды макросов не получаеться сделать следующее: Стал на ячейку $I$3 если цет = "6" тогда перекрасили в xlNone , а если цевет = xlNone тогда запустился макрос GetFormula_For_VBA() + цвет ячейки изменился на "6"
Добрый день. Тема раздута (согласен) но не смог найти пример под свое условие который бы мог самостоятельно адаптировать ((( Столбец А Нужно взять последнее значение ячейки в столбце А и удалить строку в которой 1 раз повторяется это значение в столбце А Пример : А1 = 3 А2 = 5 А3 = 6 А4=5 А5=5 (последняя заполненная ячейка)
При запуске макроса результат его обработки = удаление 2 строки так как А2 = 5
Здравствуйте. Подскажите пожалуйста существует ли код для закрытия открытых файлов xls по маске файла. Веб ресурс генерит файлы по маске : 1 файл имя "MTS_paymodel.xls" ,2 файл "MTS_paymodel-1.xls", 3 файл "MTS_paymodel-2.xls"... 15 файл "MTS_paymodel-14.xls. Приходиться открывать много файлов и обрабатывать их. Возможно одним нажатием закрыть без сохранения все открытые файлы по маске. Буду очень благодарен. Я нашел код закрыть все открытые файлы кроме текущего активного... но он не всегда подходит ((
Добрый день. Нашел пример копирования ячейки на этом форме. Но постоянно выскакивает ошибка когда "Выкл." и когда "Вкл" Когда Вкл. - понятно почему работает макрос копирования активной ячейки Но когда "Выкл" - не могу работать с несколькими ячейками. Подскажите как поправить
Здравствуйте. Столкнулся с проблемой использования ВПР так как приходится постоянно менять просматриваемый массив лист "DBF" . Помогите с Макросом который будет проставлять значение (аналог функции ВПР только в пустых ячейках) , у меня три листа обновляются через ВПР с одного листа "DBF" , и поэтому приходится постоянно дописывать информацию на листе "DBF" или заменять результаты формул значениями. Возможно это дело поставить на макрос. к примеру зашел на 2 лист запустил макрос и информация одновилась только в пустых ячейках если ее нет но так и оставит пустое значение , и так на всех листах . подробнее в примере Спасибо.
Добрый день. Прошу помощи с макросом. Есть таблица A:D (количество записей большое). В таблице критерий суммирования в столбце D диапазон суммирования B Необходимо проставить в столбец E результат суммирования После удалить все строки с значением =0 , Постарался подробно описать в примере. Спасибо.
Доброго времени суток. Прошу помочь мне облегчить макрос записанный через авто запись. Макрос выполняет импорт файла (файл всегда с одинаковой структурой,но разный по количеству записей ),выполняет импорт только нужных столбцов,после чего форматирование полученных столбцов. Код ужасно напрягает ПК.
Здравствуйте. Прошу помочь разобраться в макросе который нашел здесь в примерах
Код
Sub Import_DBF()
Dim strSQL$, Ph$, Fl$, Fld$, ADR$
Ph = "C:\" 'Путь к файлу
Fl = "CLIENTS" 'Имя импортируемого файла
Fld = "[INN],[TITLE]" 'имена импортируемых полей, через запятую
ADR = "A1" ' Куда вставляем данные
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=""CollatingSequence=ASCII;DBQ=" & Ph & ";DefaultDir=" & Ph & ";" _
& "Driver={Driver do Microsoft dBase (*.dbf)};FIL=dBase IV;""" _
& ";Initial Catalog=" & Ph & ""), Destination:=Range(ADR))
.CommandType = 2 '2-Sql 3-table
strSQL = "SELECT " & Fld _
& " FROM `" & Ph & "`\`" & Fl & "`"
.CommandText = Array(strSQL)
.Refresh BackgroundQuery:=False
.Delete
End With
End Sub
Этот код нашел на форуме вроде бы все "понятно" с учетом моих))... Заменил переменные у меня получился код
Цитата
Sub Import_DBF() Dim strSQL$, Ph$, Fl$, Fld$, ADR$ Ph = "G:\" Fl = "20130614_Qiwi_Daily.dbf" Fld = "[oper_date],[sec_code],[send_sum]" ADR = "A1" With ActiveSheet.QueryTables.Add(Connection:=Array( _ "OLEDB;Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=""CollatingSequence=ASCII;DBQ=" & Ph & ";DefaultDir=" & Ph & ";" _ & "Driver={Driver do Microsoft dBase (*.dbf)};FIL=dBase IV;""" _ & ";Initial Catalog=" & Ph & "" ;) , Destination:=Range(ADR)) .CommandType = 2 '2-Sql 3-table strSQL = "SELECT " & Fld _ & " FROM `" & Ph & "`\`" & Fl & "`" .CommandText = Array(strSQL) .Refresh BackgroundQuery:=False .Delete End With End Sub
При запуске макроса у меня подсвечивается желтым .Refresh BackgroundQuery:=False Понять почему он ругается не могу. Подскажите что нужно исправить в коде чтобы шайтан машина выдавала результат ))
Здравствуй. Вчера,спасибо вашему форуму полный примеров и отзывчивых пользователей, была создано форма которая сегодня удачно перекочевала в работу 10-ти сотрудникам, которые весь день вносили данные , вечером скидывают мне их обратно и я формирую итоговую и сводную , и тут началось самое печальное я думал это сократит ошибки (ручное внесение данных) но оказалось что их практически не уменьшилось((( и обработка их данных по времени не уменьшилось , а вот сотрудники довольны типо так быстрей спасибо )))
Поэтому прошу в который раз меня выручить сам я не справлюсь. Прикрепляю пример формы. Настроен он сейчас по аналогу примеров которые нашел у Вас на форуме. Для исключения (сведению до минимума) ошибок ввода информации (останется конечно человеческий фактор) нужна возможность проверки вносимых данных :
поле "счет" - Me.TextBox6.Text = "" 'Счет F - вносить только те счета которые есть в списке счетов на лиcте "словари" в колонке G в противном случаи MsgBox "Счет не найден!"
поле "комментарий -.Cells(iLastRow, "G") = Me.ComboBox1.Value 'Коментарии - только из выпадающего списка
поле "сумма"-Me.TextBox4.Text = "" 'Сумма D-вносить только число (разделитель "." возможность отрицательных сумм) и последний просьба автозаполнение полей без возможности редактирования пользователем но при возможности оставить их в форме что бы сотрудник видел а именно Me.TextBox2.Text = "" 'система B - значение из листа "Словари" колонки H Me.TextBox5.Text = "" 'Валюта E - значение из листа "Словари" колонки I Me.TextBox9.Text = "" 'Счет(комментарий) I - значение из листа "Словари" колонки J по критерию данных введенных в поле "счет" - Me.TextBox6.Text = "" 'Счет F по принципу функции ВПР из таблицы G2:J на листе "Словари"
Надеюсь на вашу помощь в реализации , простите за наглость но я действительно в тупике так как не могу самостоятельно с теми знаниями "0" реализовать эту форму
Доброго времени суток. Столкнулся с проблемой использования ввода данных через форму. Когда я активирую форму для ввода данных она закрепляется на переднем плане всего Excel ? возможно ее закрепить только на листе "Заказы" что бы можно было свободно перемещаться по листам и книгам копироватьи вставлять нужную информацию?