- ベストアンサー
エクセルでセルの位置を未知数に出来ますか?
エクセル2000を使用しています。 先日本を買って調べようとしたんですけどどこを見てよいやらさっぱり分からないので詳しい方ご教授ねがいます。 エクセルの位置(つまり,行と列)の部分をAやBなどの未知数に設定することは出来ないでしょうか? たとえば、あらかじめA1~10にデータ値を入力しておいて、 B1の値が「5」だったら、「A5+100」の答えをC1に表示せよ。 というときに、C1に入る式は、A1の1の部分をB1の未知数にして「=AB1+100」 ではうごかないですよね。 どうすればよいのでしょうか? 説明がへたなので分かりにくいかもしれませんが、できるだけ補足いたしますので、おしえて下さい。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
早速の補足有難うございます。マクロで簡単に実行することができます。 次のように操作してみて下さい。 1.新規ブックを開き、ALT+F11キーを押してVBE画面を開く。 2.画面左上にあるVBAProjectの下のSheet1をダブルクリックし、右側の白い部分に下記のコードをコピー・ペーストする。 3.再びALT+F11キーを押してエクセルの画面にもどる シート1のA1・A2・A3に適当な数字を入力してみて下さい。どれかに0が入力されていると0をD1に表示し、そうでなければA1~C1の合計がD1に表示されます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRow As Long myRow = Target.Row If Target.Address = Range("C" & myRow).Address Then If Target.Offset(0, -2).Value = 0 Or Target.Offset(0, -1).Value = 0 Or Target.Value = 0 Then Target.Offset(0, 1).Value = 0 Else Target.Offset(0, 1).Value = Target.Offset(0, -2).Value + Target.Offset(0, -1).Value + Target.Value End If End If End Sub
その他の回答 (8)
- taisuke555
- ベストアンサー率55% (132/236)
kazuhiko5681さんへ No.8の補足に対する、No.9のマクロですが、 D1セルに =IF(OR(A1=0,B1=0,C1=0),0,A1+B1+C1) でいいような気もするのですが? マクロについてどういうものか教えているのでしたらすみません。
お礼
satumaimoです。ご回答ありがとうございます。kazuhiko5681にはマクロについての作り方の例を教えていただいておりました。 マクロを使わなくてもIFで出来るんですね。 頭が悪いもので、そのような式を思いつきませんでした。 IFは使いようで便利なものですね。参考になりました。 ありがとうございます!!
- kazuhiko5681
- ベストアンサー率49% (79/159)
はじめまして。 もし私でよろしければ、サンプルマクロを作ってみたいと思います。 マクロを使えば、手数なく簡単に実行することができます。 もしご希望の節は、あなた様のおやりになりたいことを詳しく具体的に教えて下さい。 お手数をおかけいたしますが、よろしくお願いいたします。
お礼
>お手数をおかけ・・・・ なんてとんでもないです。こちらこそ、簡単な質問をしてしまいお手数をおかけしております。前の方々のご回答により、OFFSETで解決できそうです。 でも、マクロには興味があります。何かプログラムのようなもので動かすんですよね? 別の質問になってしまいますが、こんなときはどうでしょう? D1にA1+B1+C1の答えを表示するとき、もし、A1~C1のどれか1つでも0(ゼロ)が入っていたらD1の答えを0(ゼロ)または別の表示 したい。 なんてときです。私の持っている知識では到底出来ません。 もし、お時間がありましたら宜しくお願いします。
- shelf_town
- ベストアンサー率27% (3/11)
3つの方法が出ましたね。 (1)OFFSET関数を使用 (2)マクロを使用 (3)INDIRECT関数を使用 (1)OFFSET関数の場合、A1~A10の範囲がA11~A20になった場合、起点をA11に変更し、 B1には常に1~10を指定することになります。 (2)マクロを使用すると、マクロを起動しなくてはならないのでB1に値を入れた後 ボタンを押すなり、メニューからマクロを呼び出すなりしなくてはなりません。 (3)INDIRECT関数の場合、A1~A10の範囲がA11~A20になった場合、B1に指定する値が 11~20に変化します。もっとも直感的でわかりやすいでしょう。 どれがいいかは好みや使う目的にあわせるとよいでしょう。
お礼
初心者なので出来るかどうか分かりませんが、この場合(1)で出来るかと思います。(2)、(3)も参考になりました。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
#1,#2回答は難しいですが、 質問のケースなら、C1セルに関数 =if(B1=5,A5+100,"")で良いのではありませんか。 B1が5でない時のことは質問に述べてないので、値を入れない、にしています。 IFで聞く部分のB1=5はどのセルでも良く、2つでも (A1+B1>3)良い。設定する値のA5+100の部分も自身C1さえ入っていなければ、A1+B2+C5とかでも良い。 これでは易しすぎるので、質問の意を汲んでいないかもしれないが、その際はご勘弁を。
お礼
教えていただいたIFを調べました。 B1=5でなくても、文字でもよいそうなので、たとえば、数値を文字に仮定しても使用できるという事ですね。便利かもしれません! ありがとうございました。
- taisuke555
- ベストアンサー率55% (132/236)
=INDIRECT("A"&B1)+100 という方法もあります。
お礼
勉強不足でお手数をかけました。 またひとつ、エクセルの関数の使い方を覚えました。 ありがとうございました。
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 C1 に =INDIRECT("A"&B1)+100 って意味でしょうか?
お礼
なるほど、この方法でもわかりやすいですね できあがたワークシートは、社員みんなで使用し検討するものなので直接入力してしまうのが手っ取り早いかもしれません。 ありがとうございました。
- mneko
- ベストアンサー率33% (46/139)
基本となるデータがA列にあり、そのカレントセル(A1からA10までとする) の内容をB列のn行にしてそのB列n行の内容に+100をして、C1に格納する このときC列の1行はA列の1行であるから。 このような解釈でよいでしょうか? この場合、マクロ(Visual Basic)でCells(行、列)を使ってやれば簡単に 出来ます。
- shelf_town
- ベストアンサー率27% (3/11)
セルC1に、 =OFFSET(A1,B1-1,0,1,1)+100 と入力してください。 OFFSETワークシート関数の詳細はヘルプを見てください。
お礼
ありがとうございました! ちゃんと本に載っていました。ここまで見つけるのが大変なんですよね。 ちょっとややこしいですが、解決しそうです。
お礼
お手数をおかけしました。さっそく実行してみます! 命令とルールを覚えれば出来そうですね。 むかしむかし、MSXのベーシックをやっておりましたので、何となく意味は分かるような気がします。 エクセルの機能を細かく覚えるよりも、マクロを使った方がやりやすいような気がします。 本を見ても、例が自分のニーズにあっていないの理解しにくいですが、これはまさに自分のニーズなのでとっつきやすく勉強できそうです! ありがとうございました!!