2017-02-02 13 views
1

我遇到了一些解決方案,但我想知道這是否僅僅是excel的限制,或者是否沒有辦法創建多個值以便從同一個單元格進行評估。 C3根據相鄰單元中的所有值創建平均值。Excel:在單個單元格內創建數據集或數據串

我會解釋爲什麼我想這樣做。我正在研究遊戲中物品價格的speadsheet,並希望從列的一個單元格中創建一個僞數據庫。什麼,我想這樣做的例子只是簡單地在一個小區:

2,40,300,200,340

有沒有這樣的事情C2(小區名稱)和所有項目的總分爲條目數量?所有值的平均值用逗號分隔?我知道這很容易做到與多個單元格,但我想減少水平混亂,所以想知道是否有任何方法來分離與語法的值,而不使用VBA或過度複雜的代碼。

+0

所以,你必須:

enter image description here

代碼的功能,可用於前粘貼單元格'C2'的值爲'2,40,300,200,340',並且您想獲得這些數字的平均值?如果你有不同的單元格,那麼爲什麼不使用具有一些分隔符的'= Concatenate()',或者如果你有最新版本''TextJoin()',並將它存儲在它自己的單元格中。因此,您可以輕鬆完成功能的單元格範圍,以及將所有數字一起存儲的最終「輔助單元」? – BruceWayne

+1

您只是試圖以某種方式使用Excel,Excel並不是用來使用Excel的。考慮到Excel中的公式如何工作,嘗試將數據存儲在一個列中,比如您建議並試圖從中計算數據,這是毫無意義的。如果VBA是一個選項,這將是非常簡單的。 – Kyle

+1

而不使用VBA,您可以使用「+」2 + 40 + 300等來存儲編號,然後使用此方法評估單元格http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function然後將結果除以(LEN(A2)-LEN(SUBSTITUTE(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(...)函數返回的內容。我們從1開始減1。

每次迭代乘以99,我們加1,因爲MID不喜歡0作爲開始。

SUBSTITUTE(C2,",",REPT(" ",99))創建一個字符串,其中包含99個空格代替每個「,」。

MID將這個由現在100個空格分隔的數字串解析出來。第二個標準是從1,100,199,298,...等迭代單元時間中的數字數量。這將永遠落在一個空間上,因爲我們給了它100個空間來降落。

第三個標準設置每次迭代返回字符串的長度。我們使用99,因爲它會在數字之後再次出現空格。

MID前面的--將導致返回的分析字符串恢復爲數字。這迫使Excel刪除多餘的空格並僅查看數字。

SUMPRODUCT()維護這個數字並將其添加到每個迭代的總數中。

+3

一隻美麗的熊。 –

+0

絕對同意。 –

+0

先生,你是一位真正的主人。至少可以說是令人印象深刻。 – Kyle

0

你也可以寫一個VBA函數爲您的問題:

例子:

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 
相關問題