2017-02-02 4 views
1

Я столкнулся с несколькими решениями, но мне было интересно, является ли это просто ограничением excel или нет средств для создания нескольких значений, которые будут оцениваться в одной и той же ячейке. C3 создает среднее значение из всех значений в соседней ячейке.Excel: создание наборов или строк данных в одной ячейке

Я объясню, почему я хотел это сделать. Я работаю над специальной таблицей цен на предметы в игре и хочу создать псевдо-базу данных из одной из ячеек столбца. Пример того, что я думал сделать это просто иметь в одной ячейке:

2, 40, 300, 200, 340

Там нет такого понятия, как C2 (имя ячейки) сумма всех записей деленное на общее номер входа? Среднее значение всех значений, разделенных запятыми?

Я знаю, что это легко сделать с помощью нескольких ячеек, но я хотел уменьшить горизонтальный беспорядок, поэтому было интересно, есть ли какой-либо способ разделить значения с синтаксисом, не используя VBA или сверхсложные коды.

+0

Так у вас есть ячейку «C2», которая имеет в ней значения «2, 40, 300, 200, 340», и вы хотите получить среднее значение этих чисел? Если у вас есть те, которые находятся в отдельных ячейках, почему бы просто не использовать '= Concatenate()' с некоторым разделителем или 'TextJoin()', если у вас есть самая новая версия, и сохранить это в своей собственной ячейке. Таким образом, у вас есть диапазон ячеек, с которыми вы можете легко выполнять функции, и конечную «вспомогательную ячейку», которая хранит числа вместе? – BruceWayne

+1

Вы просто пытаетесь использовать Excel так, чтобы Excel не предназначался для использования. Не имеет смысла, учитывая, как формулы работают в Excel, чтобы попытаться сохранить данные в одном столбце, как вы предлагаете, и попытайтесь сделать вычисления от них. Если бы VBA был вариантом, это было бы довольно легко. – Kyle

+1

без использования VBA вы можете сохранить номер с помощью «+» 2 + 40 + 300 и т. Д., А затем ОЦЕНКА ячейки с помощью этого метода http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function then разделите результат на (LEN (A2) -LEN (SUBTITUTE (A2, «+», «»)) + 1) число + знаков плюс 1. @Kyle Не все пытаются использовать Excel так, как это никогда не было для использования;) – Gordon

ответ

5

формула является медведь, но:

=SUMPRODUCT(--MID(SUBSTITUTE(C2,",",REPT(" ",99)),(ROW(INDIRECT("1:" & LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1))-1)*99+1,99))/(LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1) 

enter image description here

Существует много здесь происходит, так что давайте разбить его:

LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1: Получает подсчет элементов, разделенных , , В этом случае 5. Он используется дважды в этой формуле. Второй - знаменатель для получения среднего значения.

Второй используется в (ROW(INDIRECT("1:" & LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1))-1). Вот часть, которая повторяется. SUMPRODUCT Вызывает итерации и суммирует их.

Строка вернет 1,2,3, ... в то, что возвращается функцией LEN (...) - LEN (...). Мы вычитаем один из них, начинающийся с 0.

Каждая итерация умножается на 99, и мы добавляем ее, потому что MID не нравится 0 в качестве начала.

SUBSTITUTE(C2,",",REPT(" ",99)) создает строку, которая содержит 99 пробелов вместо каждого ",".

MID принимает эту строку номера, разделенную на 100 пробелов, и анализирует ее. Второй критерий - итерация от 1 100, 199, 298, ... и т. Д. Число чисел в ячейках. Который всегда будет падать на пространство, так как мы дали ему 100 мест для посадки.

Третий критерий устанавливает длину строки для возврата на каждой итерации. Мы используем 99, потому что снова он всегда будет пробежать после номера.

-- перед MID будет возвращать возвращенную синтаксическую строку к числу. Это заставляет Excel отбрасывать лишние пробелы и видеть только номер.

Именно этот номер SUMPRODUCT() поддерживает и добавляет к общей каждой итерации.

+3

Красивый медведь. –

+0

Абсолютно согласен. –

+0

Ты, сэр, настоящий мастер. Впечатляет, если не сказать больше. – Kyle

0

Вы также можете написать функцию VBA для выпуска:

Пример:

enter image description here

Код для вставки перед функция может быть использована:

Public Function AverageCell(allItems As String) As Variant 

Dim itemArray() As String 
Dim totalsum As Variant 
Dim totalav As Long 

totalsum = 0 
totalav = 0 

itemArray() = Split(allItems, ",") 

    For Each num In itemArray() 
     totalsum = totalsum + num 
     totalav = totalav + 1 
    Next num 

AverageCell = totalsum/totalav 

End Function 
Смежные вопросы