Архив

Публикации с меткой ‘Формулы’

Функция СУММЕСЛИ, а так же СУММЕСЛИ по двум критериям

 

Думаю, для начала неплохо было бы пояснить, что такое СУММЕСЛИ(это для тех, кто не знает).
СУММЕСЛИ – Суммирует ячейки, удовлетворяющие заданному условию. Всего для СУММЕСЛИ предусмотрено три аргумента: Диапазон, Критерий, Диапазон_Суммирования.

=СУММЕСЛИ(A1:A20000;A1;B1:B20000)

Диапазон(A1:A20000) — указывается диапазон с критериями. Т.е. столбец, в котором искать значение, указанное аргументом Критерий.
Критерий(A1)- значение(текстовое или числовое, а так же дата), которое необходимо найти в Диапазоне. Может содержать символы подстановки «*» и «?». Т.е. указав в качестве Критерия «*масса*» Вы сможете просуммировать по значениями, в которых встречается слово «масса». А указав «масса*» — значения, начинающиеся на «масса». «?» — заменяет лишь один символ, т.е. указав «мас?а» вы сможете просуммировать строки и со значением «масса» и со значением «маска» и т.д.
Все текстовые критерии и критерии с логическими и математическими знаками необходимо заключать в двойные кавычки («). Если критерием является число, использовать кавычки не требуется. Если требуется найти непосредственно вопросительный знак или звездочку, необходимо поставить перед ним знак «тильды» (~).
Диапазон_Суммирования (B1:B20000)(необязательный аргумент) — указывается диапазон сумм или числовых значений, которые необходимо просуммировать.
Сначала поясню общий момент: функция ищет в Диапазоне значение, указанное аргументом Критерий, и при находждении совпадения суммирует данные, указанные аргументом Диапазон_Суммирования. Т.е. если у Вас в столбце А название отдела, а в столбце В суммы, то указав в качестве критерия «Отдел развития», то результатом функции будет сумма всех значений столбца В, напротив которых в столбце А встречается «Отдел развития». Диапазон_Суммирования может не совпадать по размеру с аргументом Диапазон. Однако при определении ячеек для суммирования, в качестве начальной ячейки для суммирования будет использована верхняя левая ячейка аргумента Диапазон_Суммирования, а затем суммируются ячейки, соответствующие по размеру и форме аргументу Диапазон.
Теперь некоторые особенности. Последний аргумент функции(Диапазон_Суммирования) является необязательным. А это значит, что его можно не указывать. Если его не указать, то функция просуммирует значения, указанные аргументом Диапазон. Для чего это нужно. Например, Вам необходимо получить сумму только тех чисел, которые больше нуля. В столбце А суммы. Тогда фунция будет иметь такой вид:

=СУММЕСЛИ(A1:A20000;">0")


Но что делать, когда критериев для суммирования 2 и больше? Можно, конечно, воспользоваться функцией СУММЕСЛИМН, но…Она появилась только в версиях Excel, начиная с 2007. А как же быть несчастным пользователям более ранних версий? Очень просто: использовать другую функцию — СУММПРОИЗВ. Не буду расписывать аргументы, т.к. их много и все они являются массивами значений. Данная функция перемножает массивы, указанные аргументами.
Допустим, Вам надо просуммировать только те суммы, которые относятся к одному отделу и только за определенную дату. Тогда функция будет выглядеть так:

=СУММПРОИЗВ(($A$2:$A$50=$I$3)*($B$2:$B$50=H5);$C$2:$C$50)

$A$2:$A$50 — диапазон дат. $I$3 — дата критерия, за которую необходимо просуммировать данные.
$B$2:$B$50 — наименования отделов. H5 — наименование отдела, данные по которому необходимо просуммировать.
$C$2:$C$50 — диапазон с суммами.

Разберем логику, т.к. многим она будет совершенно не ясна просто при взгляде на данную функцию. Хотя бы потому, что в справке подобное её применение не описывается. Для большей читабельности уменьшим размеры диапазонов:

=СУММПРОИЗВ(($A$2:$A$5=$I$3)*($B$2:$B$5=H5);$C$2:$C$5)

Итак, выражение ($A$2:$A$5=$I$3) и ($B$2:$B$5=H5) являются логическими и возвращают массивы логических ЛОЖЬ и ИСТИНА. ИСТИНА, если ячейка диапазона $A$2:$A$5 равна значению ячейки $I$3 и ячейка диапазона $B$2:$B$5 равна значению ячейки H5. Т.е. получается у нас следующее:

=СУММПРОИЗВ({ЛОЖЬ;ИСТИНА;ИСТИНА;ЛОЖЬ}*{ЛОЖЬ;ЛОЖЬ;ИСТИНА;ЛОЖЬ};$C$2:$C$50)

Как видно, в первом массиве два совпадения условию, а во втором одно. Далее эти два массива перемножаются(за это отвечает знак умножения(*)). При перемножения происходит неявное преобразование массивов ЛОЖЬ и ИСТИНА в числовые константы 0 и 1 соответственно({0;1;1;0}*{0;0;1;0}). Как известно, при умножении на нуль получаем нуль. И в результате получается один массив:

=СУММПРОИЗВ({0;0;1;0};$C$2:$C$50)

Далее происходит уже перемножение массива {0;0;1;0} на массив чисел в диапазоне $C$2:$C$50:

=СУММПРОИЗВ({0;0;1;0};{10;20;30;40})

И как результат получаем 30. Что нам и требовалось — мы получаем лишь ту сумму, которая соответствует критерию. Если сумм, удовлетворяющих критерию будет больше одной, то они будут просуммированы.
В примере найдете пару примеров функций для более лучшего понимания написанного выше.

Скачать пример »

  Tips_All_SUMPRODUCT.xls (29,5 KiB, 1 354 скачиваний)

Так же см.:
Summ_CellColor - Суммирование ячеек по цвету заливки
Summ_CellFont - Суммирование ячеек по цвету шрифта
Summ_CellFormat - Суммирование ячеек по формату ячейки

Как найти значение в другой таблице или сила ВПР

 

На самом деле я в данной статье хочу рассказать про возможности не только функции ВПР, но так же хочу затронуть и ПОИСКПОЗ, как очень родственную, на мой взгляд, с ВПР функцию. У каждой из данных функций есть как свои плюсы, так и минусы. Каждый сам для себя решит, что для него плюс, а что минус. Теперь к сути. Пожалуй наиболее часто возникает необходимость сравнить данные, найти данные в другой таблице, из одной таблицы добавить данные в другу, опираясь на какой-либо критерий и т.д. Возьмем простой пример: есть у Вас две таблицы:
Таблицырис.1

и  Вам из первой таблицы необходимо подставить во вторую дату для каждой фамилии. В принципе ничего сложного — всего три записи. Но три записи лишь на картинке. Реально это могут быть таблицы на тысячи записей и поиск с подстановкой данных вручную может занять не один час. К тому же я забыл упомянуть одну мелочь, а точнее две: мало того, что ФИО расположены совершенно в разном порядке в обеих таблицах и в одной из них может быть больше записей, чем в другой(или меньше), так еще таблицы расположены на разных листах(а может даже разных книгах). Вот где ВПР будет незаменима. Вам практически ничего не надо будет делать — только записать в перую ячейку столбца С второй таблицы(туда, куда необходимо подставить даты из первой таблицы):

=ВПР($A2;Лист1!$A$2:$C$4;3;0)

Записать формулу можно либо непосредственно в ячейку, либо воспользовавшись диспетчером функций, выбрав в категории Ссылки и массивы ВПР и по отдельности указав нужные критерии. Теперь копируем(Ctrl+C) ячейку с формулой, выделяем все ячейки столбца С до конца данных и вставляем(Ctrl+V).

А теперь разберем поподробнее саму функцию. Прежде чем читать далее я бы настоятельно советовал прочитать в встроенной справке подробнее про данную функцию, а если уж будет непонятно — то дочитать статью. Т.к. я лично не уверен, что поясню лучше справки. Но постараюсь :-)

Сначала основной принцип работы: ВПР ищет в первом столбце аргумента Таблица значение, указанное аргументом Искомое_значение. При нахождении нужного значения функция возвращает значение напротив найденного значения, но из столбца Таблицы, указанного аргументом Номер_столбца. С интервальным просмотром разберемся чуть позже. ВПР может вернуть только одно значений — первое, подходящее под критерий. Если искомое значение не найдено(отсутстсвует в таблице), то результатом функции будет #Н/Д. Не надо этого бояться — это даже полезно. Вы точно будете знать, каких записей нет и таким образом можете сравнивать две таблицы друг с другом. Иногда получается так, что Вы видите: данные есть в обеих таблицах, но ВПР выдает #Н/Д. Значит данные в Ваших таблицах не идентичны. В какой-то из них есть лишние неприметные пробелы(обычно перед значением или после), либо знаки кириллицы перемешаны со знаками латиницы.


$A2 — это аргумент Искомое_значение(назовем его Критерий для краткости). Это то, что мы ищем. Т.е. для первой записи второй таблицы это будет Петров С.А. Здесь можно указать либо непосредственно текст критерия(в этом случае он должен быть в кавычках — =ВПР(«Петров С.А»;Лист1!$A$2:$C$4;3;0), либо ссылку на ячейку, с данным текстом(как в примере функции). Есть небольшой нюанс: так же можно применять символы подстановки: «*» и «?». Это очень удобно, если Вам надо найти значения лишь по части строки. Например, Вы можете не вводить полностью «Петров С.А», а ввести лишь фамилию и знак звездочки — «Петров*». Тогда будет выведена любая запись, которая начинается на «Петров». Если же Вам надо найти запись, в которой в любом месте строки встречается фамилия «Петров», то можно указать так: «*петров*». Если хотите найти фамилию Петров и Вам неважно какие инициалы будут у имени-отчества, то здесь в самый раз такой вид: «Иванов ?.?.».  Если хотите указать знак подстановки вместе с данными из ячейки. Например, в ячейке А1 у Вас записано: Иванов. Вы точно знаете, что у Вас есть Иванов в другой таблице, но так же Вы знаете, что после фамилии есть еще слова. Тогда запишите следующим образом: A1&"*". Эта запись будет равнозначна «Иванов*». Очень удобно, если значений много.

Лист1!$A$2:$C$4 — это аргумент Таблица. Ничего сложного — просто указываете диапазон ячеек. Только диапазон должен содержать данные от первой ячейки с данными до самой последней. Это не обязательно должен быть указанный в примере диапазон. Если строк 100, то Лист1!$A$2:$C$100. Важно помнить две вещи: первое, это Таблица всегда должна начинаться с того столбца, в котором ищем Критерий. И никак иначе. В противном случае ничего найдено не будет или результат будет совсем не тот, которого ожидаете. Второе: аргумент Таблица должен быть «закреплен». Что это значит. Видите знаки доллара — $? Это и есть закрепление(если точнее, то это называется абсолютной ссылкой на диапазон). Как это делается. Выделяете текст ссылки(только один диапазон — один критерий) и жмете F4 до тех пор, пока не увидите, что и перед обозначением имени столбца и перед номером строки не появлиись доллары. Если этого не сделать, то при копировании формулы аргумент Таблица будет «съезжать» и результат опять-таки будет неверным.

Номер_столбца(3) — здесь просто указываем номер столбца в аргументе Таблица, значения из которого нам необоходимо подставить в качестве результата. В примере это Дата принятия — т.е. столбец №3. Если бы нужен был отдел, то указали бы 2, а если бы нам понадобилось просто сравнить есть ли фамилии одной таблицы в другой, то можно было бы указать и 1. Важно: аргумент Номер_столбца не должен превышать кол-во столбцов в аргументе Таблица. Иначе результатом формулы будет ошибка #ССЫЛКА!

Практический совет: если аргумент Таблица имеет слишком большое кол-во столбцов и Вам необходимо вернуть результат из последнего столбца, то совсем необязательно высчитывать их кол-во. Можно указать так:  =ВПР($A2;Лист1!$A$2:$C$4;ЧИСЛСТОЛБ(Лист1!$A$2:$C$4);0). К слову в данном случае Лист1! тоже можно убрать, как лишнее: =ВПР($A2;Лист1!$A$2:$C$4;ЧИСЛСТОЛБ($A$2:$C$4);0).

Интервальный_просмотр(0) —  очень интересный аргумент. Может быть равен либо ИСТИНА либо ЛОЖЬ. Сразу возникает вопрос: а почему в моей формуле там 0? Все очень просто — Excel в формулах может воспринимать 0 как ЛОЖЬ, а 1 как ИСТИНА. Если в ВПР указать данный параметр равный 0 или ЛОЖЬ, то будет происходить поиск точного соответствия заданному Критерию. Это не имеет никакого отношения к знакам подстановки(«*» и «?»). Если же использовать 1 или ИСТИНА(или же вообще не указывать последний аргумент, т.к. по умолчанию он равен ИСТИНА), то…Очень долгая история. Вкратце — ВПР будет искать наиболее похожее значение, подходящее под Критерий. Иногда очень полезно. Правда, если использовать данный параметр, то необходимо, чтобы список в аргументе Таблица был отсортирован по возрастанию. Обращаю внимание на то, что сортировка необходима только в том случае, если аргумент Интервальный_просмотр у Вас равен ИСТИНА или 1. Если же 0 или ЛОЖЬ — сортировка не нужна.


Кстати, если Вы заметили, то на картинке у меня попутаны отделы для ФИО. Это не ошибка записи. В прилагаемом к статье примере Вы увидите, как можно одной формулой подставить и их и даты, не меняя вручную аргумент Номер_столбца. Мне показалось, что подобный пример вполне может Вам пригодиться.

Обещанная ПОИСКПОЗ

Данная функция ищет значение, указанное параметром Искомое_значение в аргументе Просматриваемый_массив. А результатом функции является номер позиции найденного значения в Просматриваемом_массиве. Именно номер позиции, а не само значение. В принципе её я не буду расписывать так же подробно, потому как основные моменты ровно такие же. Если бы мы хотели применить её для таблицы выше, то она была бы такой:

=ПОИСКПОЗ($A2;Лист1!$A$2:$A$4;0)

$A2Искомое_значение. Здесь все ровно так же, как и с ВПР. Так же допустимы символы подстановки и ровно в таком же исполнении.

Лист1!$A$2:$A$4Просматриваемый_массив. Основное отличие от ВПР — допускается указать массив лишь с одним столбцом. Это должен быть тот столбец, в котором мы собираемся искать Искомое_значение. Если попытаться указать более одного столбца, то функция вернет ошибку.

Тип_сопоставления(0) — то же самое, что и в ВПР Интервальный_просмотр. С теми же особенностями. Отличается разьве что возможностью поиска наименьшего от искомого или наибольшего. Но на этом я не буду останавливаться в данной статье.

С основным разобрались. Но ведь нам надо вернуть не номер позиции, а само значение. Значит ПОИСКПОЗ нам не подходит. По крайней мере сама по себе. Но если её использовать вместе с функцией ИНДЕКС — то это то, что нам нужно и даже больше.

=ИНДЕКС(Лист1!$A$2:$C$4;ПОИСКПОЗ($A2;Лист1!$A$2:$A$4;0);2)

Такая формула результатом вернет то же, что и ВПР.

Лист1!$A$2:$C$4Массив. В качестве этого аргумента мы указываем диапазон, из которого хотим получить значения. Может быть как один столбец, так и несколько. В случае, если столбец один, то последний аргумент функции указывать не надо. К слову — данный аргумент может совершенно не совпадать с тем, который мы указываем в аргументе Просматриваемый_массив функции ПОИСКПОЗ.

Далее идут Номер_строки и Номер_столбца. Именно в качестве Номера_строки мы и подставляем ПОИСКПОЗ, которая возвращает нам номер позиции в массиве. На этом все и строится. ИНДЕКС возвращает значение из Массива, которое находится в указанной строке(Номер_строки) Массива и указанном столбце(Номер_столбца), если столбцов более одного. Важно знать, что в данной связке кол-во строк в аргументе Массив функции ИНДЕКС и кол-во строк в аргументе Просматриваемый_массив функции ПОИСКПОЗ должно совпадать. И начинаться с одной и той же строки. Это в обычных случаях, если Вы не преследуете иные цели.


Ну и все же я рекомендовал бы Вам прочитать подробнее про данные функции в справке.

В прилагаемом к статье примере Вы найдете примеры использования всех описанных случаев и пример того, почему ИНДЕКС и ПОИСПОЗ порой предпочтительнее ВПР.

Скачать пример »

  Tips_All_VLookUp.xls (26,0 KiB, 1 898 скачиваний)

Так же см.:
Как заменить/удалить/найти звездочку?
ВПР2 - поиск по четырем критериям, вывод всех совпадений

Categories: Tags:

Как удалить в ячейке формулу, оставив значения?

 

Иногда формула в ячейке нужна лишь на короткое время — только для получения результата. А затем уже не нужна ни сама формула, ни ячейки, на которые она ссылается. Но вот беда — если удалить ячейки, то формула «ломается», как это говорится. Т.е. в ячейке получается либо #ЗНАЧ! либо #ССЫЛКА!. Или Вам надо просто зафиксировать значение, полученное в результате работы формулы. Т.е. чтобы формулы там не было, а было только значение. Как ни странно, но делается это проще простого:

Выделяете ячейку/несколько ячеек с формуламиКопируетеПравая кнопка мышиСпециальная вставкаЗначения

Специальная вставка

Вот и все. Больше формул нет. Так же подобное можно сделать при помощи кода VBA:

Sub Formulas_To_Values()
    Selection.Value = Selection.Value
End Sub
Sub Formulas_To_Values()
    Selection.Value = Selection.Value
End Sub

Данный код заменяет формулы в выделенном диапазоне на значения. Только необходимо учитывать, что выделенный диапазон должен быть неразрывным. Иначе код выдаст ошибку. А такой код

Sub All_Formulas_To_Values()
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
End Sub
Sub All_Formulas_To_Values()
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
End Sub

заменит все формулы на листе в значения. При этом будут разорваны все связи на данном листе. Это стоит учитывать. Кстати, иногда именно для этого и применяют подобный код.

И в качестве бонуса ниже приведен код, который заменит все формулы на всех листах активной книги в значения:

Sub All_Formulas_To_Values_In_All_Sheets()
    Dim wsSh As Worksheet
    For Each wsSh In Sheets
        wsSh.UsedRange.Value = wsSh.UsedRange.Value
    Next wsSh
End Sub
Sub All_Formulas_To_Values_In_All_Sheets()
    Dim wsSh As Worksheet
    For Each wsSh In Sheets
        wsSh.UsedRange.Value = wsSh.UsedRange.Value
    Next wsSh
End Sub

Как быстрее вызвать:
Вообще данную команду можно вывести на Быструю панель и использовать в одно нажатие тогда, когда нужно.

В 2007 Excel это делается через Меню-Параметры Excel-Настройка. Находите нужную команду(Вставить значения) и добавляете;
В 2003 Excel: Сервис-Настройка-вкладка Команды-категория «Правка»-Вставить значения.

Теперь у Вас появится значок на Быстрой панели.

А если Вы один раз выполните вот такой код:

Sub Add_PasteSpecials()
    Application.CommandBars("Cell").Controls.Add ID:=370, before:=4
End Sub
Sub Add_PasteSpecials()
    Application.CommandBars("Cell").Controls.Add ID:=370, before:=4
End Sub

то у Вас в контекстном меню мыши появится команда — «Вставить значения». Она полностью дублирует стандартную, только вызвать её быстрее — одно нажатие и все.

Также см.:
Вставить значения

Как поменять в формулах относительные ссылки на абсолютные и наоборот?

 

Представьте ситуацию: Вы создали кучу формул в разных местах листа и вдруг Вам понадобилось сменить ссылки на ячейки в формулах с относительных на абсолютные(закрепить ссылки — проставить знак $ в формулах) или наоборот, или закрепить только столбцы, а строки оставить «плавающими» или только столбцы. Вручную это делать довольно долго. Но можно сделать без ручной правки каждой формулы. Ниже приведен код, который поможет сделать данный процесс более приятным и более быстрым :-)

Sub Change_Style_In_Formulas()
    Dim rFormulasRng As Range, li As Long
    Dim lMsg As String
 
    lMsg = InputBox("Изменить тип ссылок у формул?" & Chr(10) & Chr(10) _
                   & "1 - Относительная строка/Абсолютный столбец" & Chr(10) _
                   & "2 - Абсолютная строка/Относительный столбец" & Chr(10) _
                   & "3 - Все абсолютные" & Chr(10) _
                   & "4 - Все относительные", "The_Prist")
 
    If lMsg = "" Then Exit Sub
 
    On Error Resume Next
    Set rFormulasRng = Application.InputBox("Выделите мышкой диапазон с формулами", "Укажите диапазон с формулами", , , , , , Type:=8)
    If rFormulasRng Is Nothing Then Exit Sub
 
    Set rFormulasRng = rFormulasRng.SpecialCells(xlFormulas)
    Select Case lMsg
    Case 1    'Относительная строка/Абсолютный столбец
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlRelRowAbsColumn)
        Next li
    Case 2    'Абсолютная строка/Относительный столбец
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlAbsRowRelColumn)
        Next li
    Case 3    'Все абсолютные
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
        Next li
    Case 4    'Все относительные
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlRelative)
        Next li
    Case Else
        MsgBox "Неверно указан тип преобразования!", vbCritical
    End Select
    Set rFormulasRng = Nothing
    MsgBox "Конвертация стилей ссылок завершена!", 64, "Стили ссылок"
End Sub
Sub Change_Style_In_Formulas()
    Dim rFormulasRng As Range, li As Long
    Dim lMsg As String

    lMsg = InputBox("Изменить тип ссылок у формул?" & Chr(10) & Chr(10) _
                   & "1 - Относительная строка/Абсолютный столбец" & Chr(10) _
                   & "2 - Абсолютная строка/Относительный столбец" & Chr(10) _
                   & "3 - Все абсолютные" & Chr(10) _
                   & "4 - Все относительные", "The_Prist")

    If lMsg = "" Then Exit Sub

    On Error Resume Next
    Set rFormulasRng = Application.InputBox("Выделите мышкой диапазон с формулами", "Укажите диапазон с формулами", , , , , , Type:=8)
    If rFormulasRng Is Nothing Then Exit Sub

    Set rFormulasRng = rFormulasRng.SpecialCells(xlFormulas)
    Select Case lMsg
    Case 1    'Относительная строка/Абсолютный столбец
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlRelRowAbsColumn)
        Next li
    Case 2    'Абсолютная строка/Относительный столбец
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlAbsRowRelColumn)
        Next li
    Case 3    'Все абсолютные
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
        Next li
    Case 4    'Все относительные
        For li = 1 To rFormulasRng.Areas.Count
            rFormulasRng.Areas(li).Formula = _
            Application.ConvertFormula _
            (Formula:=rFormulasRng.Areas(li).Formula, _
             FromReferenceStyle:=xlA1, _
             ToReferenceStyle:=xlA1, ToAbsolute:=xlRelative)
        Next li
    Case Else
        MsgBox "Неверно указан тип преобразования!", vbCritical
    End Select
    Set rFormulasRng = Nothing
    MsgBox "Конвертация стилей ссылок завершена!", 64, "Стили ссылок"
End Sub

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

Функция перемещения слова в строке

 

Я тут недавно понял одну вещь: если необходимо одно слово в предложении поменять местами с другим словом, то через стандартные функции листа Excel это сделать весьма проблематично. Вот и решил создать небольшую функцию пользователя, которая бы умела перемещать слово из одной позиции в другую.

Function Move_SubString(Ячейка As String, Номер_подстроки As Long, Новое_место As Long, Optional Разделитель As String = " ")
    Dim sStr, li As Long
    Dim sNewWord As String, sTmpStr As String
    sStr = Split(Ячейка, Разделитель)
    For li = LBound(sStr) To UBound(sStr)
        If li = Номер_подстроки - 1 Then sTmpStr = sStr(li): sStr(li) = ""
    Next li
 
    For li = LBound(sStr) To UBound(sStr)
        If li = Новое_место - 1 Then
            sNewWord = sNewWord & Разделитель & sTmpStr & Разделитель & sStr(li)
        Else
            sNewWord = sNewWord & Разделитель & sStr(li)
        End If
    Next li
    Move_SubString = Application.Trim(sNewWord)
End Function
Function Move_SubString(Ячейка As String, Номер_подстроки As Long, Новое_место As Long, Optional Разделитель As String = " ")
    Dim sStr, li As Long
    Dim sNewWord As String, sTmpStr As String
    sStr = Split(Ячейка, Разделитель)
    For li = LBound(sStr) To UBound(sStr)
        If li = Номер_подстроки - 1 Then sTmpStr = sStr(li): sStr(li) = ""
    Next li

    For li = LBound(sStr) To UBound(sStr)
        If li = Новое_место - 1 Then
            sNewWord = sNewWord & Разделитель & sTmpStr & Разделитель & sStr(li)
        Else
            sNewWord = sNewWord & Разделитель & sStr(li)
        End If
    Next li
    Move_SubString = Application.Trim(sNewWord)
End Function

Ячейка — текст или ссылка на ячейку с текстом, в котором необходимо переместить слово.

Номер_подстроки — это номер слова в строке, которое перемещаем.

Новое_место — номер позиции слова в строке, куда перемещаем.

Разделитель — необязательный аргумент. По умолчанию — пробел. Этим символом будет разделено перемещаемое слово.

С помощью функции можно либо переместить слово с одной позиции в предложении на другую или поменять слова в предложении местами. В файле-примере вы найдете примеры применения обоих вариантов.

Скачать пример »

  Tips_Macro_MoveSubstring.xls (38,5 KiB, 568 скачиваний)

Также см.:
Работа с текстом
Как перевернуть слово?

Вставить значения

 

Данная команда применяется для замены формул в ячейках на значения(результат вычисления формул). А именно: если у Вас в ячейке прописана какая-либо формула и Вы хотите зафиксировать результат вычисления этой формулы независимо от значений других ячеек.

В общем аналогична Специальной вставке(Значения) в Excel, с тем различием, что необходимо всего лишь выделить диапазон со значениями и нажать кнопку Вставить значения на панели.

Действие данной команды можно отменить, нажав Ctrl+Z или кнопку возврата значений на панели Excel.

Также см.:
Как удалить в ячейке формулу, оставив значения?

ВПР2 — поиск по четырем критериям, вывод всех совпадений

 

Если не все, то очень многие из Вас знают функцию ВПР(VLookUp) в Excel(если не знаете — прочитайте статью — Как найти значение в другой таблице или сила ВПР). Несомненно очень удобная и нужная функция. Но, думаю, у многих появлялось желание сделать так, чтобы эта чудо-функция возвращала бы не только ПЕРВОЕ найденное значение, но и второе, и третье, и четвертое, и т.д. Короче все найденные значения. И работала бы не с одним критерием, а с несколькими. Как минимум с двумя. Я не был исключением из множества и именно поэтому решил создать аналог ВПР, но с возможностью поиска по двум и более критериям(до 4-х), и возможностью вернуть массив всех найденных значений. Либо n-ное найденное значение. Решил и создал. Более оригинального названия, чем ВПР2 я ей не придумал… Итак, ВПР2.

Диспетчер функций-Категория:Функции MyAddin-ВПР2

ВПР2

Синтаксис функции:

=ВПР2($A$1:$E$20;J1;1;5;2;K1;2;L1;3;M1;4;7)

Диапазон значений($A$1:$E$20) — указывается диапазон, содержащий критерии поиска и искомые значения(аналог аргумента Таблица в стандартном ВПР).

Критерий1(J1), Критерий2(K1), Критерий3(L1), Критерий4(M1) — указывается ссылка на ячейку с критерием поиска(аналог аргумента Искомое_значение в стандартном ВПР). Если критерий поиска только один, то остальные поля следует оставить пустыми. Допускается применение в критериях символов подстановки — «*» и «?».

Номер столбца1, Номер столбца2, Номер столбца3, Номер столбца4 — указывается номер столбца в диапазоне значений, в котором следует искать соответствующий критерий(аналог аргумента Номер_столбца в стандартном ВПР). Если только один критерий, то остальные поля оставляем пустыми. Для Критерия1 указываем номер столбца в Диапазоне значений(именно номер в Диапазоне значений, а не номер столбца на листе). В примере для  Критерия1 указан Номер столбца1 — 1, Критерий2 — 2, Критерий3 — 3 и Критерий4 — 4.

Номер столбца искомых значений — указывается номер столбца, значения из которого следует найти. В примере — 5.

Выводить первое значение — способ вывода найденных значений(аналог аргумента Интервальный просмотр в стандартном ВПР).

  • 0 — выводит последнее найденное значение — функция вернет только одно последнее найденное в указанном массиве значение;
  • 1 — выводит первое найденное значение — функция вернет только одно первое найденное в указанном массиве значение;
  • 2 — выводит значение под указанным номером вхождения(если выбран, то необходимо указать Номер вхождения) — функция вернет только одно  значение, порядковый номер которого будет равен указанному Вами аргументу Номер вхождения. Т.е. если необходимо вывести только 7-ое найденное значение, указываем Номер вхождения — 7(как в примере). В качестве данного аргумента можно использовать данные в ячейках. Если номер вхождения не указан — функция вернет значение Не указан номер вхождения!;
  • -1 — выводит все найденные значения (для этого требуется ввести формулу массива: Выделить диапазон строк, в которые следует поместить результат. В строку формул ввести данную функцию и нажать Ctrl+Shift+Enter).

Номер вхождения — может быть целым числом, либо ссылкой на ячейку с целым числом. Обязателен только если параметр «Выводить первое значение» равен 2. Если указанный номер вхождения превышает количество найденных значений, то функция вернет 0.

Также см.:
Как найти значение в другой таблице или сила ВПР

Translite — Перевод с транслита и обратно

 

Хоть написание текстов на транслите и уходит постепенно в прошлое, некоторые люди все же на нем пишут. Лично мне порой просто лень вчитываться в эти буржуйские символы, которыми такие люди пытаются передать весь смысл великого и могучего. Люди, конечно, не виноваты(причин может быть множество), но вот желания читать(а что еще хуже — писать) на транслите из-за этого больше не становиться. Поэтому решил написать простенькую функцию, которая переводит текст, написанный на транслите на русский, и наоборот — с русского на транслит.

Транслит

Синтаксис:

=Translit(B8;0)

Ячейка с текстом или текст(B8) — указывается ячейка, текст в которой Вы хотите перевести.

Тип преобразования(0) — Необязательный аргумент. По умолчанию принимает значение 1. Всего может использоваться два типа: 1 — преобразование с транслита на русский; 0 — с русского на транслит.

Следует помнить, что не все пишут на транслите по установленным правилам(поверьте, они существуют!), вследствие чего не всегда текст, написанный на транслите может быть корректно переведен на русский.

 

Summ_CellFormat — Суммирование ячеек по формату ячейки

 
Функция еще менее узкого круга примеения, чем Summ_CellColor - Суммирование ячеек по цвету заливки. Расписывать нечего. По аналогии с Summ_CellColor и Summ_CellFont суммирует ячейки по их формату. К примеру: имеются данные по каким-либо финансовым операциям(продажи, суммы заключенных договоров, прибыль и т.д. и т.п.). И данные эти записаны по разному: где-то это формат долларов, где-то формат рублей, где-то гривны. А Вам надо просуммировать отдельно гривны, отдельно доллары и отдельно рубли. И как? Ручками? В Excel нет функции, которая бы различала формат ячейки. Вот тогда-то и может пригодится эта функция.

Диспетчер функций-Категория:Функции MyAddin-Summ_CellFont

Summ_CellFormat

Синтаксис:

=Summ_CellFormat($E$2:$E$20;J8;I8;3)

Диапазон суммирования($E$2:$E$20) — диапазон значений для суммирования. Можно указать несколько столбцов. Столбец с критерием(если планируется суммировать еще и по критерию) не обязательно должен входит в диапазон. Именно в этом диапазоне ищутся совпадения формата ячейки с указанным.

Ячейка с форматом(J8) — ячейка-образец формата.

Критерий(I8) — необязательный аргумент. Если указан, то суммируются ячейки с указанным критерием и форматом ячейки. Допускается применение в критерии символов подстановки — «*» и «?». Если не указан, то суммируются все ячейки, к которым применен указанный формат. Если в диапазоне суммирования находятся ячейки с текстом, то они будут игнорироваться.

Столбец критерия(3) - указывается номер столбца, в котором следует искать критерий(если критерий указан). Если Столбец критерия не указан, то критерий просматривается в том столбце, в котором находится сам критерий. Указывается номер столбца на листе. Т.е. если критерии находятся в столбце C, то следует указать 3(как в примере).

Примечание: данная функция не учитывает ячейки, к которым применено Условное Форматирование.

Summ_CellFont — Суммирование ячеек по цвету шрифта

 

Данная функция аналогична функции Summ_CellColor - Суммирование ячеек по цвету заливки, только суммирует данные не по цвету заливки, а по цвету шрифта данных, записанных в ячейке. Круг решения задач с применением этой функции, наверное, еще меньше, чем с применением функции Summ_CellColor. Однако это не означает, что она никому не нужна. Круг хоть и меньше — но он есть. И я надеюсь, что не зря писал данную функцию и она все же пригодится кому-либо.

Диспетчер функций-Категория:Функции MyAddin-Summ_CellFont

Summ_CellFont

Синтаксис:

=Summ_CellFont($E$2:$E$20;I6;I6;3)

Диапазон суммирования($E$2:$E$20) — диапазон значений для суммирования. Можно указать несколько столбцов. Столбец с критерием(если планируется суммировать еще и по критерию) не обязательно должен входит в диапазон. Именно в этом диапазоне ищутся совпадения цвета шрифта с указанным.

Ячейка с шрифтом(I6) — ячейка-образец цвета шрифта.

Критерий(I6) — необязательный аргумент. Если указан, то суммируются ячейки с указанным критерием и цветом шрифта. Допускается применение в критерии символов подстановки — «*» и «?». Если не указан, то суммируются все ячейки с указанным цветом шрифта. Если в диапазоне суммирования находятся ячейки с текстом, то они будут игнорироваться.

Столбец критерия(3) — указывается номер столбца, в котором следует искать критерий(если критерий указан). Если Столбец критерия не указан, то критерий просматривается в том столбце, в котором находится сам критерий. Указывается номер столбца на листе. Т.е. если критерии находятся в столбце C, то следует указать 3(как в примере).

Примечание: данная функция будет корректно работать даже при примененном к ячейке Условном форматировании.