Здравствуйте. На форуме, да и вообще в интернете достаточно много примеров с применением ВПР при частичном совпадении текста. Но во всех них общее значение искомого ищется в массиве. Мне же наоборот, нужно по значению массива определить в какую категорию это значение попадет. Решение на VBA есть, больше интересует вариант с формулой. Заранее спасибо.
Здравствуйте, Имеется таблица, в которой заданы интервалы вида "начало" и "конец", а так же столбец с типом покрытия для этого участка. В соседней таблице нужно сосчитать сумму длин интервалов для каждого типа. Я могу это сделать макросом или с дополнительным столбцом, но интересует возможность решить одной формулой. Заранее спасибо, пример прикрепляю.
Здравствуйте. Помогите пожалуйста пересортировать текст, описывающий геологический разрез. В каждой ячейке собран набор интервалов, отсортированный по типу пород. Хотелось бы получить в соседней ячейке список интервалов, отсортированных по глубине, с пометкой о типе породы напротив каждого интервала. Заранее благодарен, прикрепил файл с примером реальных данных.
Здравствуйте, в достаточно длинной выгрузке иногда встречаются числа, "слипшиеся" в одно. Хотелось бы эти строки отфильтровать через поиск аномально большого значения в ячейке среди остальных. Вопрос, как получить значение максимального числа ? Подобное обсуждалось тут, но я не сумел запустить предложенную Виктором формулу. Файл приложил, заранее благодарен за совет.
Здравствуйте. Я анализирую результаты экспериментов, приходящих в виде текстовых файлов. Для анализа, мне нужно выделить интервалы значений, в которых измеряемый параметр опускается ниже определенного значения. На скриншоте ниже - слева таблица исходных данных, справа - вид, который хотелось бы получить. Структура файлов постоянна. Первый столбец - глубина, оттуда забираются значения TOP и BOTTOM, второй столбец - замеряемый параметр и пятый столбец - критерий для сравнения. У меня получилось написать процедуру, которая корректно обрабатывает интервалы, у которых есть "начало" и "конец", однако если первое значение параметра в исходном файле будет уже ниже критерия - такое вхождение проигнорируется. Вот что у меня получилось, а во вложении архив с xlsm и примером исходного файла данных.
Скрытый текст
Код
Option Explicit
Function ReadTXTfile(ByVal filename As String) As String
Dim fso As Object
Dim ts As Variant
Set fso = CreateObject("scripting.filesystemobject")
Set ts = fso.OpenTextFile(filename, 1, True): ReadTXTfile = ts.ReadAll: ts.Close
Set ts = Nothing: Set fso = Nothing
End Function
Sub ReadTXT()
Dim AllText() As String
Dim Values() As String
Dim buff() As String
Dim i As Long
Dim j As Integer
Dim lLastRow As Long
Dim Top As String
Dim Bottom As String
Dim InsideInterval As Boolean
AllText = Split(ReadTXTfile(Application.ThisWorkbook.Path & "/1.txt"), vbNewLine)
ReDim Values(1 To UBound(AllText), 1 To 5)
For i = 1 To UBound(AllText)
If AllText(i) <> "" Then
buff = Split(AllText(i), " ")
For j = 0 To UBound(buff)
Values(i, j + 1) = buff(j)
Next j
End If
Next i
InsideInterval = False
For i = 1 To UBound(Values, 1)
With Worksheets("Sheet1")
'Debug.Print (Values(i, 1) & " " & Values(i, 2) & " " & Values(i, 3))
If InsideInterval = False And Values(i, 2) < Values(i, 5) Then
InsideInterval = True
lLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
Top = Values(i, 1)
.Cells(lLastRow + 1, 1) = Top
End If
If InsideInterval = True And Values(i, 2) > Values(i, 5) Then
InsideInterval = False
lLastRow = .Cells(Rows.Count, 2).End(xlUp).Row
Bottom = Values(i - 1, 1)
.Cells(lLastRow + 1, 2) = Bottom
End If
End With
Next
End Sub
Здравствуйте. Из файла Excel генерируются однотипные документы Word со вставкой значений на определенные позиции шаблона через закладки. Количество созданных закладок заведомо превышает нужное, т.е. после создания, документ Word содержит бесполезные поля. Подскажите пожалуйста, как можно очистить текст в закладках документа. Пробовал:
Код
Dim wrdApp As Object
Dim wrdDoc As Object
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(ThisWorkbook.Path & "\test.docx")
For Each elem In wrdDoc.bookmarks
elem.Text = ""
elem.Delete
Next
wrdDoc.Close
Set wrdDoc = Nothing
Set wrdApp = Nothing
Удаляются только записи о закладках, но не текст на странице. Во вложении два файла, если это поможет. Заранее спасибо.
Здравствуйе, интересует возможность решения задачи, ранее опубликованой по ссылке в сообщении #5. Несмотря на варианты, представленные в теме, интересует возможность пакетной обработки листов макросом со сбором статистики. Плюс, вывод дополнительной информации, такой как максимим в столбце B и соотвествующее значение столбца А. Цену вижу в 10-15 долларов, или в рублевом эквиваленте, но не с переводом на яндекс или счет телефона. Самый удобный вариант для меня - перевод на кошелек WMZ. Будучи не в первый раз в этой ветке, прошу не беспокоится и не забивать личку участникам, с количеством сообщений менее 200. Остальным как обычно, могу предолжить преоплату вплоть до 100%. Спасибо.
Здравствуйте, помогите пожалуйста составить формулу. В приложенном файле таблица, описывающая статус выполнения заданий с именем ответсвенного. Меня интересует статистика по заданиям, находящимся на "Этап 3". Необходимо выбрать задания на этом этапе где ответсвенный не назначен, что я сделал сделующей формулой:
Здравствуйте, пытаюсь генерировать файлы Word из Excel, вставляя в определенные места документа таблицы. Столкнулся с тем, что файл, работающий на моем компьютере, при запуске у коллег, выдает упомянутую выше ошибку. Буду благодарен, если найдете время запустить у себя и проверить работоспособность. Так же заранее спасибо за любые советы по решению.
Здравствуйте, почему-то не удается прикрутить ранее работающий код. Имеется несколько листов с данными, на каждый из них вставлен график. Хотелось бы программно задать столбцы для отображения. Нижеприведенный код выдает ошибку "Parameter not valid"
Код
For wr = 1 To Worksheets.Count
If Worksheets(wr).Name = "Chart" Then Exit For
lRow = Worksheets(wr).Cells(Rows.Count, 1).End(xlUp).Row
Worksheets(wr).Activate
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection(1).Values = "='" & Worksheets(wr).Name & "'!" & Range("B1:B" & lRow).Address
ActiveChart.SeriesCollection(1).XValues = "='" & Worksheets(wr).Name & "'!" & Range("C1:C" & lRow).Address
Next
Подскажите пожалуйста в чем ошибка. Заранее спасибо.
Здравствуйте. Подскажите пожалуйста, как забрав диапазон в массив, перебрать его и подсчитать количество совпадений одной из его размерностей с заданным значением ? Т.е. в приложенном примере хотелось бы сосчитать сколько ячеек столбца С содержат значения A, B и C. Заранее спасибо.
Здравствуйте, прошу вашего совета по следующему вопросу. Имеется две процедуры записанные в разные модули, выполняющие закраску ячеек. Так как цвета заливки одинаковые, появилась идея объявить цвета как константы. Если ничего не путаю, то объявление с Public делает их видимыми для всех модулей. Однако, следующий вид объявления дает ошибку:
Код
Public Const colorRed = RGB(255, 0, 0)
Ошибка Constant expression required. Нашел похожую тему, однако и такой метод у меня не работает, выдавая переполнение. Если не очень понятно написано, прикладываю пример. Заранее спасибо.
Здравствуйте, тема пересекается с недавней, где все получилось если данные вводятся / меняются вручную. При загрузке данных из текстового файла должна происходить заливка цветом ячеек, по граничным значениям, заданным на листе "Work", однако на строке кода выгрузки данных на лист, возникает ошибка указанная в названии темы. Не могу понять, в чем отличие простого впечатывания значений в ячейки когда все работает, от выгрузки на лист из массива. Прикладываю проблемный файл и пример текстового из которого происходит загрузка. Заранее спасибо.
Здравствуйте, пытаюсь написать макрос вычисляющий значение в столбце и закрашивающий ячейку в зависимости от выбранного значения. Если привязать выполнение к кнопке, то макрос работает. Но если назначить его на событие изменения листа, что бы пересчет и заливка выполнялись автоматически при смене данных, то происходит зацикливание. Видимо вычисление / закрашивание первой ячейки приводит к повторному запуску самого себя и Excel просто виснет. Буду благодарен, если посмотрите код ниже или файл пример и посоветуете как обойти такое поведение.
Скрытый текст
Код
Sub Paint()
Dim lRow As Long
Dim i As Long
Dim ws As Worksheet
'переменные для хранения граничных значений
Dim brdBottom As Integer
Dim brdMiddle As Integer
Dim brdTop As Integer
'переменные для хранения цветовых заливок
Dim clrGreen, clrYellow, clrOrange, clrRed
clrGreen = RGB(144, 238, 144)
clrYellow = RGB(255, 255, 0)
clrOrange = RGB(255, 165, 0)
clrRed = RGB(255, 0, 0)
With Worksheets("Settings")
'Получение текущих граничных значений
brdBottom = .Cells(1, 1).Value
brdMiddle = .Cells(2, 1).Value
brdTop = .Cells(3, 1).Value
End With
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like "WS*" Then
With ws
lRow = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lRow
.Cells(i, 4).Value = .Cells(i, 2).Value - .Cells(i, 1).Value
If .Cells(i, 4).Value >= 0 Then
.Cells(i, 4).Interior.Color = vbGreen
Else
.Cells(i, 4).Interior.Color = vbRed
End If
If IsNumeric(.Cells(i, 3).Value) = True Then
Select Case .Cells(i, 3).Value
Case Is <= brdBottom
.Cells(i, 3).Interior.Color = clrGreen
Case brdBottom To brdMiddle
.Cells(i, 3).Interior.Color = clrYellow
Case brdMiddle To brdTop
.Cells(i, 3).Interior.Color = clrOrange
Case Is > brdTop
.Cells(i, 3).Interior.Color = clrRed
End Select
End If
Next i
End With
End If
Next
End Sub
Здравствуйте, подскажите пожалуйста как можно решить следующую задачку. В трех столбцах имеется набор данных, столбец A - верх интервал, B - низ интервал, С - значение. Рядом расположена таблица с перечнем интересующих диапазонов верх - низ. Хотелось бы в эту таблицу добавить максимальные значения столбца С для каждого пересекающегося интервала. Надеюсь, пример поможет понять. Заранее спасибо. Извиняюсь, пример приложил.
Здравствуйте. Пытаюсь настроить условное форматирование во время работы макроса. Проблема в том, что документ используется как в русскоязычных установках Excel, так и в английских версиях. Я всегда думал, что язык формул = языку интерфейса. Определяю язык интерфейса как советует MSDN, однако в этом случае на обоих версиях офиса получаю значение
Код
msoLanguageIDInstall
равное 1049. И, соответственно, если файл запущен в русскоязычной версии Excel, в условное форматирование прилетает английский вариант формул. Полный код:
Код
Set objLangSet = Application.LanguageSettings
With Sheets("Sheet1")
.Range("A1").FormatConditions.Delete
If objLangSet.LanguageID(msoLanguageIDInstall) = 1049 Then
.Range("A1").FormatConditions.Add Type:=xlExpression, Formula1:="=A1=1=TRUE"
.Range("A1").FormatConditions(1).Interior.Color = vbYellow
Else
.Range("A1").FormatConditions.Add Type:=xlExpression, Formula1:="=A1=1=ИСТИНА"
.Range("A1").FormatConditions(1).Interior.Color = vbYellow
End If
Здравствуйте, помогите пожалуйста составить формулу выбирающую все значения из строки по совпадению в столбце А. Попробовал из примеров комбинацию ИНДЕКС и ПОИСКПОЗ, но так как столбцов много, вводить вручную указывая номер колонки не вариант. Ввод как формулы массива, у меня подхватывает в том числе значения первого столбца, плюс если задать диапазон с запасом, появляются N/A. И не могу придумать, как при неточном совпадении искомого значения выбрать строку, в которой значение в А максимально близко к искомому. Заранее спасибо.
Здравствуйте, подскажите пожалуйста можно ли с помощью VBA переформатировать таблицу, как показано на рисунке ниже. Excel файл так же прикладываю. Заранее спасибо.
Здравствуйте, пробую сделать диаграмму Ганта для отображения фаз проектов по примеру. Столкнулся с проблемой, что заливка производится одинаково для всех проектов, не зависимо от их дат и соответствует временному интервалу первого проекта в списке. Буду благодарен, если сможете подсказать что нужно подправить.
Здравствуйте. Не могли бы вы подсказать, как можно автоматизировать следующее. Имеется таблица с интервалами, в которой каждому интервалу соответствует имя и границы От и До (в примере Таблица 2) и вторая таблица, так же со значениями От и До, но без имен (в примере Таблица 1). В результирующую таблицу хотелось бы заносить, сколько записей Таблицы 1 соответствуют каждому имени Таблицы 2. Возможны случаи, когда диапазон в таблице 1 пересекает два имени в таблице 2, но они крайне редки и такие случаи могут быть либо проигнорированны полностью, либо отнесены к любому имени. Прикладываю картинку, для лучшего понимания если объяснение вышло несколько сумбурным. Ну и Excel файл конечно тоже, на случай если задача заинтересует. Формулы, макросы - ограничений нет, буду рад любой помощи. Заранее спасибо.
Здравствуйте, использую следующий макрос для объединения информации со всех листов книги на одном:
Код
Sub Combine()
Dim ws As Worksheet, l&
With Sheets("Svod")
'Sheets("Svod").UsedRange.Offset(1).ClearContents
For Each ws In Worksheets
If Not ws.Name = "Svod" Then
l = Cells(Rows.Count, 1).End(xlUp).Row
ws.UsedRange.Offset(1).Copy .Range("a" & l + 2)
End If
Next
End With
End Sub
Содержимое копируется, но возникает пустая строка между данными с разных листов. Подскажите пожалуйста что нужно изменить ? Спасибо.
Здравствуйте, помогите пожалуйста составить формулу. Имеется таблица из двух столбцов, дата и наименование продукта. Пытаюсь переформатировать ее в год - количество каждого из продуктов. Когда в ячейках продукта одна запись, например Яблоко или Груша, у меня получилось сделать с помощью функции SUMPRODUCT (СУМПРОИЗВ в русской версии Excel). Ничего не получается, когда нужно учесть содержимое ячеек, в которых несколько значений разделенных запятой (Яблоко, Груша). Заранее спасибо.
Здравствуйте, помогите пожалуйста со следующей формулой. Имеется таблица наблюдения за погодой, вида дата - температура. Каким образом в одной ячейке можно записать обобщенный результат наблюдений за период: "максимальная температура хх отмечена дата1, дата2, ... датаN ? Пробовал применить НАИБОЛЬШИЙ, но она вводится как массивная, что не подходит, т.к. значения раскидываются по столбцу. Заранее спасибо.
Доброе утро, подскажите пожалуйста, в чем может быть причина не срабатывания функции активирования окна запущенного приложения с помощью AppActivate ? Создал модуль, поместил в него простые строки:
Код
Sub Main()
AppActivate "Untitled - Notepad"
End Sub
Запущен блокнот, однако при выполнении макроса окно блокнота так и остается свернутым. Я что-то не так делаю или неверно понимаю назначение функции ? Заранее спасибо.
Здравствуйте, необходимо создать приложение PowerApps для отображения таблицы Excel, размещенной в облаке. Т.к. задача к Excel имеет косвенное отношение, участникам, знакомым с разработкой PowerApps предлагаю обращаться в личку, для обсуждения деталей и возможной стоимости работы. Спасибо.
Здравствуйте. В одной из тем, участник спрашивал о решении задачи,имеющей бесконечное множество решений. Я изменил условия следующим образом: "Найти все возможные сочетания значений X1, X2, X3, X4, X5 и X6, при котором будет верно выражение x1*x2*x3*x4*x5*x6=9000, при условии, что все X целые положительные числа от 1 до 10". Получился такой монстр:
Скрытый текст
Код
Option Explicit
Sub main()
Dim x1: Dim x2: Dim x3: Dim x4: Dim x5: Dim x6
Dim a: Dim b: Dim c: Dim d: Dim e: Dim f: Dim i: Dim lLastRow
i = 1
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For a = 2 To lLastRow
x1 = Worksheets("Sheet1").Cells(a, 1).Value
For b = 2 To lLastRow
x2 = Worksheets("Sheet1").Cells(b, 2).Value
For c = 2 To lLastRow
x3 = Worksheets("Sheet1").Cells(c, 3).Value
For d = 2 To lLastRow
x4 = Worksheets("Sheet1").Cells(d, 4).Value
For e = 2 To lLastRow
x5 = Worksheets("Sheet1").Cells(e, 5).Value
For f = 2 To lLastRow
x6 = Worksheets("Sheet1").Cells(f, 6).Value
If x1 * x2 * x3 * x4 * x5 * x6 = 9000 Then
i = i + 1
Worksheets("Sheet1").Cells(i, 9).Value = x1
Worksheets("Sheet1").Cells(i, 10).Value = x2
Worksheets("Sheet1").Cells(i, 11).Value = x3
Worksheets("Sheet1").Cells(i, 12).Value = x4
Worksheets("Sheet1").Cells(i, 13).Value = x5
Worksheets("Sheet1").Cells(i, 14).Value = x6
End If
Next
Next
Next
Next
Next
Next
Application.ScreenUpdating = True
End Sub
Можно ли как-то упростить перебор убрав нагромождение вложенных циклов ? Возможно ли решение, когда количество X заранее не известно и определяется количеством заполненных столбцов ? Прикрепил файл пример, если так будет удобнее. Уточню, на всякий случай, я не пытаюсь заработать обещанные там 10$, и спрашиваю исключительно из собственного интереса к вопросу. Заранее спасибо.
Здравствуйте, подскажите пожалуйста. Имеется файл, с таблицей, две верхних строки составляет параметр и его единицы измерения. Количество заполненных столбцов, заранее не известно. Возможно ли определить последнюю заполненную строку, после транспонирования в столбец и вставить определенный текст в следующую ячейку ? Транспонирование реализовано по одному из примеров в Приемах, но сейчас просто сделано с запасом и некоторая ручная работа все равно присутствует. Возможно ли решить такое в общем виде и с помощью формул ? Или все таки для подобного стоит использовать VBA ? Заранее спасибо, подготовил файл пример показывающий текущую реализацию и, надеюсь, это можно улучшить.
Здравствуйте, строю графикк изменения значения от времеи. Параметр может быть измнен из-за влияния события, описанного как коментарий в столбце Е. Есть ли возможность отобразить на графике линию, соответствующуу событию в его время и добавить подпись ?
Здравствуйте, подскажите пожалуйста, возможно ли реализовать следующее. Допустим, имеется ячейка на листе, на которую выводятся значения из сторонней программы (в примере для простоты генерируются случайрные числа). Я хочу построить график этих значений от времени, за определенный промежуток. Это очень напоминает осцилограф, показывающий данные vs время. Для обновления и перестроения использую функцию Application.OnTime, но обновление экрана происходит дискретно, а хотелось бы сделать это более плавно. При занижении значения задержки - виснет Excel. Заранее спасибо за помощь, для удобства прилагаю файл-пример, и текущий вариант под спойлером.
Скрытый текст
Код
Option Explicit
Public n As Integer
Public lLenght As Integer
Sub Calc()
Dim Source As Double
'Длина диапазона для отображения на графике-осцилограмме
lLenght = 60
'Выполнение по времени
Application.OnTime Now + 0.000006, "Calc"
'Заполняем ячейку случайным числом, имитируя работу сторонней программы
Randomize
Worksheets("Sheet1").Cells(1, 3).Value = Rnd(1)
'и считываем значение ячейки в переменную
Source = Worksheets("Sheet1").Cells(1, 3).Value
'Первый запуск, заполняем ячейки с первой до lLenght
If n < lLenght Then
n = n + 1
Worksheets("Sheet1").Cells(n, 1).Value = Source
'Достигнув lLenght, первая строка при каждой итерации удаляется и запись
'производится в последнюю ячейку, соответсвующую выбранной длине отображения
Else
n = lLenght
Worksheets("Sheet1").Cells(1, 1).Delete Shift:=xlUp
Worksheets("Sheet1").Cells(n, 1).Value = Source
End If
'После удаления первой ячейки, переназначаем графику диапазон для отображения
Worksheets("Sheet1").ChartObjects("Chart 8").Chart.SetSourceData Source:=Worksheets("Sheet1").Range("A1:A" & lLenght)
Application.ScreenUpdating = True
End Sub
Так же, буду благодарен любым советам по оптимизации. Спасибо.