• ベストアンサー

関数 各条件により貼り付けるデータを変えたい

二つのワークシートがあり、各条件により貼り付けるデータを変えたいのですが、IF文等の関数で可能でしょうか。 ワークシートW   A列    B列    C列    D列    E列   G列 1 倉庫   商品1   10円 2       商品2   50円 3 倉庫   商品3   20円 4       商品4   15円 5              17円 ワークシートY   A列     B列    C列 1 if関数(1)  if関数(2)  if関数(3) 2 if関数(4)  if関数(5)  - このデータで、以下のことをしたいのですが、可能でしょうか ワークシートWのA1とB1に文字がある場合、ワークシートYのA1をワークシートWのD1に貼り付ける ※これを同じ条件で、貼り付けるデータを「ワークシートWのE1にワークシートB1を貼り付け」、 「ワークシートWのG1にワークシートWのC1を貼り付け」をしたい また、ワークシートWのA1に文字がないが、B列に文字がある場合、ワークシートY2をワークシートWのD2に貼り付ける ※これを同じ条件で、貼り付けるデータを「ワークシートWのE2=ワークシートYのB2」、 「ワークシートWのG2にワークシートWのC2を貼り付け」をしたい なお、ワークシートYにはIF文が入力されています。 ご存知の方いらっしゃればお願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

ANo.2です。 C列にしかデータがない場合の条件がないですが。 こんな感じでしょうか? Sub test()  Dim ws1 As Worksheet  Dim ws2 As Worksheet  Dim r1 As Range, r2 As Range  Set ws1 = Worksheets("Sheet1") ' シート名修正(W)  Set ws2 = Worksheets("Sheet2") ' シート名修正(Y)  Set r2 = ws2.Range("A1:C2")  With ws1       For Each r1 In .Range(.Range("C1"), .Range("C" & Rows.Count).End(xlUp))           If r1.Offset(, -2).Value <> "" And r1.Offset(, -1).Value <> "" Then              r1.Offset(, 1).Formula = r2.Item(1).Formula              r1.Offset(, 2).Formula = r2.Item(2).Formula              r1.Offset(, 4).Formula = r2.Item(3).Formula           ElseIf r1.Offset(, -2) = "" And r1.Offset(, -1).Value <> "" Then              r1.Offset(, 1).Formula = r2.Item(4).Formula              r1.Offset(, 2).Formula = r2.Item(5).Formula              r1.Offset(, 4).Formula = r2.Item(6).Formula           End If       Next  End With End Sub シート名は適宜変更願います。

yotuba1000
質問者

お礼

ありがとうございます! 関数をそのまま持ってくることが出来ました! ・・・が、ひとつ問題が出てきてしまいました。 D列にコピーされた関数は「同じ行のAとBを参照して比較した結果を出すIF文」なのですが、 関数の参照先がコピー元の値(参照先例:=IF(A1="倉庫","1","0")のみになってしまっており、 D2はA2とB2を参照せず、A1とB1が参照先になってしまっています。 今までは手動で関数をコピーし、ドラッグでコピーをしていました。 参照先が同じ行のものになるようにするのは可能でしょうか。 (D1の関数はA1とB2を参照し、D2の関数はA2とB2を参照) 何度も申し訳ありませんが、ご存知でしたらご教授下さい。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

もしかすると、 Excel 条件によってデータを貼り付ける方法 http://okwave.jp/qa4236994.html と同じように数式を代入したいと言うことでしょうか? であれば、A列・B列にデータを入れる際に代入したいのか、 データを入れたあとでまとめて代入したいのかで少々コードが変わります。 その場合、B列が入力されている行まで有効とするのか、C列かでも 変わってきますけど。

yotuba1000
質問者

補足

そうなんです・・・。 データを入れた後にまとめて代入したいんです。 A列は空白がある B列は文字列、空白がランダム C列は必ずデータがある この為、C列に文字が入力されている行までを有効で問題ありません。 いつもありがとうございます。

回答No.1

ワークシートWのセルD1に =IF($B1<>"",IF($A1<>"",ワークシートY!A$1,ワークシートY!A$2),"") を入力して、右方向と下方向にコピー。

yotuba1000
質問者

お礼

ありがとうございます。 教えて頂いた関数でやってみましたが、参照先のIF文がうまく稼動しません。 =IF($B1<>"",IF($A1<>"",IF(ワークシートYの関数),IF(ワークシートYの関数),"") と、直接関数を入れてみましたが、これでも駄目でした。 もう少し試してみます。 もし原因とかご存知であればで結構ですので、教えて下さい。

関連するQ&A