こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのことで質問いたします。既にセルに入力された数式に、マクロでIF関数を一発追加することは可能でしょうか?

エクセルで質問です。どなたかご教授ください…。

既にセルに入力された数式に、マクロでIF関数を一発追加することは可能でしょうか?


=B6*10

という数式が入力されているセルを、ボタンひとつで


=IF(B6=0,”” ,B6*10)

という具合にしたいのです。


相対参照でどのセルにでも効くマクロ、もしあれば教えてください。

投稿日時 - 2007-08-15 09:39:32

QNo.3256201

困ってます

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

質問のようなことは、お勧めできない。手作業で式を作り直すことです。
挙げている単純な例ならまだしも、これが仮の例で、少し複雑になると、質問者のレベルでは手に負えないでしょう。
新しいロジック・理論を考えてやらないと、複雑になるばかり。
下記で"XX"と私が省略した部分も、自力で作れるかな。
ーーー
(事前確認)
標準モジュールに
Sub test01()
Dim cl As Range
For Each cl In Range("a1:H10")
If cl.HasFormula Then
f = cl.Formula
MsgBox cl.Address & " " & f
End If
Next
End Sub
を入れて実行する。
In Range("a1:H10")
のところはセル範囲を適当に変える。
またはIn Selection にして、実行の前に事前に自分でシートで範囲を指定する。
これで、おおよそうまく式を過不足なく捉えているか考える。
捨てるものある場合どうするか
ーー
(2)式の修正の検討
Sub test02()
Dim cl As Range
i = 1
For Each cl In Range("a1:H10")
If cl.HasFormula Then
f = cl.Formula
Cells(i, "K") = cl.Address
Cells(i, "L") = "'" & f
i = i + 1
End If
Next
End Sub
を実行して、印刷し、じっくり同友風に修正したらよいかコードを
考える。
ーーー
(コードの組み込み)
test01()のMsgBox行に
数式文字列fを修正するコードを入れる。
下記のXXの部分は、質問者で考えてください。
質問が
Sub test05()
Dim cl As Range
For Each cl In Range("a1:H10")
If cl.HasFormula Then
f = cl.Formula
' MsgBox cl.Address & " " & F
fn = "=IF(" & "XX" & "=0,""""," & Right(f, Len(f) - 1) & ")"
MsgBox fn
End If
Next
End Sub

投稿日時 - 2007-08-15 11:17:48

補足

高度ですね。
手作業を選択します。ありがとうございました。

投稿日時 - 2007-08-15 13:03:18

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

計算結果が0(ゼロ)の場合0を表示しないようにするという事ですよね
書式を 「#,###;-#,###;」 にしてはどうでしょうか

投稿日時 - 2007-08-15 11:34:04

補足

該当するのセルを空白にしたかったのです。
説明不足でした。すいません。

投稿日時 - 2007-08-15 12:57:13

ANo.1

こんにちは。

=B1*10 の数式が入力されているセルを「C1」とします。
100行まで入力されていると仮定、
セル「C1」 → =B1*10
セル「C2」 → =B2*10 の感じなら
セル「C1」を「=IF(B1=0,"",B1*10)」変更してから下の行にコピーしても良いですが、

マクロで実行するなら、以下を参考にしてください。
以下のマクロは 数式が =B6*10 のように 掛算「*」の場合のみです。

Sub IF関数追加()
  Dim wR   As Long
  Dim wC   As Integer
  Dim wStr  As String
  Dim wCon  As String
  Dim wI   As Integer
  '
  With ActiveSheet
    wStr = .Range("C1").Formula     '数式を取出す
    wStr = Mid(wStr, 2)         '= を除く
    wI = InStr(1, wStr, "*")      '* 前の文字列を取出す
    wCon = Left(wStr, wI - 1)
    .Range("C1") = "=IF(" & wCon & "=0," & """" & """" & "," & wStr & ")"
    '下の行にコピーする
    .Range("C1").AutoFill Destination:=.Range("C1:C100")
  End With
End Sub

投稿日時 - 2007-08-15 11:07:55

補足

意味の解説まで!
ご丁寧な回答ありがとうございます。

参照するセルの中には掛け算以外も混じっていました…。

マクロを勉強し始めたばかりなので大変参考になりました。これからもっと精進します。

投稿日時 - 2007-08-15 13:04:26

あなたにオススメの質問