Я пытаюсь выполнить Условное форматирование, чтобы цвет ячейки менялся, если значение отличается от значения в ячейке слева от него (каждый столбец-месяц, в каждой строке-расходы на определенный объект. Я хочу легко отслеживать изменения цен в течение нескольких месяцев.)
Я могу сделать это за ячейку и формат-перетащите его, но я хотел бы, чтобы общая формула применялась ко всему листу.
спасибо!
11 ответов
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
самая короткая наиболее совместимая версия:
=INDIRECT("RC[-1]",0)
«RC[-1]» означает один столбец слева. «R[1]C[-1]» находится внизу слева.
второй параметр 0 означает, что первый параметр интерпретируется с использованием нотации R1C1.
другие варианты:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
слишком долго на мой взгляд. Но полезно, если относительное значение является динамическим / производным от другой ячейки. например:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0, A1)
самый простой вариант:
= RC[-1]
имеет недостаток, что вам нужно включить нотацию R1C1 с помощью опций, которая не работает, когда другие люди должны использовать excel.
при создании условного форматирования установите диапазон, к которому он применяется к тому, что вы хотите (весь лист), затем введите относительные формула (удалить $
знаки), как если бы вы только форматировали верхний левый угол.
Excel будет правильно применять форматирование к остальным ячейкам соответственно.
в этом примере, начиная с B1,левый ячейки А1. Просто используйте это—нет расширенной формулы требуемый.
если вы ищете что-то более продвинутое, вы можете поиграть с column()
, row()
и indirect(...)
.
Если вы измените ссылку на ячейку, чтобы использовать нотацию R1C1 (Инструменты|Параметры, вкладка «Общие»), вы можете использовать простую нотацию и вставить ее в любую ячейку.
теперь ваша формула просто:
=RC[-1]
заполните ячейку A1, по следующей формуле :
=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"
затем autoextend вправо, вы получаете
1| A | B | C | ect ect
2| 1| 11| 111| ect ect
если смещение находится вне диапазона доступной ячейки, вы получаете #REF! ошибка.
Надеюсь, вам понравится.
вместо того чтобы писать очень долго:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
вы можете просто написать:
=OFFSET(*Name of your Cell*,0,-1)
Так, например, вы можете записать в ячейку B2:
=OFFSET(B2,0,-1)
ссылка на ячейку B1
еще спасибо Джейсон Янг!! Я бы никогда не придумал это решение без вашего ответа!
при создании Пользовательская Функция, я узнал, что другие ответы, связанные с функциями OFFSET
и INDIRECT
не могут быть применены.
вместо этого вы должны использовать Application.Caller
для ссылки на ячейку была использована пользовательская функция (UDF). На втором шаге индекс столбца преобразуется в имя соответствующего столбца.
Наконец, вы можете ссылаться на левую ячейку, используя
вы можете использовать скрипт VBA, который изменяет Условное форматирование выделения (возможно, вам придется соответствующим образом настроить условие и форматирование):
For Each i In Selection
i.FormatConditions.Delete
i.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=" & i.Offset(0, -1).Address
With i.FormatConditions(1).Font
.Bold = True
End With
Next i
еще проще:
=indirect(address(row(), column() - 1))
OFFSET возвращает ссылку относительно текущей ссылки, поэтому, если indirect возвращает правильную ссылку, она вам не нужна.
я наткнулся на эту тему, потому что я хотел всегда ссылаться на «ячейку слева», но принципиально энергонезависимым образом (без смещения, косвенных и подобных катастроф). Смотрю на паутину сверху донизу, ответов нет. (Этот поток на самом деле не дает ответа.) После некоторых возиться я наткнулся на самый удивительный метод, который я хотел бы поделиться с этим сообществом:
предположим, что начальное значение 100 в E6. Предположим, я ввожу дельту к этому значению в F5, скажем 5. Затем мы вычисляем значение продолжения (105) в F6 = E6+F5. Если вы хотите добавить еще один шаг, легко: просто скопируйте столбец F в столбец G и введите новую дельту в G5.
Это то, что мы делаем, периодически. Каждый столбец имеет дату, и эти даты должны быть в хронологическом порядке (чтобы помочь с совпадением и т. д.). Время от времени случается так, что мы забываем сделать шаг. Теперь предположим, что вы хотите вставить столбец между F и G (чтобы наверстать упущенное) и скопировать F в новый G (для повторного заполнения формулы продолжения). Это не что иное, как полная катастрофа. Попробуйте-H6 теперь скажет =F6+H5, а не (как нам это абсолютно необходимо) =G6+H5. (Новый G6 будет правильным.)
чтобы сделать эту работу, мы можем запутать этот банальный расчет самым удивительным образом F6=index ($E6:F6;1;columns ($E1:F1)-1)+F5. Скопируйте справа, и вы получите G6=index ($E6:G6;1;columns ($E1:G1)-1)+G5.
Это не должно работать, верно? Круговая ссылка, ясно! Попробовать его и быть поражены. Excel, похоже, понимает, что, хотя диапазон индексов охватывает ячейку, которую мы пересчитываем, сама ячейка не адресуется индексом и, следовательно, не создает круговую ссылку.
Итак, теперь я дома и сухой. Вставьте столбец между F и G, и мы получим именно то, что нам нужно: значение продолжения в старом H будет ссылаться на значение продолжения, которое мы вставили в новый G.
почему бы просто не использовать:
=ADDRESS(ROW(),COLUMN()-1)
I stumbled upon this thread because I wanted to always reference the «cell to the left» but CRUCIALLY in a non-volatile way (no OFFSET, INDIRECT and similar disasters). Looking the web up and down, no answers. (This thread does not actually provide an answer either.) After some tinkering about I stumbled upon the most astonishing method, which I like to share with this community:
Suppose a starting value of 100 in E6. Suppose I enter a delta to this value in F5, say 5. We would then calculate the continuation value (105) in F6 = E6+F5. If you want to add another step, easy: just copy column F to column G and enter a new delta in G5.
This is what we do, periodically. Each column has a date and these dates MUST BE in chronological order (to help with MATCH etc). Every so often it happens that we forget to enter a step. Now suppose you want to insert a column between F and G (to catch up with your omission) and copy F into the new G (to repopulate the continuation formula). This is NOTHING SHORT of a total disaster. Try it — H6 will now say =F6+H5 and NOT (as we absolutely need it to) =G6+H5. (The new G6 will be correct.)
To make this work, we can obfuscate this banal calculation in the most astonishing manner F6=index($E6:F6;1;columns($E1:F1)-1)+F5. Copy right and you get G6=index($E6:G6;1;columns($E1:G1)-1)+G5.
This should never work, right? Circular reference, clearly! Try it out and be amazed. Excel seems to realize that although the INDEX range spans the cell we are recalculating, that cell itself is not addressed by the INDEX and thus DOES NOT create a circular reference.
So now I am home and dry. Insert a column between F and G and we get exactly what we need: The continuation value in the old H will refer back to the continuation value we inserted in the new G.
Найти значение ячейки слева от искомого слова. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
- Что делает ЛЕВСИМВ?
- Синтаксис
- Форматирование
- Примеры
- Пример 1 – извлечь первое слово
- Пример 2 – извлечь кроме последнего символа
- Пример 3 – извлечь текст до первой цифры (формула массива)
Раздел функций | Текстовые |
Название на английском | LEFT |
Волатильность | Не волатильная |
Похожие функции | ПРАВСИМВ, ПСТР |
Что делает ЛЕВСИМВ?
Возвращает первые N символов текста слева.
Синтаксис
=ЛЕВСИМВ(Текст;[Количество Символов])
Второй аргумент, число символов для извлечения, опционален и по умолчанию (если его не указывать) равен 1, т.е. результатом формулы будет первый символ.
Если второй аргумент равен или превышает длину строки, возвращается весь исходный текст ячейки.
Если он равен нулю – возвращается пустая строка.
Если указывается отрицательное число, возвращается ошибка #ЗНАЧ.
Форматирование
Необходимо учитывать, что, если первым аргументом указать ячейку с датой или датой-временем, или формулу, возвращающую их, функция ЛЕВСИМВ преобразует их в натуральное число и только после этого в строковое значение.
Поэтому для корректного текстового извлечения части символов из дат в числовом формате может понадобиться функция ТЕКСТ (см. пример на картинке выше).
Примеры
Рассмотрим примеры использования функции ЛЕВСИМВ на практике.
Пример 1 – извлечь первое слово
В этом простейшем примере извлекаем первое слово в ячейке с помощью комбинации функций ЛЕВСИМВ и НАЙТИ.
Таблица выше была использована для извлечения имени из строки с именем и фамилией. Функция НАЙТИ используется для определения положения пробела между именем и фамилией. Следовательно, длина имени – это позиция пробела минус один символ.
Функция ЛЕВСИМВ извлекает имя на основе его длины.
А как извлечь фамилию (второе слово)? Ответ на этот вопрос смотрите в описании функции ПРАВСИМВ.
Пример 2 – извлечь кроме последнего символа
В комбинации ЛЕВСИМВ с функцией ДЛСТР извлекаем из строк переменной длины все, кроме последнего знака.
Пример 3 – извлечь текст до первой цифры (формула массива)
В каталоге освещения название коллекции всегда представлено текстовым обозначением. Артикул конкретного товара при этом всегда начинается с цифр. Задача – извлечь из названия конкретного товара его коллекцию без артикула.
Получается, задача состоит в том, чтобы извлечь символы до любой первой цифры. Сделаем это с помощью комбинации ЛЕВСИМВ с функциями МИН и ПОИСК.
Формула заимствует механику из первого примера, но является формулой массива и выглядит следующим образом:
Так будет выглядеть формула для ячейки A1.
=ЛЕВСИМВ(A1,МИН(ЕСЛИОШИБКА(ПОИСК({0:9:8:7:6:5:4:3:2:1},A1),1000))-2)
При этом вводится сочетанием Ctrl + Shift + Enter как любая формула массива.
Как работает формула:
- Функция ПОИСК ищет одновременно 10 цифр, перечисленных в массиве, и возвращает массив позиций
- Поскольку часть цифр при поиске возвращают ошибку, используется функция ЕСЛИОШИБКА, чтобы для таких значений вернуть заведомо наибольшее число (в данном случае 1000)
- Функция МИН возвращает наименьшее из чисел – это и будет позиция первой цифры в строке
- Поскольку перед цифрами также всегда присутствует пробел, вычитается 2 символа, а не 1. Можно перестраховаться на случай отсутствия пробелов – оставить 1 и убрать пробелы функцией СЖПРОБЕЛЫ.
- Функция ЛЕВСИМВ возвращает текст до вычисленной таким образом позиции последнего знака, идущего перед первой цифрой и пробелом перед ней.
Понравилась статья? Поддержите ее автора!
Набор инструментов !SEMTools поможет решить множество задач без ввода сложных формул и сэкономит ваше время. И вам полезно, и автору приятно!
Excel is mostly about numerical, however, we often have data of text data type. Here are a few functions we should know to handle text data.
- LEFT
- RIGHT
- MID
- LEN
- FIND
The LEFT function
The LEFT function returns a given text from the left of our text string based on the number of characters specified.
Syntax:
LEFT(text, [num_chars])
Parameters:
- Text: The text we want to extract from.
- Num_chars (Optional): The number of characters you want to extract. Default num_chars is 1 and the number must be a positive number that is greater than zero.
Example:
Step 1: Format your data.
Now if you want to get the first “Geeks” from “Geeksforgeeks” in B2. Let us follow the next step.
Step 2: We will enter =LEFT(B2,5) in the B3 cell. Here we want Excel to extract the first 5 characters from the left side of our text in B2.
This will return “Geeks”.
The RIGHT Function
The RIGHT function returns a given text from the left of our text string based on the number of characters specified.
Syntax:
RIGHT(text, [num_chars])
Parameters:
- Text: The text we want to extract from.
- Num_chars (Optional): The number of characters you want to extract. Default num_chars is 1 and the number must be a positive number that is greater than zero.
Example:
Step 1: Format your data.
Now if you want to get the last geeks from “Geeksforgeeks” in B2. Let us follow the next step.
Step 2: We will enter =RIGHT(B2,5) in the B3 cell. Here we want Excel to extract the last 5 characters from the right side of our text in B2.
This will return “geeks”.
The MID function
The MID function returns the text from any middle part of our text string based on the starting position and number of characters specified.
Syntax:
MID(text, start_num, num_chars)
Parameters:
- Text: The text we want to extract from.
- start_num: The starting number of the first character from the text we want to extract.
- Num_chars: The number of characters you want to extract.
Example:
Step 1: Format your data.
Now if you want to get the character “for” which is located in the middle of our text “Geeksforgeeks” in B2. Let us follow the next step.
Step 2: We will enter =MID(B2,5,3) in the B3 cell. Here we want Excel to extract the characters located in the middle of our text in B2.
This will return “for”.
The Len Function
The LEN function returns the number of characters in the text strings.
Syntax:
LEN(text)
Parameters:
- Text: The text we want to know the length
Example:
Step 1: Format your data.
Now if you want to know how many characters are in the text “Geeksforgeeks”. Let us follow the next step.
Step 2: We will enter =LEN(B2) in the B3 cell. Excel will count how many characters are in the text.
This will return 13.
The FIND Function
The FIND function returns the position of a given text within a text.
Syntax:
FIND(find_text, within_text, [start_num])
Parameters:
- Find_text: The text we want to find.
- Within_text: The text containing our find_text.
- Start_num (Optional): The starting position of our find_text. Default is 1.
Example:
Step 1: Format your data.
Now if you want to find “for” in geeksforgeeks in B2. Let us follow the next step.
Step 2: We will enter =FIND(“for”,B2) in B3 cell. Here we want Excel to find “for” in our text in B2.
This will return 6 because “for” is located at character number 6 in our text.