1

У меня есть книга Excel, в которой каждая ячейка в столбце B содержит небольшую басню (историю).  Эти ячейки (отформатированные как "Общие") содержат текстовые значения, большие по стандартам электронных таблиц: все, кроме одной, превышают ограничение в 255 символов для отображения текста, одна ячейка содержит более 3000 символов, и я полагаю, что большинство из них составляют от 500 до 700 знаков  Вторая иллюстрация ниже показывает такую ячейку.

В другой книге у меня есть (мета) данные о баснях.  В частности, меня интересует частота встречаемости некоторых слов.  На иллюстрации, приведенной ниже, столбец C содержит список слов, которые меня интересуют.  Столбец B содержит общее количество вхождений соответствующего слова (считая несколько вхождений в басне); это не имеет отношения к этому вопросу.  Я также хочу посчитать количество басен, в которых появляется каждое слово (хотя бы один раз).  Я называю это "Дисперсия" (см. Пояснение в комментарии ниже).  Я использовал Ctrl+F ("Найти и заменить") и щелкнул "Найти все", что сообщает о количестве ячеек, содержащих строку поиска (см. Вторую иллюстрацию ниже).  Я делал это по одному для каждого слова и вручную вводил числа в столбец N.


(Вы можете пропустить этот параграф.)  Мне нужны подсчеты для единичных, целых экземпляров слова, а не для производных форм корневых слов (даже не во множественном числе). Например, мой счет для "животного" должен возвращать счет только для "животного", а не "животного" или любого другого такого варианта.  Вначале я понял, что простой поиск слова может привести к ложному счету, потому что он будет включать слова, содержащие слово, которое я искал.  Я справился с этим, дополнив свои поисковые термины пробелами в начале и конце - в столбце E (например, "animal"), который содержит =" "&C2&" " - и убедившись, что столбец, по которому я проверяю эти слова, также Выделены такие слова.  Везде, где знак препинания падал рядом с последней или первой буквой слова в басне, я вставлял пробел, чтобы исключить любую такую смежность.  Например, «todo esto, porque siendo» стало «todo esto, porque siendo».  (Это было частично вдохновлено комментарием JNevill по этому вопросу:Excel COUNTIF не работает.)  Мои Ctrl+F поиски затем вернули меня, подсчитывает единичные случаи слов, которые я искал.


Конечно, это утомительно, отнимает много времени и подвержено ошибкам, поэтому мне стало интересно, не сможет ли какая-нибудь формула сделать то же самое, но быстрее.  Несколько постов / веб-страниц предположили, что функция COUNTIF могла бы сделать это, поэтому я экспериментировал с этим, но до сих пор мои попытки каждый раз терпели неудачу.  На приведенной выше иллюстрации столбец М содержит

=COUNTIF('[OTHER WORKBOOK.xlsx]SHEET'!$B:$B,E2)

и, как вы можете видеть, он отображает "0", когда он должен совпадать с числом в столбце N (т. е. счет, найденный с помощью Ctrl+F).  (Как указано выше, в столбце E содержится искомая строка, то есть искомое слово , дополненное пробелами в начале и конце.)  Каждая конфигурация с использованием функции COUNTIF я пробовал, не удалась.

Ниже изображение ячейки B23 на моем листе басни (то есть одна басня).  Представлению частично препятствует диалоговое окно "Найти и заменить", показывающее, что 13 ячеек (басни) содержат слово "животное" (т. Е. Они содержат строку "животное" с начальными и конечными пробелами) хотя бы один раз.

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

Последнее, что я собираюсь показать вам, это то, что происходит, когда я использую функцию COUNTIF . Я думаю, что это может быть ключом к тому, почему я не могу заставить это работать, потому что, как только я добавляю диапазон из нужного столбца, прежде чем я даже нажму Enter, я вижу #VALUE!; #ЗНАЧЕНИЕ!; ... рядом с ассортиментом. Это выглядит так:

Когда я нажимаю Enter, я получаю "0", который вы видите для ячеек в этом столбце.

Что я делаю неправильно?  Как подсчитать количество басен, в которых появляется каждое слово (хотя бы один раз)?

Если вы не можете сказать по скриншотам, я использую Excel 2007.

4 ответа4

2

@ fixer1234 верно - COUNTIF считает ячейки, которые равны значению, а не ячейки, содержащие строку.  Для этого вам нужно использовать FIND или SEARCH . (Они идентичны, за исключением того, что FIND чувствителен к регистру, а SEARCH нечувствителен к регистру.  Я просто предположу, что вы хотите, чтобы регистр не учитывался.)

Начните делать

=SEARCH(E2, '[OTHER WORKBOOK.xlsx]SHEET'!B1)

Это будет искать значение E2 (в вашем примере, «животное») в ячейке B1 другого листа.  Если это строковое значение присутствует в этой ячейке, будет возвращено местоположение первого вхождения строки поиска в тексте ячейки (с первым символом, равным 1).  Если строка отсутствует, она вернет # #VALUE! ,

Далее делай

=IF(ISERROR(SEARCH(E$2, '[OTHER WORKBOOK.xlsx]SHEET'!B1)), 0, 1)

Это будет иметь значение 1, если строка присутствует, и 0, если ее нет.  Следующий шаг:

=SUM(IF(ISERROR(SEARCH(E2, '[OTHER WORKBOOK.xlsx]SHEET'!$B:$B)), 0, 1))

Это суммирует предыдущую формулу в столбце B другой таблицы, давая вам желаемое количество.  Обратите внимание, что выше это формула массива.  Это означает, что, чтобы заставить его работать, вы должны нажать Ctrl+Shift+Enter после ввода формулы.  Теперь вы можете поместить это в ячейку M2 и перетащить вниз.

Вам действительно не нужно иметь столбец E - вы можете справиться с ним в вашей формуле SEARCH :

=SUM(IF(ISERROR(SEARCH(" "&C2&" ", '[OTHER WORKBOOK.xlsx]SHEET'!$B:$B)), 0, 1))

Я проверил это в Excel 2013, но я делал подобные вещи раньше, и я ожидаю, что это решение будет работать в Excel 2007.  (И я проверил с ячейками длиной более 750 символов и именем файла рабочей книги, содержащим пробел.)

PS Я не знаю, почему вы получили эти # #VALUE! ошибки в диалоге «Аргументы функций»; у меня это сработало

Диалог «Аргументы функций»

(Я проверил это, хотя мой ответ не использует COUNTIF .)  У вас есть другая открытая книга, пока вы это делаете?

0

У меня возникли некоторые проблемы с просмотром ваших скриншотов, но, поскольку вы пытаетесь подсчитать выходные данные других функций, я бы попытался использовать функцию value() в вашем выражении countif. Value() скажет Excel смотреть на выходные данные (то, что вы видите в ячейках), а не на основную функцию, которую вы в них записали.

Ваша инструкция по показаниям будет выглядеть примерно так: "= счетчик (значение (диапазон [другой лист]), критерии)"

0

Если длинная строка находится в B2, а искомое слово находится в C2, то следующая формула подсчитывает, сколько раз слово находится в строке

  • =+ ЕСЛИОШИБКА ((LEN (В2)-LEN (ПОДСТАВИТЬ (В2, С2 "")))/LEN (С2), "")

Части

  1. Iferror (необязательно) делает пустым, если есть ошибка
  2. Len (b2) длина исходной ячейки
  3. LEN (ЗАМЕНА (B2, C2, "") удаляет все вхождения шаблона. Это будет короче, если это в данных
  4. Длина шаблона Len (c2), если длина 6 символов и 3 случая, то 18/6 приведет к 3
0

Вы можете использовать COUNTIF(), чтобы подсчитать, содержит ли одна строка другую, воспользовавшись использованием подстановочных знаков, как это предусмотрено Microsoft. Звездочка (*) соответствует нулю или более символов, а знак вопроса (?) соответствует одному символу.

Итак, вместо =COUNTIF('[OTHER WORKBOOK.xlsx]SHEET'!$B:$B,E2) use =COUNTIF('[OTHER WORKBOOK.xlsx]SHEET'!$B:$B,"*"&E2&"*") .

Звездочки допускают любой другой текст до и после вашей строки. Так как ваша строка уже имеет начальные и конечные пробелы, не должно быть проблем с множественным числом и другими формами слов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .