- ベストアンサー
関数 各条件により貼り付けるデータを変えたい
二つのワークシートがあり、各条件により貼り付けるデータを変えたいのですが、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文が入力されています。 ご存知の方いらっしゃればお願いします。
- みんなの回答 (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 シート名は適宜変更願います。
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
もしかすると、 Excel 条件によってデータを貼り付ける方法 http://okwave.jp/qa4236994.html と同じように数式を代入したいと言うことでしょうか? であれば、A列・B列にデータを入れる際に代入したいのか、 データを入れたあとでまとめて代入したいのかで少々コードが変わります。 その場合、B列が入力されている行まで有効とするのか、C列かでも 変わってきますけど。
補足
そうなんです・・・。 データを入れた後にまとめて代入したいんです。 A列は空白がある B列は文字列、空白がランダム C列は必ずデータがある この為、C列に文字が入力されている行までを有効で問題ありません。 いつもありがとうございます。
- shikisaito
- ベストアンサー率52% (257/491)
ワークシートWのセルD1に =IF($B1<>"",IF($A1<>"",ワークシートY!A$1,ワークシートY!A$2),"") を入力して、右方向と下方向にコピー。
お礼
ありがとうございます。 教えて頂いた関数でやってみましたが、参照先のIF文がうまく稼動しません。 =IF($B1<>"",IF($A1<>"",IF(ワークシートYの関数),IF(ワークシートYの関数),"") と、直接関数を入れてみましたが、これでも駄目でした。 もう少し試してみます。 もし原因とかご存知であればで結構ですので、教えて下さい。
お礼
ありがとうございます! 関数をそのまま持ってくることが出来ました! ・・・が、ひとつ問題が出てきてしまいました。 D列にコピーされた関数は「同じ行のAとBを参照して比較した結果を出すIF文」なのですが、 関数の参照先がコピー元の値(参照先例:=IF(A1="倉庫","1","0")のみになってしまっており、 D2はA2とB2を参照せず、A1とB1が参照先になってしまっています。 今までは手動で関数をコピーし、ドラッグでコピーをしていました。 参照先が同じ行のものになるようにするのは可能でしょうか。 (D1の関数はA1とB2を参照し、D2の関数はA2とB2を参照) 何度も申し訳ありませんが、ご存知でしたらご教授下さい。