У меня есть клетка с довольно архаичной строкой. (Это стоимость маны 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)
.
источник
search
вместоfind
. Все еще не уверены, в чем разница, но это работает для моих целей.=IFERROR(FIND("text", A1), "error")
SEARCH
не чувствительна к регистру, аFIND
есть.Я могу ошибаться, но я верю, что вы ищете find () .
источник
find
но если он не существует, у меня нет значения для сравнения. Вместо этого0 1 0 0 0
я получаю#VALUE 1 #VALUE #VALUE #VALUE
IFERROR
. Иногда #VALUE также может означать, что столбец недостаточно широк, чтобы отобразить его ...=IFERROR(IF(SEARCH(K$1,$E2)>0,1,0),0)
и это сработало отлично. (K$1,$E2
есть эквивалент$A2,C$1
в моем примере.Это будет делать:
=N(NOT(ISERR(SEARCH(C$1,$B2))))
источник