No.2ベストアンサー
- 回答日時:
私も作ってみました。
スイッチで、0 は、#1さんと同じスタイルで、スイッチ 1 で、値のプラスマイナスで別けます。一般の関数では、無理だと思います。
このマクロは、任意の場所(ActiveCell)の数式の下に2行を使って表示します。
'//
Sub DevideFormula1()
Dim RegEx As Object
Dim Ms, m
Dim fml As String
Dim a, b
Dim plus As String
Dim minus As String
'スイッチ
Const SW As Long = 0 '0-文字で分ける,1-値で分ける
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.Global = True: .IgnoreCase = False: .MultiLine = True
.Pattern = "([\*\/\-\+]?\w+\d+?)"
'or directly: result_text =.Replace(enter_text, "$1")
End With
If ActiveCell.HasFormula = False Then
MsgBox "数式がありません", vbExclamation
Exit Sub
End If
fml = ActiveCell.Formula
fml = Replace(fml, "=", "")
Set Ms = RegEx.Execute(fml)
For Each m In Ms
a = m.SubMatches(0)
b = Evaluate(a)
If SW = 1 Then
'値で分ける
If b >= 0 Then
plus = plus & a
ElseIf b < 0 Then
minus = minus & a
End If
Else
'文字で分ける
If Left(a, 1) = "-" Then
minus = minus & a
ElseIf Left(a, 1) = "+" Or Left(a, 1) Like "[A-Z]" Then
plus = plus & a
End If
End If
Next
If Len(plus) > 1 Then
ActiveCell.Offset(1).Formula = "=" & plus
End If
If Len(minus) > 1 Then
ActiveCell.Offset(2).Formula = "=" & minus
End If
End Sub
No.1
- 回答日時:
もうちょっと具体的に、
A1に5
B1に-3
C1に7
D1に6
E1に=A1-B1+C1-D1
で計算結果が9
って入ってたとして、
F1に=A1+C1
G1に=B1+D1
って式が入って、計算結果が12、3になって欲しいって事で良いの?
ワークシート関数で処理するのは面倒そうです。
VBAを使うなら、
・「+」を「@+」、「-」を「@-」にReplaceして、=A1@-B1@+C1@-D1
・「@」でSplitして「A1」「-B1」「+C1」「-D1」に分割
・1文字目が「-」かどうかで場合分けして2つの式に振り分け
とか。
--
上の条件でなら、
Sub test()
Call div_formula(Range("E1"), Range("F1"), Range("G1"))
End Sub
Sub div_formula(src As Range, d_plus As Range, d_minus As Range)
Dim src_f As String, dst_plus As String, dst_minus As String
Dim mem As Variant
Dim iCount As Long
src_f = src.Formula
If Left(src_f, 1) <> "=" Then Exit Sub ' 式が「=」ではじまらない
' 先頭の「=」は削除
src_f = Right(src_f, Len(src_f) - 1)
' 「+」を「@+」に置換
src_f = Replace(src_f, "+", "@+")
' 「-」を「@-」に置換
src_f = Replace(src_f, "-", "@-")
' 「@」で式を分割
mem = Split(src_f, "@")
dst_plus = "="
dst_minus = "="
' 各項ループ
For iCount = LBound(mem) To UBound(mem)
If Left(mem(iCount), 1) <> "-" Then ' 項の先頭文字が「-」でなければ
dst_plus = dst_plus & mem(iCount)
Else
dst_minus = dst_minus & "+" & Right(mem(iCount), Len(mem(iCount)) - 1)
End If
Next iCount
d_plus.Formula = dst_plus
d_minus.Formula = dst_minus
End Sub
で一応可能です。
2つ目の式は「=+B1+D1」ってなるし、式に「~+(B1-C1)+~」とかあったら、処理できないですが。
この回答へのお礼
お礼日時:2017/08/19 18:06
> って式が入って、計算結果が12、3になって欲しいって事で良いの?
はい! そうです。やはり関数だと難しいんですね。VBAマクロ試してみます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 特定の文字は全体の何%か 3 2023/01/27 09:23
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) Excel 特定セルの数値を参照したセルの0表示が空白にならないのはどうしてか? 3 2022/04/28 22:23
- Excel(エクセル) Excelの関数で、性別が男なら『0』を表示し、女ならセルを参照して、その特定のセルの数字を表示させ 1 2022/06/21 01:00
- Excel(エクセル) 特定の条件で計算式を組みたいのですが、教えて頂けますでしょうか? 6 2022/10/28 19:02
- Excel(エクセル) 文字列を数式として変換する事はできますか? 6 2022/06/23 10:38
- Excel(エクセル) 独自の条件を用いた計算式、もしくは別の方法で打ち出す事は可能でしょうか? 6 2022/05/18 10:38
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) COUNTIFSについて 2 2022/08/30 14:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
1日前の検尿
-
今朝、毎朝の習慣でオナニーし...
-
変な話しになります。尿検査で...
-
射精をして1週間以内に尿検査を...
-
検便についてです。 便は取れた...
-
腕を見たら黄色くなってる部分...
-
2つの数値のうち、数値が小さい...
-
彼女のことが好きすぎて彼女の...
-
EXCELで条件付き書式で空白セル...
-
口の中に黒い血の塊
-
値が入っているときだけ計算結...
-
男です。昨日の午後3時くらいに...
-
白血球が多いとどんな心配があ...
-
Excelで""で囲む方法
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
中出しをするとお腹が痛い・・・。
-
麻疹風疹の抗体検査結果につい...
-
エクセルでエラーが出て困って...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
至急!尿検査前日にオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
精子が黄色?
-
小数点以下を繰り上げたものを...
-
値が入っているときだけ計算結...
-
口の中に黒い血の塊
-
健否~書類の書き方~
-
甲状腺が腫れているが血液検査...
-
はしかの抗体検査は何科の病院...
-
テスターで断線を調べる方法教...
おすすめ情報