質問: エクセルのことで質問いたします。既にセルに入力された数式に、マクロでif関数を一発追加することは可能でしょうか? エクセルで質問です。どなたかご教授ください...。 既にセルに入力された数式に、マクロでif関数を一発追加することは可能でしょうか? =b6*10 という数式が入力されているセルを、ボタンひとつで =if(b6=0,”” ,b6*10) という具合にしたいのです。 相対参照でどのセルにでも効くマクロ、もしあれば教えてください。
回答: 質問のようなことは、お勧めできない。手作業で式を作り直すことです。 挙げている単純な例ならまだしも、これが仮の例で、少し複雑になると、質問者のレベルでは手に負えないでしょう。 新しいロジック・理論を考えてやらないと、複雑になるばかり。 下記で"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