2017-06-29 86 views
0

我一直在搜索幾個小時,但無法找到針對此問題的任何解決方案。包含換行符的一個單元格中的總數 - Excel

See the image

正如你可以在圖像上看到我有3列和2行。我的目標是總結成本行(它有換行符)或將設備和成本列分成3個較小的行。這可能嗎?

+1

IMO應合併部門參與行,並保持設備和成本在不同的行使用;那麼這變得微不足道。 https://superuser.com/questions/1022533/is-it-possible-to-sum-numbers-separated-with-newlines-using-a-formula – xQbert

回答

1

不幸的是沒有一個特別乾淨的方法來實現這一點(據我所知)。這裏有幾件事情,你可以嘗試,但:

方法1 - 工作表解決方案

如果你的第一成本細胞是在A1然後將在B1單元格光標,使用創建一個新的指定範圍以下公式:

=EVALUATE(SUBSTITUTE(A1,CHAR(10),"+")) 

然後,您可以鍵入命名範圍的名稱到單元格B1中,您將得到預期的總和。不幸的是,您必須爲此創建一個命名範圍,因爲EVALUATE不可用作工作表函數 - 只有命名範圍函數並且也可在VBA中使用。

我打電話給我的命名範圍「eval」。你可以拖動這個公式,它會填滿,總是評估它的左邊。

enter image description here


方法2 - VBA解決方案

你可以使用一些簡單的VBA。粘貼到一個新的模塊,然後用這個公式是這樣的工作表上:

=SumAlt(A1) 

會在你的榜樣返回600,如果A1包含在VBA您100 200 300

Function SumAlt(s As String) As Long 
    SumAlt = Evaluate(Replace(s, Chr(10), "+")) 
End Function 
+0

當我嘗試做第一種方法是給我警報:那功能無效。第二種方法不起作用,也許是因爲我在Mac? –

+0

@StefanMarkovic,兩者都應該在Mac上正常工作。我在第一個公式中刪除了對「Sheet1」的引用,因爲這可能不是工作表的名稱 - 現在可能再試一次 – CallumDA

1

像這樣的事情會工作:

Function SumLines(ByVal str As String) As Long 

    Dim arr() As String 

    arr = Split(str, Chr(10)) 

    For a = 0 To UBound(arr) 
     SumLines = SumLines + CLng(arr(a)) 
    Next 

End Function 

但是,只有當您沒有除數字和Chr(10)(新行)之外的任何字符時才能使用。

然後,您在您的工作表,例如:

=SumLines(A1) 
+0

這看起來很熟悉! ;)我不會返回一個整數,因爲它會在〜35k溢出 – CallumDA

+0

你是對的!我不知道Excel中的整數是如此之小!謝謝。 –

相關問題