- ベストアンサー
数式の内訳
単純な足し算・引き算の数式の、数字部分をバラす事は可能でしょうか。 例: =23+54+555-23+10000-522 ↓ 隣のセルにそれぞれ 23 54 55 23 10000 522 という具合です。 格数値の桁数は変化します。 数値項目も変化します。 + - の記号を判別する所から始まると思うのですがアイデアが浮かびません。
- みんなの回答 (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はそのままにしてください。
その他の回答 (1)
- ham_kamo
- ベストアンサー率55% (659/1197)
A1に「23+54+555-23+10000-522」という"文字列"が入っているのであれば、以下でできると思います。 =SUBSTITUTE(SUBSTITUTE(A1,"+"," "),"-"," ") が、A1に =23+54+555-23+10000-522 という数式が入っているのであれば、ちょっと難しくなります。(数式を取得するユーザ定義関数を作らないといけないかな?)
お礼
ありがとうございます。 しかし、すみません当方の説明不足でした。 セル名を記載するべきでした。 A1に「23+54+555-23+10000-522」の文字列があり、 それを B1 23 B2 54 B3 555 B4 23 B5 10000 B6 522 としたいのですが、可能でしょうか?
お礼
ありがとうございました! VBAの画面を触るのは初めてでしたが 見事再現できました。 勉強にもなり、とてもうれしいです。