- ベストアンサー
エクセルVBAで数式を値のみに変換する方法
- エクセルVBAを使用して、数式が入力されたセルを異なるセルの条件によって「値」のみ残す方法をご教授ください。
- 質問者は、特定の範囲のA列のセルの値が数値である場合に、その行のB列のセルに入力された数式を値だけに変換したいと考えています。
- 具体的な実行手順やマクロコードについても教えていただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
計算する条件を言葉で考えるようにしましょう。 (1)入力がある→空欄ではない (2)"計算済み"ではない 両方を満足すれば良いわけです。 If 値 <> "" Then ↓ If 値 <> "" And 値 <> "計算済み" Then
その他の回答 (2)
- hige_082
- ベストアンサー率50% (379/747)
条件を後から出すのはやめようね Sub test() Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If IsNumeric(Cells(i, 1).Value) And Cells(i, 1).Value <> "" Then Cells(i, 2).Value = Cells(i, 2).Value Cells(i, 1).Value = "計算済み" End If Next i End Sub 参考まで
- nda23
- ベストアンサー率54% (777/1415)
こんな感じでしょうか Sub サンプル() Const 参照列 As Long = 1 'A列のこと Const 変更列 As Long = 2 'B列のこと Dim シート As Worksheet Dim 最終行 As Long Dim 行 As Long Dim 値 Set シート = ThisWorkbook.Worksheets(1) 最終行 = シート.Cells.SpecialCells(xlLastCell).Row For 行 = 1 To 最終行 値 = シート.Cells(行, 参照列).Value If 値 <> "" Then シート.Cells(行, 変更列).Formula = "" '★数式を消す シート.Cells(行, 変更列).Value = 値 * 0.1 '★数式と同じ計算 End If Next End Sub
補足
ご回答いただき、ありがとうございます。 ご教授いただきましたコードを入力し、早速試してみました。 望む動作は得られ、何ら問題ないと思われたのですが、nda23様の作成コードの後に別のコードを作成しており、A列の入力数値がマクロ実行後に全て”計算済み”という言葉になるよう改変しております。 ですので、2回目以降のマクロ実行時には、B列の対象セルも”計算済み”となってしまうので、可能であればA列に”計算済み”の記述があった際は空欄と同じ扱いとして除外するコードをご教授いただけると大変助かります。 お手数をお掛け致しまして恐縮ですが、宜しくお願い致します。
補足
>条件を後から出すのはやめようね 大変申し訳ございませんでした。 以後気を付けます。 早速試してみました。 希望の動作が得られておりますが、列中の一部の範囲行を対象としておりますので、 質問本文中のような 5~10、15~20、25~30(A列、B列共通)のように行範囲の指定 を行うことは出来ないでしょうか? 恐れ入りますがご回答宜しくお願い致します。