• ベストアンサー

数式の内訳

単純な足し算・引き算の数式の、数字部分をバラす事は可能でしょうか。 例: =23+54+555-23+10000-522 ↓ 隣のセルにそれぞれ 23 54 55 23 10000 522 という具合です。 格数値の桁数は変化します。 数値項目も変化します。 + - の記号を判別する所から始まると思うのですがアイデアが浮かびません。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

それぞれをセルに振り分けるのですね。 関数では難しそうだったので、ユーザ定義関数を作ってみました。 Alt+F11でVBAの画面を開き、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 Function PickNumber(S1 As String, N1 As Integer) As Variant  Dim i As Integer, N2 As Integer, S2 As String  Dim c As String    N2 = 1  For i = 1 To Len(S1)   c = Mid(S1, i, 1)   If c = "+" Or c = "-" Then    N2 = N2 + 1   ElseIf N1 = N2 Then    S2 = S2 & c   End If  Next  PickNumber = S2 End Function Function GetNumOfNum(S As String) As Integer  Dim i As Integer, N As Integer  N = 1  For i = 1 To Len(S)   If Mid(S, i, 1) = "+" Or Mid(S, i, 1) = "-" Then    N = N + 1   End If  Next  GetNumOfNum = N End Function VBAの画面を閉じ、A1に式が入っているとして、B1に以下のように入力します。 =IF(ROW(A1)>GetNumOfNum($A$1),"",PickNumBer($A$1,ROW(A1))) これで23が表示されます。 あとはこのセルをマウスで下にコピーしてください。 なお、実際に数式が入っているセルがA1ではない場合は、上の式の$A$1の部分はそのセル名に変更して、ROW(A1)の部分のA1はそのままにしてください。

39ken2004
質問者

お礼

ありがとうございました! VBAの画面を触るのは初めてでしたが 見事再現できました。 勉強にもなり、とてもうれしいです。

その他の回答 (1)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

A1に「23+54+555-23+10000-522」という"文字列"が入っているのであれば、以下でできると思います。 =SUBSTITUTE(SUBSTITUTE(A1,"+"," "),"-"," ") が、A1に =23+54+555-23+10000-522 という数式が入っているのであれば、ちょっと難しくなります。(数式を取得するユーザ定義関数を作らないといけないかな?)

39ken2004
質問者

お礼

ありがとうございます。 しかし、すみません当方の説明不足でした。 セル名を記載するべきでした。 A1に「23+54+555-23+10000-522」の文字列があり、 それを B1 23 B2 54 B3 555 B4 23 B5 10000 B6 522 としたいのですが、可能でしょうか?