• ベストアンサー

エクセル関数で名前定義を引用

エクセル2002使用です。 IF関数で、名前の定義を利用したいのですがうまくいきません。 A1に数値「1」を入力するかしないかとします。 (A1:C1)を名前の定義で「範囲1」とします 各セルに文字が入力されています。 (D1:F1)を名前の定義で「範囲2」とします。 各セルはブランクのままです。 A1セルに数値「1」が入力されて時に、「範囲2」に「範囲1」がコピーされるようにしたいのですがどうすればいいのでしょうか? 範囲2=IF(A1=1,範囲1) ではだめですよね。。。。 よろしくお願いします。

  • ken123
  • お礼率73% (299/409)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>今回は関数のみで処理したいのですが、何とかならないでしょうか? 例えば、単に、オブジェクトを写すだけでよいというのならなんとかなっても、そうでなければ、以下のように、D1:F1(範囲2)に、式を埋め込まないと出来ません。 とどのつまり、 D1:F1 に =IF($A$1=1,A1,"") .... というような式でしか埋められないのです。 関数式は、そこに戻り値を返す、ということしかしません。 定義した「名前」を使うのでしたら、以下のようになります。 =IF($A$1=1,INDEX(範囲1,,COLUMN(A1)),"").... >「範囲2」に「範囲1」がコピーされるようにしたい という、実際のセルの値をコピーするような動作を伴ったことは、Excelの関数では、根本的に出来ないのです。残念ですが。

ken123
質問者

お礼

Wendy02様何度もありがとうございます。 範囲で一気にできたら楽だと思うのですが・・・ そこはVBAということになるのですね。 INDEX関数ありがとうございます。 検討してみます。 今後ともよろしくお願いします

その他の回答 (3)

回答No.3

関数を使うと云うことになると、例えば、 D1セルにA1セルの内容を反映しようとすると [D1]=IF(A1=1,A1,"") とすればいいわけです。 E1,F1セルについても、 [E1]=IF(A1=1,B1,"") [F1]=IF(A1=1,C1,"") となります。 で、ここまで書けば、何となくわかってもらえるかと思いますが、 セルが参照できるのは1つのセルに1つのセルが対応します。 範囲で複数セルを指定した場合は、どのセルのデータを使うのかがわからないため、エラーになります。 したがって、上記の例で示したように、一つのセルが一つのセルを参照するようにしないとダメです。 ご質問のように複数セルに複数セルを対応させるのは無理です。 ですから、名前を定義する場合も一つのセルに名前を付けて利用しないと、エラーとなります。

ken123
質問者

お礼

DoragonFang様 早速のご回答ありがとうございます。 やっぱりだめですか。。。 名前の定義の機能があるのでできそうな気がしたんでうすが・・・ ありがとうございました。 今後ともよろしくお願いします

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

以下の方法は如何でしょうか。 (1)範囲2をドラッグ (2)関数「=IF(A1=1,範囲1,””)を入力 (3)関数「Enter」する際、「Shift&Ctrl」を押下する

ken123
質問者

補足

mu2011さま早速のご回答ありがとうございます。 範囲2をドラックしても数式の入力はD1セルにされてしまうため上手くいきません。 (3)の関数「Enter」する際、「Shift&Ctrl」を押下する がどのような効果があるのかよくわからないのですが・・・ ご多忙中すいません。よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

>A1セルに数値「1」が入力されて時に、「範囲2」に「範囲1」がコピーされるようにしたいのですがどうすればいいのでしょうか? ◎ 範囲2=IF(A1=1,範囲1) その式の考え方が、もうプログラム式なんですね。 VBAの作り方は、ちょっと違いますが、たぶん、以下のコードを見ていて、なんとなくお分かりになるかと思います。 シート上のシートタブ(シートの下部のSheet1/Sheet2/..)を該当するシートを右クリック コードの表示をクリックで以下を貼り付けます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Range("A1").Value = 1 Then 'A1に1が入ったときだけ、起動する  Application.EnableEvents = False '貼り付け時に自動で働かないようにする  Range("範囲2").Value = Range("範囲1").Value  Application.EnableEvents = True '解除 End If End Sub

ken123
質問者

補足

Wendy02さま 早速のご回答ありがとうございます。 ご丁寧なご回答いただき誠に申し訳ないのですが、今回は関数のみで処理したいのですが、何とかならないでしょうか? 説明不足で本当に申し訳ありません。 よろしくお願いします。

関連するQ&A

  • エクセルの名前の定義について。

    ご覧いただきありがとうございます。 エクセルの名前の定義についての質問です。 (1)【sheet1】 A2:A6に『aa』、 B2:B10に『bb』、 C2:C6に『cc』という名前を付けたとします。 ちなみにそれぞれのセルには文字列が入力されています。 (名前の定義の《範囲》はブックではなく、sheet1) (2)【sheet2】 B2:D6に『aa』、 B7:D15に『bb』、 B16:D20に『cc』と、sheet1と同じ名前を付けました。 それぞれB列・C列・D列には数字が入力されています。 (名前の定義の《範囲》はブックではなく、sheet2) ちなみにA列には、sheet1に入力されている文字列と同じものが入力されています。 A2:A6にはsheet1で『aa』と名前をつけた範囲と同じ文字列。 A7:A15にはsheet1の『bb』と同じ文字列。 A16:A20には『cc』と同じ文字列です。 ここからが本題です! (3)【sheet3】 A2に何らかしら関数を入れて、【sheet1】で作った名前(aaやbbやcc)が1つ表示されるようにしたとします。 そしてB2には、A2で表示された名前の中の文字列が1つ表示されるようにします。 (例えばA2に『aa』と表示されたら、B2には◯◯) 更にC2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』の中のB列と、A列にある◯◯とが交差するセルに入力されている数字(図でいう(5))を表示させる関数を入力したいのです。(INDEXやINDIRECT、MATCH関数など…) 他に例えば、A2に『bb』(sheet1の名前)、B2に★★と表示されたら、C2には【sheet2】の名前『bb』の中のB列と、A列にある★★が交差するセルに入力されている数字を表示させたいです。 同じように、今度は、D2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』のC列と、A列にある◯◯の交差するセルに入力されている数字を表示させたいです。 長々とややこしくてすみません… 説明分かりますでしょうか?? つまりは【sheet3】のC2・D2・E2に入力する関数が知りたいです。 自分なりに関数を入力してみたのですが、A2で表示された名前がsheet1での名前なので、sheet2の情報を引き出す事が出来ません。 わざわざsheet1とsheet2でシートを分けたのは、同じシート内で同じ名前が付けられないと思ったからです! どなたか分かりましたら教えて下さい! どうぞよろしくお願い致します。 ※ちなみに、貼付した図の『・』は以下省略の意味で使ってます。

  • エクセル2007関数について

    エクセル2007関数について セルAT22に「採用」の文字を入力するとセルAB24、AH24 の入力数値をF39(AB24)、F40(AH24)各々にコピーしたい のですが、関数を教えてください。

  • エクセルユーザー定義関数(1)

    エクセル初心者です。 複数のセル範囲(例えばRange("A1:A100"))を入力させ、入力されたセル範囲すべてのセルを3乗した総和を求めるユーザー定義関数は作ること可能でしょうか? Function Y(a As Range) As Variant ここに、aで選択されたセル全てを3乗して総和を求める関数Yを定義したい。 End Function よろしくお願い致します。

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

  • エクセル関数の質問です。

    エクセル関数の質問です。 A2のセルの4文字目がGならばD2セル+5、A2のセルの4文字目がFならばD2セル-10 その計算でD2のセルが5以下なら空白という関数を書きたのですがわかりません。 それぞれのIF文は以下のようにできたのですがこのIF文を一緒に書きたいのですがうまくいきません。 =IF(IF(MID(A2,4,1)="G",D2,D2+5)<=5,"",IF(MID(A2,4,1)="G",D2,D2+5)) =IF(IF(MID(A2,4,1)="F",D2,D2-10)<=5,"",IF(MID(A2,4,1)="G",D2,D2-10)) どうすればよろしいのでしょうか?どうかご教授よろしく願いいたします。

  • 名前定義で定義している値が、自動的に可変してしまう

    Excel の質問です。 名前の定義について、教えて下さい。 僕が仕様を理解していないのか、関数の記述が間違っているのでしょうか ■現象 シートクリック時に、定義している関数の値が可変してしまう ■データ ワークシート[Sheet1]上データ  |A     |B ------------------------------------ 1|りんご   | 2|みかん   | 3|バナナ   | 4|パイナップル| 5|もも    | A1 ~ A5 は、データを直接入力 ■名前の定義 (1).数式リボン> 名前の管理> 新規作成 (2).以下 名前: 最終行番号 範囲: Sheet1 参照範囲: =MAX(INDEX((Sheet1!A:A<>"")*ROW(Sheet1!A:A),0)) (3).D10 に、「=最終行番号」と入力 ■結果 ・入力直後、D10 は、5 となるが、どこかのセルをクリック後、名前の定義を見ると「A:A」になっていない。  ・異なる列範囲になっている  ・規則性不明 ■期待結果 ・上記の場合、どのセルをクリックしても、名前の定義で定義した範囲が「A:A」のままであって欲しい。 ■現象確認 Excel2010 ■その他 ・参照範囲で設定している記述が、参照ではないからでしょうか?(自己定義関数を、名前の定義で呼び出している感じで、間違った使い方をしているから?)

  • エクセルIF関数について

    エクセルIF関数について A2セルにA1セルが空白なら空白。8:00ならば、8:00。8:00>ならA3セルに(そのままの値を)表示せよ。 という関数を入れたいのですが、どの関数をどのように定義すれば良いのかわかりません。 IF関数かな?と思ったのですが、IF関数で偽のときは、「別のセルに入力せよ」などというような定義って出来るのでしょうか? どなたか教えてください。

  • エクセルの関数の貼り付け方法について

    エクセル2003を使用して関数計算表を作成しています。 IF関数の中にAND関数を使用して数式を作ったのですが そのままコピーしてしまうと変換してほしい数字が変換されません 下記に詳細を書きました エクセルのシート1にこのような基本形の数式があるとします =IF(AND(T4=2,D9=77),F8,"") 次にこの数式をシート2にコピーして =IF(AND(T6=2,D11=77),F10,"") というふうに変換したいのですが 現状ではコピーして貼り付けが終わった状態から 手で数字を一文字ずつ消して打ち直していますが膨大なデータ量でして 大変苦労をしています 何とか皆様のお知恵をお借りしたいと思いまして質問させていただきました よきアドバイス宜しくお願いいたします すみません。補足をします。 シート1のセルA1の数式がこれです =IF(AND(T4=2,D9=77),F8,"") このシート1のセルA1の数式 =IF(AND(T4=2,D9=77),F8,"")を シート2のセルA1にコピーして =IF(AND(T6=2,D11=77),F10,"") という数式にしたいのです 現状ではシート2のセルA1に貼り付けが終わった =IF(AND(T4=2,D9=77),F8,"")を T4→T6へ、D9→D11へ、F8→F10へ一つ一つ手入力で 修正しております。膨大なデータ量です(涙) お願いします

  • エクセルの関数を教えてください。

    セルHにIFとANDを使って下記内容の関数式を入力したいです。 セルAからセルF内すべてに数値が入っていたらセルFを返す、 セルFが空欄ならばセルEの数値を返す、 セルEも空欄ならばDの値を、 Dも空欄ならばCの値を、Cも空欄ならばBの数値を、 Bも空欄ならばAの数値を返し、 Aも空欄(つまりAからF内に数値なし)ならばスペースを返す。 わかる方、教えてください。 よろしくお願いします。

  • エクセルの名前定義について

    こんにちは。 エクセルの名前定義についてわからないことがあります。 名前を定義するときに簡単な関数を使う方法はないでしょうか。 例えば、B1のセルの名前をA1のセルの内容にしたいときに B1の名前のところに「=A1」と言う風に参照したり、他の関数を 使える方法もあるなら知りたいです。 初歩的な質問かもしれませんが、ご教授のほどよろしくお願いします。

専門家に質問してみよう