- ベストアンサー
Excelで配列にデータをプロットする方法が分からない?
実際には表Bは大きな表ですが、簡略化して説明します。 下記のような表Aに表BのX値とY値と、Y値に連動するデータが設定される。 この表Aから表Bの該当セルにData3を入力したいのですが、どのようにすれば出来るのでしょうか? 表A Data1(表BのX値):1,4,8 Data2(表BのY値):2,5,9 Data3(Data2に連動する値):1,3,2 表Bに期待する結果 Sell(X1Y2)=1,Sell(X4Y2)=1,Sell(X8Y2)=1 Sell(X1Y5)=3,Sell(X4Y5)=3,Sell(X8Y5)=3 Sell(X1Y9)=2,Sell(X4Y9)=2,Sell(X8Y9)=2 Excelの関数を調べましたが、検索はできても、入力する関数がありません。 このため、手作業でデータ入力をしてますが、変更がある度に再入力するので、効率が悪くて困ってます。 お知恵を貸して下さい。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは 私も質問の意味が理解しきれないので EXCELのワークシートを前提にした説明になっていない ので相互の表の関係や表構成もイメージできません 以下は勝手な想像を交えての私なりの解釈ですが Sell→CELL(セルの意味で書かれた)として X と Y は適当な箇所の表Bの範囲の 列をX 行をY と解釈して A B C D 1 表A 2 Data1 1 4 8 3 Data2 2 5 9 4 Data3 1 3 2 5 6 表B 7 Y\X 1 2 3・・・9 8 1 式→ → ・・・→ 9 2 ↓ ↓ ↓・・・↓ : : : : :・・・: 16 9 ↓ ↓ ↓・・・↓ セルB8に式 =IF(COUNTIF($A$2:$C$2,B$7)*COUNTIF($A$3:$C$3,$A8),INDEX($A$4:$C$4,MATCH($A8,$A$3:$C$3,0)),"") と入力してB表の範囲に複写
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17070)
>関数でも出来るのでしょうか まあ出来たといえるでしょうか。正気の沙汰でない長さ? これが全セルに埋めこまれます。至急値複写で式を消しては? Sheet2のA1に =IF(AND(MATCH(COLUMN(),Sheet1!$A$1:$C$1,0)>0,MATCH(ROW(),Sheet1!$A$2:$C$2,0)>0),OFFSET(Sheet1!$A$3,0,MATCH(ROW(),Sheet1!$A$2:$C$2,0)-1),"") と入れて、A10まで複写する。 A1:A10をB1:H10まで複写する。 あまりに長いので#N/Aの表示を防ぐのを取りあえず入れてないですが、さらに関数式の外側を =IF(ISERROR(AND(MATCH(COLUMN(),Sheet1!$A$1:$C$1,0)>0,MATCH(ROW(),Sheet1!$A$2:$C$2,0)>0)),"","aa") を参考に修正してください。"aa"のところに OFFSET(Sheet1!$A$3,0,MATCH(ROW(),Sheet1!$A$2:$C$2,0)-1)を入れる。
お礼
未だ結果を確認するまでに至りませんが、ご教示頂いた内容でやってみます。 ご面倒を頂き助かりました。ありがとうございました。 後は何とか理解して検証してみます。
- imogasi
- ベストアンサー率27% (4737/17070)
#1です。長文にも係わらず補足ありがとうございました。 VBAはやったことがないとのことで済みませんが 下記を実行して見てください。結果これで良いのなら 関数式の回答も出るかもしれません。 Sheet1のA1:C3に、例データとして 1 4 8 2 5 9 1 3 2 を入れます。 Sheet2のA1:H9(C1の8とC2の9から来る)を範囲指定して Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") sh2.Activate For Each cl In Selection For i = 1 To 3 For j = 1 To 3 If cl.Column = sh1.Cells(1, i) And _ cl.Row = sh1.Cells(2, j) Then ' MsgBox cl.Row & cl.Column cl.Value = sh1.Cells(3, j) End If Next j Next i Next End Sub を実行してください。 結果はA1:H9が A列 D列 H列 (1) (2)1 1 1 (3) (4) (5)3 3 3 (6) (7) (8) (9)2 2 2 となります。結果はこれで良いのでしょうか。 ---- (VBAの実行のし方) ワークシート1でも2でも良いが ALTを押しながら「F11」キーを押す。 VBE画面になる。 ALTキーを押しながらI(挿入)次いでM(標準モジュール)を押す。 右の空白ウインドウに上記をコピーし貼りつけ。 Sheet2のA1:H9の範囲を指定し黒転させて コードのどこでもカーソルをポイントして 「F5」(実行)キーを押す。 (' MsgBox cl.Row & cl.Columnは行頭の’を消すと 確認用の行、列番号のメッセージが出ます) <文章で述べるなら> Sheet2のセルのCell(行、列)において、 Sheet1の第1行(A)の各セルの値の列であり 且つSheet1の第2行(B)の各セルの値の行に該当するならば、 第2行の各セルの値の列に対応した第3行(C)の列の値をセットする。 (注)A、B、Cの行数は可変である。
補足
ご回答をありがとうございます。 内容はご指示のように実行し、確認しました。期待通りの結果でした。 関数でも出来るのでしょうか?
- imogasi
- ベストアンサー率27% (4737/17070)
問題の意味が良く取れません。私の頭が悪いか。でも4時間たって、エクセルで回答が入らないのは皆さん判りにくいのでは・・と思いなおして。 ●関数式を聞いておられるのですね。 数学の行列と関係ありますか。 >Data1(表BのX値):1,4,8 セルで言えばA1=1、B1=4、C1=8とか入っている(入れていく)のでしょうか。行並び?列並び?バラバラ?X値とは行(横)方向を意味してる? >Data2(表BのY値):2,5,9 セルで言えばA10=2、B10=5、C10=9のでしょうか。行並び?Y値とは列(縦)方向を意味してる? >Data3(Data2に連動する値):1,3,2 DATA2が値を左右するようですね。 yの数3個の時は3種1,3,2しか取らない。 Data2の個数とData1の個数は同じですか。 Data2の個数とData3の個数は同じですか。 ●エクセルでは、値をセットするセル側に、関数式をセットしないとなりません。そのセルの場所は人間が判断してセルを決めます。 >表Bに期待する結果 この意味が判りません。そう言う値になるよう、関数式を セットしたい? どこのセルに関数式をセットしたいのでしょう。 関数式は行方向複写か列方向複写が活かせる場面でこそ 利用する価値が出てきます。 >Sell(X1Y2)=1,Sell(X4Y2)=1,Sell(X8Y2)=1 Sell(X1Y5)=3,Sell(X4Y5)=3,Sell(X8Y5)=3 Sell(X1Y9)=2,Sell(X4Y9)=2,Sell(X8Y9)=2 Sellは普通Cellですよ。 Sell(X1Y2)はCells(1,2)のことですか。VBAではこう使う。B1のこと?。Cells(行、列)で座標式に表します。 Sell(X1Y5)はCells(1,5)のことですか。E2のこと? それですとE2に1をセットしたいのでしょうか。 ●何となく、INDIRECT関数、OFFSET関数の利用かとにおうのですが。 ●具体的数値羅列より、法則を言葉で表した方が、他人に判りやすいことあり。1、1、2、3、5、8・・と書くよりも、前2項の和が当項になるといったほうが判りやすいような例。本件ではそれは可能かどうでしょうか?
補足
ご回答を頂き、ありがとうございます。 分かり難い説明でした。済みません。 大方、ご推察の通りですが、補足させ頂きます。 ●関数式を聞いておられるのですね。==>その通りです。 数学の行列と関係ありますか。 >Data1(表BのX値):1,4,8 セルで言えばA1=1、B1=4、C1=8とか入っている(入れていく)のでしょうか。==>その通りです。 >行並び?列並び?バラバラ?X値とは行(横)方向を意味してる? ==>X座標値でセルでいえば、1はA列を、4はD列を、8はH列を意味します。 >Data2(表BのY値):2,5,9 セルで言えばA10=2、B10=5、C10=9のでしょうか。==>その通りです。 >行並び?Y値とは列(縦)方向を意味してる?==>その通りですが、値は各々2は2行目を5は5行目を9は9行目を意味します。 >Data3(Data2に連動する値):1,3,2 DATA2が値を左右するようですね。==>はい、2行目の該当する列には1が、5行目の該当する列には3が、9行目の該当する列には2が入るようにしたいのです。 >yの数3個の時は3種1,3,2しか取らない。 Data2の個数とData1の個数は同じですか。 Data2の個数とData3の個数は同じですか。==>Data1とData2の個数は同じとは限りませんが、Data3はData2の個数と同じです。Data2に該当する行の当該列には、対応するData3の同じ値が入るようにしたいのです。 ●エクセルでは、値をセットするセル側に、関数式をセットしないとなりません。そのセルの場所は人間が判断してセルを決めます。 >表Bに期待する結果 この意味が判りません。そう言う値になるよう、関数式を セットしたい? どこのセルに関数式をセットしたいのでしょう。 ==>表Aの設定値を利用して、表Bに値を入力したいので、表BのセルにはData3のデータしか必要ありません。関数式をセットする場合は表Aに一行追加することで済ませたいのですが、Excelでは無理なことを要求しているのでしょうか? 関数式は行方向複写か列方向複写が活かせる場面でこそ 利用する価値が出てきます。 >Sell(X1Y2)=1,Sell(X4Y2)=1,Sell(X8Y2)=1 Sell(X1Y5)=3,Sell(X4Y5)=3,Sell(X8Y5)=3 Sell(X1Y9)=2,Sell(X4Y9)=2,Sell(X8Y9)=2 Sellは普通Cellですよ。==>はい、間違えました。ご指摘ありがとうございます。 Sell(X1Y2)はCells(1,2)のことですか。VBAではこう使う。B1のこと?。==>X座標は列で、Y座標は行を意味してますから、A2の積りです。(済みません、VBAは使ったことがありません) Cells(行、列)で座標式に表します。 Sell(X1Y5)はCells(1,5)のことですか。E2のこと? それですとE2に1をセットしたいのでしょうか。==>A5のことです。表Bの5行目で列A,D,Hに3を入力したいのです。(私の表現とVBAの表記が反対のようです) ●何となく、INDIRECT関数、OFFSET関数の利用かとにおうのですが。==>調べましたが参照であって、配列の該当するセルにデータを入力できません。 ●具体的数値羅列より、法則を言葉で表した方が、他人に判りやすいことあり。1、1、2、3、5、8・・と書くよりも、前2項の和が当項になるといったほうが判りやすいような例。本件ではそれは可能かどうでしょうか?==>はい、そのように表現するよう努力します。 この問題は、行列の「行の値」と「列の値」と入力したいデータが設定されている時に、「表にデータを入力する」方法が分からないので、直接手入力をしています。 これを自動化したいので、何か手は無いかということなのです。。。
お礼
ご回答を頂き、ありがとうございます。 拙い説明にも係らず、上手に解釈して頂きました。 ご回答の数式をそのまま実行してみたら、少し変でしたが、表Aのデータをセル(A2:C4)の範囲にしたら、 期待通りの内容で表Bのセルに入力されました。 数式の意味が未だ良く分からないので、調べてみます。 大変助かります。どうもありがとうございました。