「1番シート」に以下のようにデータが入っているとします。
111 222 333 x
113 234 213 y
321 421 314 z
「2番シート」はA1,A2,A3にそれぞれ値を入れると、B1にいろいろと計算した結果の数字が入るようになっています。
ここで、1番シートのまえの3つの数字を、2番シートのA1,A2,A3にいれてB1に出てきた結果を、x,y,zのそれぞれに入るようにしたいと思います。
どうすれば実現できるのでしょうか?
=Sheet1!A1
のような感じで入力すれば、他シートの値を参照できますよ
1番シートの前の3つとはA1,A2,A3のことですよね?
2番シート(Sheet2)のA1に「=Sheet1!A1」(「」はつけないでね)
1番シート(Sheet1)のC1に「=Sheet2!B1」
でOKでは?
A1,A2,A3の順番でよければ、
xの数式を
=IF(AND(A1=Sheet2!$A$1,B1=Sheet2!$A$2,C1=Sheet2!$A$3),Sheet2!$B$1,"")
にしてy,zにコピーしてください。
なんかうまくいかないですね。
計算式が1箇所にしかないので、複数の値を順番に入れて計算結果を適宜設定するようにすればいいと思うので、dingdingさんのマクロが正しく動かないとすれば、Functionを呼び出しているところがまずいのではないでしょうか?
Private Sub CommandButton1_Click()
Dim row As Integer
For row = 1 To 1000
If (sheet1.Cells(row, 1) = "") Then
' 適当なところまで繰り返す
Exit For
End If
Worksheets("Sheet1").Cells(row, 4).Value = _
XXX(Worksheets("Sheet1").Cells(row, 1).Value, _
Worksheets("Sheet1").Cells(row, 2).Value, _
Worksheets("Sheet1").Cells(row, 3).Value)
Next
End Sub
Function XXX(aaa, bbb, ccc)
Worksheets("Sheet2").Range("A1").Value = aaa
Worksheets("Sheet2").Range("A2").Value = bbb
Worksheets("Sheet2").Range("A3").Value = ccc
XXX = Worksheets("Sheet2").Range("B1").Value
End Function
ありがとうございます。試してみたいと思います
この問題について、かなり考えてしまいました。
if関数を使う、and関数を使う・・・・
やっぱりマクロか・・・・
でも、発想の転換をしました。
sheet1のXのセルD1に、=の付いた式を入れます。
その式は、sheet2の式をコピーします。
たとえば、
sheet2 の B1に =A1+A2-A3 という式が入っていたとします。
それをコピーし、sheet1のD1に貼り付けます。
その式を =A1+B1-C1 に書き直します。
これが、Xの値となります。
オートフィルで、Y、Z の値を出します。
ありがとうございます。それをしようと思って、参照をすべてせずに1行の式にしたんですが、文字数が5000文字位あることに途中で気づきました。それで断念してしまいました。
今回のような使い方はよくできればなと思って放置していたやり方なので、できるようになれればなと思って投稿していました。
なんとなく簡単にできるだろうと思ってたら、思いのほか難しいことがわかりそれはそれでとても有益でした。ありがとうございます。
意味がちがいます。
2番シートに
111 222 333をいれたときのB1の値をxに、
113 234 213をいれたときのB1の値をyに、
321 421 314をいれたときのB1の値をzに、
入れたいんです。