Помогите, пожалуйста, разобраться почему не работает макрос и как исправить код. Я хочу сравнить столбец 3 из книги "Sample" со столбцом 2 из книги "Report", и если в Sample нет каких-то значений, добавить их туда. Примеры файлов во вложении.
Я уже и гуглил, и яндил...скачал кучу подобных макросов и попробовал оптимизировать под себя...сначала с созданием библиотек, потом с созданием массивов - ничего не работает. Перешел уже на простейший вариант с перебором, но и он работать не хочет. Я в отчаяньи.
Помогите, пожалуйста, разобраться, почему код не работает. Необходимо найти дубликаты в столбце и, начиная со второго дубликата, добавить в конце цифры.
Например:
Артикул (как есть)
Артикул (как должно быть)
11018
11018
11020
11020
11020
11020(1)
11020
11020(2)
11020
11020(3)
11022
11022
11022
11022(1)
11022
11022(2)
Также пример во вложении. Я написал макрос, но он не работает. Помогите, пожалуйста, понять почему и, возможно, как-то оптимизировать его (понимаю, что перебор - не самый оптимальный путь).
Код
Sub Test()
Dim n As Integer, k As Integer, m As Integer
Dim lLastRow As Long
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
m = 1
For k = lLastRow To 1
If Cells(k, 1).Value = Cells((k - 1), 1).Value Then
Cells(k, 1).Value = CStr(Cells(k, 1).Value) & "(" & m & ")"
m = m + 1
k = k - 1
Else
m = 1
k = k - 1
End If
Next k
End Sub
Уважаемые форумчане, сразу хочу попросить прощение за отсутствие примера - выкладываю только часть макроса, сам макрос довольно большой и неоптимальный. Если пример необходим - напишите, пожалуйста, создам отдельный файл.
Часть большего макроса - это макрос, приведенный ниже. Он должен сравнивать список, размещенный на листе, который я назвал "BazaSht" с несмежным массивом данных - range("D10:P33" ;) . И если в массиве есть значение длиной больше 5 символов, которого нет в списке - добавлять его в список снизу. Но он выдает ошибку "Compile error: End If without block If" в строке, на которую указывает стрелка. Подскажите, пожалуйста почему и как это исправить. Сам испробовал уже различные варианты - ничего не помогает...
Код
Set rRange = Worksheets("TDSheet".Range("D10:P33"
With BazaSht
iLastRow = Range("A7".SpecialCells(xlLastCell).Row
n = iLastRow + 1
For Each aCell In Range("A7", Cells(Rows.Count, 1).End(xlUp))
For Each rCell In rRange
If Len(rCell.Value) > 5 Then
If rCell.Value = aCell.Value Then GoTo aNext
Else
BazaSht.Cells(n, 1).Value = rCell.Value
n = n + 1
End If
----> End If
Next rCell
aNext:
Next aCell
End With
Помогите, пожалуйста, написать макрос, который собирал бы данные из разных файлов (файлов несколько десятков) и консолидировал в один. Для примера приложил два файлика - нужно из файлика 2 найти данные по фруктам и коробкам и приплюсовать их в соответствующую ячейку файлика 1. Названия фруктов могут быть расположены в разном порядке, но порядок коробок всегда одинаков.
Своими силами получилось написать вот такое ничтожество, которое не работает потому что я неправильно расположил циклы, но ответ, как это сделать корректно, никак не приходит:
Sub Try()
Dim i As Long Dim n As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For n = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) = Workbooks("2.xlsx") .Worksheets("1") .Cells(n, 1) Then Cells(i, 1).Offset(0, 1) = Cells(i, 1).Offset(0, 1) + Workbooks("2.xlsx") .Worksheets("1") .Cells(n, 1) Cells(i, 1).Offset(0, 2) = Cells(i, 1).Offset(0, 2) + Workbooks("2.xlsx") .Worksheets("1") .Cells(n, 1) Cells(i, 1).Offset(0, 3) = Cells(i, 1).Offset(0, 3) + Workbooks("2.xlsx") .Worksheets("1") .Cells(n, 1) End If Next Next
End Sub
Посмотрел старые макросы, которые удалось с Вашей помощью реализовать - наверное можно данные с файла 2 загнать в массив, и потом использовать его - но ранее пробовал писать что-то только с одномерными массивами, и потому не знаю, как обращаться с двумерными...та же история с коллекциями...понимаю, что даже если этот вариант заработает, то он будет не оптимальным. Может, подскажете, как его написать изаначально более оптимальным? Что лучше использовать?
Добрый день! Нашел в интернете как можно с помощью условного форматирования выделить цветом минимальное значение в строке. Файл с примером прилагаю (в прикрепленном файле условное форматирование применено к странице).
Подскажите, а если на странице две таблицы и в каждой необходимо выделить минимальное значение, можно ли это сделать с помощью условного форматирования? Пробовал сделать это самостоятельно, но меня постигло полнейшее фиаско. Найти ответ в интернете также не удалось. Заранее благодарен за помощь!
Подскажите, возможно ли вернуть в ячейку из заданной только латинские символы и цифры? Или только кирилличные символы? Т.е. если в ячейке значение "Плитка MO1232", вернуть в ячейку значение "MO1232"?
Пробовал найти ответ самостоятельно - к сожалению, нашел только проверку наличия латинских символов в ячейке.
Вопрос глупый, и возможно оффтоп, но все же интересно..
Можно ли в VBA реализовать замену данных из целого массива на заданное? Т.е.: Есть ячейки со значениями. Если значение в ячейке равно значению из массива (а в массиве 30 разных значений, которые нельзя задать одним явным условием), то значению ячейки присвоить 1. Чтобы не надо было писать 30 разных case или if и не надо было создавать таблицу на каком-нибудь листе в Excel, а все реализовать только в VBA? И если можно то как?
Пример не выкладываю, поскольку вопрос пришел в голову во время написания макроса, и какого-либо практического примера у меня нет (хотя, если это необходимо, могу придумать какой-нибудь пример).
Нагуглить ответ не удалось (возможно в строке поиска неправильно формулировал вопрос).
Прошу прощение за столь похабное оформление темы. Заранее спасибо за ответ!
Помогите, пожалуйста, улучшить макрос. Появилась необходимость в выборе уникальных значений по двум столбцам (по типу, как это реализовано в сводных таблицах). Но оба этих столбца в таблице имеют разрывы.
Макрос я реализовал в меру своего разумения (поскольку в VBA слабо разбираюсь, то и алгоритм решения и реализация на низком уровне), но есть две проблемы: 1. Все равно появляются задвоенные значения (эта проблема есть и в файле во вложении) 2. Не знаю, как избавиться от пустых значений.
Подскажите, пожалуйста, как можно решить данные проблемы. Кроме того, подозреваю, он будет очень медленно работать на больших таблицах - может, его как-то можно оптимизировать?
Заранее большое спасибо за помощь!
P.S. Заранее предвидя Ваш возможный вопрос - использовать сами сводные таблицы я не могу, поскольку этот макрос - часть еще большего макроса. Хотелось бы все один раз автоматизировать и забыть...
Крайне необходимо написать макрос, собирающий данные из разных файлов в папке по условию. Нашел в интернете нечто похожее и попытался переделать под свой файл, но поскольку я в программировании разбираюсь крайне мало, видимо написал что-то не так и макрос работать не хочет.
Сам макрос должен делать следующее: Есть папка с множеством файлов, названных кое-как. В этой же папке находится файл с итоговой таблицей. Макрос по очереди открывает все файлы .xlsx, ищет ячейку с кодом сотрудника, и по коду подтягивает в итоговую таблицу две цифры.
Огромная просьба помочь разобраться почему макрос не работает.
Пример итогового файла и двух файлов, с которых тянутся данные, прилагаю.
Помогите, пожалуйста, с проблемой. Нужен макрос, который удаляет символ, если он стоит после буквенного значения. Есть таблица, в которой один из столбцов имеет значения типа "Полиуретан% 100%". В данном столбце необходимо убрать символ "%", который стоит после слова "Полиуретан". С разными видами таких таблиц сталкиваюсь каждый день, и макрос, который убирает эти символы очень помог бы.
Написал макрос, который формирует "фильтр". Данный макрос вставляет символ "|" между данными ячеек и получившиеся данные копирует в буфер памяти. Пример прилагаю.
Но возникла проблема - он не работает, когда количество ячеек (значений) - 2.
Кроме того, возможно можно его как-небудь оптимизировать.
Возможно, кто-небудь когда-небудь встречал кроме самоучителей по VBA и т.д. какой-небудь сборник задач по VBA?
Интересует не самоучитель, в конце главы которого приведено пару задач для практического ознакомления с пройденным материалом, а книга с кучей типовых интересных задач, чтобы помимо ознакомления с теорией можно было параллельно решать практические задачи?
Если да - просьба поделится (книгой, либо хотя бы информацией - названием книги, автором и т.д.)
Есть вопрос по макросу. Во вложении файл с двумя страницами - на странице "Data" находятся некие данные, на странице "Check" в столбце А - искомые данные. Макрос скрывает строки на странице "Data", данные в которых не равны искомым данным с страницы "Check".
Но есть одна проблема - он работает только когда в искомых данных больше одного значения. В случае, когда там лишь одно значение он не работает. Помогите понять где ошибка и как ее исправить. Заранее большое спасибо!
Макрос:
Option Explicit
Sub Checking()
Dim i As Integer, n As Integer Dim v1 As Variant, v2 As Variant Dim s As Long, t As Long
s = ActiveWorkbook.Sheets("Data").Cells(1, 3).End(xlDown).Row t = ActiveWorkbook.Sheets("Check").Cells(1, 1).End(xlDown).Row
Помогите, пожалуйста, с макросом: есть макрос, который «раскидывает» данные из одной ячейки по разным ячейкам на другой вкладке:
Option Explicit
Sub SizeQty() Dim arr() As String Dim r, j arr = Split(WorksheetFunction.Trim(ActiveCell), " ") Sheets.Add after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "Result" r = 2 For j = LBound(arr) To UBound(arr) If InStr(1, arr(j), "/") <> 0 Then Sheets("Result").Cells(r, 1) = Left(arr(j), InStr(1, arr(j), "/") - 1) Sheets("Result").Cells(r, 2) = Right(arr(j), Len(arr(j)) - InStr(1, arr(j), "/")) Else Cells(r, 1) = arr(j) End If r = r + 1 Next j End Sub
Пример с тем как информация выглядит в первоначальном виде, и как ее раскидывает макрос прикладываю. Но макрос работает только с одной выделенной ячейкой. Если выделить к примеру две ячейки – он не работает. Помогите доработать макрос, чтобы он мог работать с выделенным диапазоном ячеек.
Возможно кто-небудь подскажет, как на VBA можно написать процедуру, которая проверяет формат ячеек заданного диапазона. Если формат ячеек текстовый - ничего не делать, если не текстовый - присвоить ячейкам текстовый формат. Искал в интернете материал по заданной теме - ничего подходящего не обнаружил...
Есть небольшой вопрос (возможно глупый, но самостоятельно его не осилил). Есть таблица с тремя столбцами: в первом столбце уникальный код, в двух других даты. Я добавил еще два столбца (в примере – с заголовками х и у), в которых вычисляю разницу между сегодняшним днем и указанными датами. На основании этой таблицы необходимо сделать отчет, в котором бы выводились все коды и значение из столбцов х и у, если значение ненулевое.
В принципе это можно сделать с помощью сводной таблицы, выбрав в качестве аргумента не количество значений, а максимальное значение (все коды уникальные, поэтому это будет правильное значение), но можно ли сделать так, чтобы в сводной таблице отображались только ненулевые значения?
Помогите пожалуйста подправить макрос. На одном листе книги есть столбец А, на другом - столбцы В и С. Нужно сделать следующее: при совпадении значений в столбце А и столбце В, значения из столбца А макрос заменял значением из столбца С. Пример на всякий случай выложил.
Макрос:
Option Explicit
Sub ReStarT()
'Dim rRange As Range 'Dim rCell As Range
Dim i As Integer Dim j As Integer Dim kon1 As Long, kon2 As Long, kon3 As Long Dim coly As Long, colx As Variant, colz As Long
ActiveWorkbook.Sheets("Sheet1").Select For coly = 1 To Cells(1, Columns.Count).End(xlToLeft).Column If Cells(1, coly) = "Apple Barcode" Then kon1 = Cells(1, coly).End(xlDown).Row
ActiveWorkbook.Sheets("Data").Select For colx = 1 To Cells(1, Columns.Count).End(xlToLeft).Column If Cells(1, colx) = "Apple Code" Then kon2 = Worksheets("Data").Columns(colx).Find(What:="").Row
ActiveWorkbook.Sheets("Data").Select For colz = 1 To Cells(1, Columns.Count).End(xlToLeft).Column If Cells(1, colz) = "Price" Then kon3 = Worksheets("Data").Columns(colz).Find(What:="").Row
For i = 1 To kon1 For j = 1 To kon2 If Sheets("Sheet1").Cells(j, coly) = Sheets("Data").Cells(i, colx) Then Sheets("Sheet1").Cells(i, coly) _ = Sheets("Data").Cells(j, colz)
Здравствуйте! Помогите написать макрос для следующего случая:
Есть два столбца с двумя показателями (см. пример). Разница между двумя показателями не должна превышать 20%. Если есть превышение 20 % порога – нужно от второго показателя в текущей строке отнять превышение и прибавить его ко второму показателю в строке, где превышения нет.
Т.е. к примеру: отнять превышение 20% порога в ячейке В11 и прибавить к ячейке В9, но при этом общая сумма (ячейка В14) меняться не должна.