У меня есть ячейка с довольно архаичной строкой. (Это стоимость маны заклинания Magic: the Gathering.) Примерами являются 3g
, 2gg
, 3ur
, и bg
. Существует 5 возможных букв ( g w u b r
). У меня есть 5 столбцов, и я хотел бы посчитать внизу, сколько каждой из них она содержит. Поэтому моя электронная таблица может выглядеть так
A B C D E F G
+--------------------------------------------
1|Name Cost G W U B R
2|Centaur Healer 1gw 1 1 0 0 0
3|Sunspire Griffin 1ww 0 1 0 0 0 // just 1, even though 1ww
4|Rakdos Shred-Freak {br}{br} 0 0 0 1 1
По сути, мне нужно что-то похожее =if(contains($A2,C$1),1,0)
, и я могу перетащить это через все 5 столбцов и вниз по всем 270 каким-то карточкам. (Кстати, это реальные данные. Они не имитированы :-) .)
На Java я бы сделал так:
String[] colors = { "B", "G", "R", "W", "U" };
for(String color : colors) {
System.out.print(cost.toUpperCase().contains(color) ? 1 : 0);
System.out.print("\t");
}
Есть ли что-то подобное в Excel 2010?
Я пробовал использовать find()
и, search()
и они отлично работают, если цвет существует. Но если цвет не существует, он возвращается #value
- так что я получаю 1 1 #value #value #value
вместо 1 1 0 0 0
, например, Centaur Healer (строка 2). Использованная формула была if(find($A2,C$1) > 0, 1, 0)
.
решение1
Что-то вроде этого =IF(ISERROR(FIND("text", A1)), "false", "true")
должно сработать.
Если вам необходимо использовать подстановочные знаки, вы можете попробовать search
вместо find
.
решение2
Я могу ошибаться, но мне кажется, вы ищетенаходить().
FIND( substring, string, [start_position] )
решение3
Это позволит:
=N(NOT(ISERR(SEARCH(C$1,$B2))))