• ベストアンサー

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

ある計算式が入ったセルがあったとして、その計算された値(見かけ上の数値)をどこか別のセル(空白のセル)に返す方法をご存知でしたら教えてください。 返したいセルには関数すら入れないという方法でやりたいので、マクロを使うしかないと思うのですが、どのようなマクロを作ればよいのか見当が付かないのです(計算されてきた見かけ上の値を参照してどっかに出力する方法などあるのでしょうか)。 例えば↓みたいな感じ   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
質問者

お礼

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

関連するQ&A

  • 関数計算されたセルを数値にする方法

    すいませんが、教えてください。関数計算されたセルを関数計算の状態ではなく、数値として変更することは可能でしょうか? たとえばA1セル(1),B1セル(2)があり、C1セルに=SUM(A1+B1)と入力すると画面上では3とでますが、セルの中身としては関数式の状態です。これを"3"と認識したいのですが・・・。

  • 関数の計算結果を再度関数に組み込む方法は

    例えばです。  A) セルA1に 「10」、   セルB1に「20」  、 セルC1 に 「30」    の各々の数字が入力されていて、セルD1にSUM関数を使って、合計した    数値を入力するものとします。    セルD1には、SUM関数計算結果として「60」という数字が表示される。  ここからが、質問のポイントなのですが、  B)セルE1にセルD1に表示された「60」の18倍した計算を自動計算した結果を表示することはでいないのでしょうか。   あまりうまく表現できないのですがアドバイスしていただきたい点お分かりいただけたでしょうか。   別の表現の仕方をしますと、      セルD1、SUm関数   セルA1+セルB1+セルC1のSum関数の計算結果表示      セルE1          セルD1×18                           ※セルE1には、上記の「セルD1×18」の自動計算式を入力したいのですが、       首尾よく入力できません。   あまり要領よく質問できていないかもわかりませんが、よろしくお願いします。

  • セルを参照させる関数について

    C列には関数で返ってきている値が入っています。(たとえば単純にC1のセルには=SUM(A1:B1)と入っている)そのままC1を横にドラッグしてコピーするとD1のセルには単純に=SUM(B1:C1)となりますが、見に行くセルをC2に、E1のセルの参照するセルはC3を。。。という風に参照させるにはどんな関数を使用すればいいのでしょうか? (単純にD1のセルに=C2と設定はしたくないのが前提です)

  • セルに数式が入ってるかどうかを取得する関数は?

    C1には、=SUM(A1:B1) C2には、0 が入力されています。 実際、A1:B1の値は0なので、 C1もC2も0が表示されています。 D列で、ちゃんとC列にsum関数が入ってるか調べてたいのですが =COUNTIF(C1,"*sum*") をオートフィルしても、0が返ります。 C3に「sum」と言う文字列を入れて、=COUNTIF(C3,"*sum*")をしたら 1が返りました。 COUNTIF関数は文字列は認識しますが数式は認識しないようです。 このような場合、セルに数式が入ってるかを取得する方法はありますか?

  • エクセル IF関数が入った条件付き書式について

    エクセルにおいて、セルA1、B1、C1があるとします。A1、B1には数値が何も入力されていない状態で、C1に計算式「=SUM(A1)/B1」が入っているとします。このままでは、C1は、「#DIV/0!」と表示されます。 この表示を消すために、C1にIF、ISERROR関数を使い、「=IF(ISERROR(SUM(A1)/B1),"",SUM(A1)/B1)」の計算式を入力します。 このままでもいいのですが、C1の値が「10以上」になった時に、C1のセルに色を付けたいのです。 書式→条件付き書式→セルの値が→次の値以上→10 にすると、セルに何も値が入っていない(空白)状態で色だけが付いてしまいます。 色々調べると、IF関数の""の空白が文字列のため、数値より大きいとみなされている事が原因っていうことは、分かりましたが、色々試してみても出来ません。何かいい方法はございますでしょうか? ご教授お願いします。

  • エクセルの値のコピー(自動で)について

    例えば、 セル(A1)に1      セル(B1)に3      セル(C1)に=SUM(A1:B1) と入力します。      セル(C1)は、見た目には4ですが、      実際は「=SUM(A1:B1)」です。  ここで、 セル(D1)には、セル(C1)のコピーを「値」の形式で貼り付けると    セル(D1)は4となります。 このセルDの貼り付けを自動で行いたいのですが可能でしょうか。 私はマクロとか分かりません。 関数での方法を教えて下さい。

  • Excel関数コピーについて

    Excel関数を横にコピーした時に、 その前の関数の次の列から計算式を作成したいのですが可能でしょうか? D1セルには、=SUM(J2:L2)が入ります。 (B1の関数であれば、A1がC2まで計算しているのでD2からはじまります) A1セル B1セル C1セル     ・・・ =SUM(A2:C2) =SUM(D2:F2)  =SUM(G2:I2)  ・・・ 教えてください。

  • エクセルでセル入力とセル出力の自動化

    おそらくマクロで簡単に出来ることだと思うのですが、マクロを使ったことが一度もなくやり方がわからなく苦慮しています。 やりたいことは、簡単に述べると、 (1)セルA1に数字を入力(変数)すると、セルA2に計算結果が出る。 [つまり、A2にはA1を変数とする関数が入っている] (2)セルB1、セルB2、セルB3、…にはそれぞれ数値が入力されている。 [変数リスト] (3)変数リストにあるB1の数値をA1に入力して、その結果のA2をC1に書き出す。さらに、B2をA1に入力して、その結果のA2をC2に書き出す。以下、これを変数リストすべてについて実行する。 という感じのことです。この程度のことなら、初めから関数化してしまえばおしまいなのですが、実際A2の出力でやっている計算はシートを複数使うような大規模な計算なので、関数化するのは面倒です。そこで、手動でいちいち変数の入力と結果の出力を実行しておりましたが、それはそれで入力ミスや出力ミスもしそうですし、自動化できるならそれに越したことはありません。 そういうわけで、上記の作業を自動化する方法をご教授いただけたらと思います。どうぞよろしくお願いします。

  • AVERAGEIFS関数について

    どなたか、お尋ねいたします。 AVERAGEIFS関数でA1~E1のセルに示した数値 A1  B1    C1  D1  E1 9  20   21  22  31 二つの条件 10以下、30以上の数値を除く平均値 20、21、22   答え21.0 ただし、10と30は別の計算式から求めた値とします。 実際は20程の数値から以下、以上を除いた平均値を計算したいと思っています。 AVERAGEIFSで計算式の書き方を教えていただけませんか。 他の方法でも可能なら結構ですので、よろしくお願いします。

  • 別シートで利用している関数を使って、関数の一部分だけを変更したいのです

    別シートで利用している関数を使って、関数の一部分だけを変更したいのですが、 どのようにすればできるのかわかりません。教えてください。 (イメージ) Sheet1 A1セル: 1 ←Aとする A2セル: 2 ←Bとする A3セル: 3 ←Cとする B1セル: =SUM(A1:A3) Sheet2 A1セル: 4 ←Dとする A2セル: 5 ←Eとする A3セル: 8 ←Fとする。 やりたいこと Sheet2_C1セルに、Sheet1_B1セル「 =SUM(A1:A3) 」 (意味:A+B+C)の関数をコピーして、その関数のA1(意味:A) 部分をSheet2_A1のDに変更したい。 ∴Sheet2_C1セルには、( =(D+B+C) )という計算式になり、結果である数値(9)を表示させたい。 (実際には、IF文でちょっとややこしいのですが、イメージはこんな感じです) 現象 (1)Sheet2_C1で「 =SUM( 」としてSheet1_B1をダブルクリック。 Sheet2_C1に、 「 =SUM(Sheet1!B1) 」と表示される。 こうなると、どうやって関数を変更することができるのでしょうか? 関数については、ほとんど皆無に等しい知識しかなく、やればやるほど混乱しています。 質問の説明が悪くて理解しづらいかもしれませんが、ご教示いただけると助かります。 よろしくお願いします。

専門家に質問してみよう