• ベストアンサー

関数を使わないでそのセルに出力する方法

ある計算式が入ったセルがあったとして、その計算された値(見かけ上の数値)をどこか別のセル(空白のセル)に返す方法をご存知でしたら教えてください。 返したいセルには関数すら入れないという方法でやりたいので、マクロを使うしかないと思うのですが、どのようなマクロを作ればよいのか見当が付かないのです(計算されてきた見かけ上の値を参照してどっかに出力する方法などあるのでしょうか)。 例えば↓みたいな感じ   A   B    C       D 1  10  10  =SUM(A1:B1) C1のセルは見かけ「20」となりますが、実際には「=SUM(A1:B1)」となっています。この「20」をD1にそのまま抽出したいと考えています(D1のセルには何も関数を入れないで、見かけ上も実際に入っている数値も「20」としたいのです) 関数だけでは無理ですよね?

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

結論から言えば、関数では不可能です。 ということで、以下の2つの方法を示します。お勧めはシートの保護による方法です。 【方法A: 計算式が見えなければOKだからシート保護】 シートを保護しても良いのであれば、計算式の入力されたセルを選択した状態で、 1. [セルの書式設定]-[保護]-[表示しない]にチェック 2. シートを保護する これで、数式バーに計算式が表示されなくなります。 【方法B: シートを保護したくない、計算式は絶対に使いたくないのでVBA】 VBA(マクロ)になりますね。ワークシートイベントで値の変化を監視し、変化があれば計算結果をセルに書き出すようコーディングします。 以下はご提示いただいた例の場合のサンプルコードです。ベタベタですみませんが、簡単なコメントを記載しておきましたので、ご参考下さい。 1. EXCELのシート選択タブ上で目的のシートを選択し、右クリック 2. [コードの表示]でVBE起動 3. 以下のコードを貼付け Private Sub Worksheet_Change(ByVal Target As Range)   'イベントの二重発生抑止   Application.EnableEvents = False   'データが変更されたのがA1またはB1セルの場合   If Target = [A1] Or Target = [B1] Then     'C1セルにA1とB1の合計を書込む     [C1] = Application.WorksheetFunction.Sum([A1], [B1])   End If   'イベント抑止を元に戻す(必ず)   Application.EnableEvents = True End Sub

meronbokujou
質問者

お礼

丁寧な解説ありがとうございました!明日仕事中にさっそく試してみようと思います。

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

No.4です。 すみません。長々と見当違いな回答をしてしまいました。 C1セルに計算式があって、その値をD1セルに関数を使わず複写したいのですね。 私のアップしたコードの下記を訂正します。 (誤)[C1] = Application.WorksheetFunction.Sum([A1], [B1]) (正1)[D1] = Application.WorksheetFunction.Sum([A1], [B1]) (正2)[D1]=[C1] 失礼しました。早とちりしました。

  • chiw
  • ベストアンサー率33% (42/126)
回答No.3

そのシートにマクロを組み込みます。 VisualBasicEditerを出して該当シートに 以下のようにコーディングします。 具体的には SUBが再計算されたときに Worksheet_Calculateイベントが発生しますから そのときに内容をc1からd1へ転送しています。 Private Sub Worksheet_Calculate() Range("d1").Value = Range("c1").Value End Sub

meronbokujou
質問者

お礼

まだ時間が無くて試していないのですが、勉強のためにもVBで作ってみようと思います。ありがとうございました。

回答No.2

入力規則で入力するというは? 特定のセルを参照することが決まっているのなら、 D1セルに入力規則を適用し、設定で、 入力値の種類を「リスト」にして、 元の値を「=$C$1」としたら、 D1セルでリストが「20」と出るので、それをえらべば、20が入りますが。 リストで選ぶという操作が×かな。

meronbokujou
質問者

お礼

ありがとうございます。入力規則でもよいのですが、実はかなり多くのセルで実行したかったため、一個ずつ埋めていくしかない方法だ手動で入力するのと変わらないな、、と思い諦めてしまいました。気合いが足りなかったみたいでごめんなさい。

  • mac-san
  • ベストアンサー率37% (35/94)
回答No.1

ご推測の通り、関数では無理かと思います。 例えば、マクロで (1)C列全体を[コピー] (2)C列横に[形式を選択して貼付け]-[値] となります。 マクロの記録でやれば、コード自動作成してくれ、VBコードの編集も可能です。

meronbokujou
質問者

お礼

ありがとうございます。マクロでそれをやろうと思ったのですが、多少複雑なるとうまく動きませんでした。勉強します。