Як я можу порахувати, скільки паливних патронів складається за допомогою Microsoft Excel?


1

TL; DR Чи є щось подібне grepв Excel, що може допомогти мені підрахувати екземпляри, що містять лише цілі слова (наприклад, "wood", але не "woodchuck") (і, можливо, їх варіанти)?

Ось ось цей вірш від матері-гуски:

How much wood could a woodchuck chuck 
If a woodchuck could chuck wood? 
As much wood as a woodchuck could chuck, 
If a woodchuck could chuck wood.

І це початок, але важких цифр досі немає.

Тож я знайшов дуже корисну публікацію на Exceljet.net, яка пропонує використовувати комбінацію «SUBSTITUTE», «LEN» та «SUMPRODUCT».

Якщо ви уявляєте, що вищевказаний текст міститься в клітинках A1: A4, моя перша формула виглядала так:

= SUMPRODUCT ((LEN (A1: A4) -LEN (SUBSTITUTE ((UPPER (A1: A4)), UPPER ("wood"), ""))) / LEN ("wood"))

зауважте: у мою формулу включено "верхнє", тому що вірш, який вона мені надіслав, виглядає приблизно так

hOw MucH WOod cOuld a WOodCHucK CHUCk 
IF a wOoDchUCk couLD cHuck wood? 
aS muCH wOOD as a WOOdCHuCk coUlD ChuCK, 
iF a woODChUck coulD CHuCK WoOD.

Але все одно, результат цього - 8, що неправильно.

Я порахував вручну, там всього 4 лісу, і 4 дроворуби. Я не хочу рахувати дроворубів, просто деревину, яку вони б палили (якщо б справді вони могли б потрошити дрова).

Тож тепер моя поточна формула виглядає приблизно так:

= SUMPRODUCT ((LEN (A1: A4) -LEN (SUBSTITUTE ((UPPER (A1: A4)), UPPER ("wood"), ""))) / LEN ("wood")) - (SUMPRODUCT ((LEN) (A1: A4) -LEN (SUBSTITUTE ((UPPER (A1: A4)), UPPER ("woodchuck"), ""))) / LEN ("woodchuck")))

І це технічно працює! але правда полягає в тому, що я не дуже намагаюся підрахувати кількість зустрічань слова "деревина" у вірші "мати-гусь", мені потрібно порахувати кількість примірників багатьох різних слів, у тому числі тих, які можуть бути перенесені, неправильно написані або мати у них випадкові пробіли чи символи. Мені в основному потрібне щось на зразок грепу всередині Excel. Чи існує така річ? Якщо повернутися до сфери мого оригінального запитання, чи є простіший спосіб написати формулу для підрахунку екземплярів, що містять лише цілі слова, і результат покласти в клітинку?


Це , мабуть, те, що ви шукаєте
cybernetic.nomad

І я завжди думав, що між 2 та 3 є рядок, який гласив "Дровосек би мацав". Мабуть, я не знаю своєї материнки!
Форвард Ед

Відповіді:


0

Важкий і складний з функціями робочого аркуша через складність визначення меж слова, коли потрібно мати справу з пробілами, а також різні розділові знаки.

Двигун регулярних виразів VBA має простий маркер, \bякий буде виявляти межі слова, які визначаються як місце, де зустрічаються wordсимвол і non-wordсимвол, або початок або кінець рядка. Символ слова - це той, який знаходиться у множині[A-Za-z0-9_]

Функція VBA:

Option Explicit
'Set Reference to Microsoft VBScript Regular Expressions 5.5
'   or convert to Late Binding

Function ReCount(str As String, Pattern As String, _
    Optional CaseSensitive As Boolean = True) As Long

Dim objRegExp As RegExp
Dim objMatch As Match
Dim colMatches   As MatchCollection

    ' Create a regular expression object.
   Set objRegExp = New RegExp

   'Set the pattern by using the Pattern property.
   objRegExp.Pattern = Pattern

   ' Set Case Insensitivity.
   objRegExp.ignoreCase = Not CaseSensitive

   'Set global applicability.
   objRegExp.Global = True

   'Test whether the String can be compared.
    If (objRegExp.Test(str) = True) Then

   'Get the matches.
        Set colMatches = objRegExp.Execute(str)   ' Execute search.
        ReCount = colMatches.Count
    Else
        ReCount = 0
    End If
End Function

Використання:

=ReCount(A6,"\bwood\b")

Привіт @Ron, дякую тобі за відповідь! Я встановив посилання для регулярних виразів VBScript 5.5 і вставив всю рядок всередину однієї комірки (A1). Однак відповідь оцінює, щоб знайти лише один екземпляр. Щось мені не вистачає?
SuziLmrdo

@SuziLmrdo Це знаходиться 4тут. Чи певні формули на робочому аркуші вказують на правильне розташування? і чи включений правильний регулярний вираз?
Рон Розенфельд

що означає коментар "перетворення на пізнє прив'язування"? Все інше зроблено - у мене є набір посилань, і я перевіряю його, видаляючи та перевіряючи, чи можу я розміряти їх як RegEx, Match, MatchExpression (так, бібліотека показує їх усі). Я спробував поставити макрос і в модуль, і в робочу книжку, я можу побачити і викликати функцію. І щоб справді переконатися, що я це ідіот, я вкладаю рядок у A6 і буквально копіюю / вставляю вашу формулу. Я не знаю, чому це не працює.
SuziLmrdo

Макрос повинен бути у звичайному модулі. І, якщо ви встановили посилання, ігноруйте коментар із пізнім обов'язком. Чи можете ви завантажити копію (видалену конфіденційну інформацію) робочої книги на якийсь веб-сайт спільного доступу та опублікувати посилання? Я завантажу його і побачу, у чому проблема.
Рон Розенфельд

ось посилання [посилання] app.box.com/s/qu5kjx7ax6sl2p1su2jnp71bvlsj1qhn
SuziLmrdo

2

Це працює для цього примірника, можливо, вам потрібно буде додати інші суб’єкти для інших пунктуацій.

=SUMPRODUCT(--ISNUMBER(SEARCH(" "& "wood" & " "," " & SUBSTITUTE(SUBSTITUTE(A1:A4,".",""),"?","") & " ")))

Це тепер шукає повне слово, оточене пробілами, саме тому нам потрібно видалити розділові знаки. Оскільки ПОШУК не є чутливим до регістру, нам не потрібна ВИПАДКА.

введіть тут опис зображення


Вищенаведене буде рахувати лише 1 на клітинку незалежно від кількості знайдених слів.

Це буде рахувати всіх:

=SUMPRODUCT((LEN(" " & SUBSTITUTE(SUBSTITUTE(UPPER(A1:A4),".", " "),"?"," ") & " ")-LEN(SUBSTITUTE(" " & SUBSTITUTE(SUBSTITUTE(UPPER(A1:A4),"."," "),"?"," ") & " ",UPPER(" wood "),"")))/LEN(" wood "))

введіть тут опис зображення


Здається, це спричиняє проблему, якщо слово розташоване на початку речення.
Appleoddity

@Appleoddity Це не так, але у нього є проблема підрахунку, якщо слово з’являється двічі.
Скотт Кренер

Привіт @ScottCraner, я думаю, що я просто зіткнувся з тією проблемою, про яку ви згадали вище. Якщо вставити весь рядок в одну клітинку, відповідь оцінюється як "1".
SuziLmrdo

@SuziLmrdo див. Редагувати.
Скотт Кренер

@ScottCraner, перша формула не може налічувати більше, ніж 4 випадки. Друга формула працює, але кілька разів не вдавалося підрахувати всі події. Просто перевірте це. ☺
Rajesh S

-1

введіть тут опис зображення

Ця проста формула буде рахувати Вуд у діапазоні даних.

=COUNTIF(E53:E56,"*wood*")

ВІДМОВЛЕНО:

введіть тут опис зображення

Поява деревини можна порахувати і за допомогою стовпчика помічників.

  • У стовпчик помічників напишіть Дерево у всіх можливих форматах.
  • Напишіть цю формулу і заповніть.
  • Нарешті підсумуйте графа.

=SUMPRODUCT(LEN($E$74:$E$77)-LEN(SUBSTITUTE($E$74:$E$77,F74,"")))/LEN(F74)

  • За необхідності відрегулюйте посилання на комірки у формулі.

Ваша формула не робить те, що ви думаєте, що робить, хоча ви отримаєте очікуваний результат за допомогою цього набору даних. Спробуйте помістити два або більше екземплярів woodу будь-який з рядків, і ви побачите, що загальна сума не зміниться.
Рон Розенфельд

@Rajesh, дуже дякую за вашу відповідь. Прикро, що в моєму первісному запитанні є кожен рядок всередині окремої комірки із загальною кількістю чотирьох рядків, тому що я думаю, що формула вище підраховує кількість клітинок із виникненням слова, а не окремих примірників слова, незалежно від кількості осередків. вони поширюються поперек. Наприклад, коли я спробував вставити весь рядок всередину комірки E2, наприклад, значення всередині F2 змінилося на 1.
SuziLmrdo

@RonRosenfeld, дякую за те, що я поставив кращий момент, те саме питання, що у мене з формулою # Скотта. Другий з них працює іноді, але також отримує збій у більшості випадків, і його перша формула саме так поводиться як моя. Дозвольте мені знайти виправлення. ☺
Rajesh S

@RajeshS, Ваша відповідь та редагування пропустіть суть питання. Проблема не в тому, щоб знайти «деревину», вона не рахує її, коли вона є частиною «woodchuck».
fixer1234

@ fixer1234, я вибрав це з ОП ,, "допоможіть мені рахувати екземпляри, що містять лише цілі слова (наприклад," wood ", але не" woodchuck ")", і я думаю, що інші також працювали над цим лише,, оскільки існує формула також підраховуючи WOOD, PLZ припускає, чи повинна бути застосована будь-яка інша ідея щодо цього. ☺
Раджеш S
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.