- 締切済み
エクセルで、条件が揃った時に複数セルをコピーする方法
エクセルのセルに、例えば「○」と入れた時、指定したセルから他のセルへ文字情報がコピーすることはできますでしょうか。 一度にコピーしたいセルは4つほどで、規則性はありますがバラバラに散らばっています。 例えば、 1.シート1のA1セルに「○」と入力 2.シート1のB4内数値⇒シート2のA4セルに。 3.シート1のC6内数値⇒シート2のB4セルに。 4.シート1のD9内数値⇒シート2のC4セルに。 といった感じです。これらの動作を「○」を入れるだけで行いたいんです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
> 1.A1に○を入力⇒シート1のE1,F1,G1がシート2のA1,B1,C1へコピーされる。 > 2.次にA2に○を入力⇒シート1のE2,F2,G2がシート2のA1,B1,C1へコピー。実際にはA1,B1,C1に文字が入っているので次のA2,B2,C2へコピーされる。 最初の質問と変わってきましたね。 ○をつけるのはA列 転記されるのは、Sheet1の○がついた行のE~G列がSheet2のA~C列の同じ行へ。 という単純なことですか? それなら#2の回答のようなめんどうなコードを書かなくとも、これでいいと思います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 1 Then Exit Sub If Target.Value <> "○" Then Exit Sub r = Target.Row With Sheets("Sheet2") .Cells(r, "A") = Cells(r, "E") .Cells(r, "B") = Cells(r, "F") .Cells(r, "C") = Cells(r, "G") End With End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
> これを同じパターンで複数回行うにはどのように書けばよいでしょうか‥。 おっしゃる意味がよくわかりませんが、A1に○の方法なら、一度入れた○を消してから再度○を入れれば同じマクロが作動します。 A1をダブルクリック方式なら、A1をダブルクリックする都度マクロが作動するはずです。
- merlionXX
- ベストアンサー率48% (1930/4007)
おやりになりたいことがイマイチ理解できないのですが、関数ではまず無理でしょう。 とりあえずこういう方法もあります。 VBAですが、簡単な手順でできますので試してみてください。 1.Sheet1のシートタブを右クリックし、「コードの表示」を選択します。 2.出てきたVisualBasicEditor(白い部分)に下記のコードをコピペ。 '*****ここから下をコピペ***** Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value <> "○" Then Exit Sub With Sheets("Sheet2") Set a = .Range("A4") Set b = .Range("B4") Set c = .Range("C4") av = Range("B4").Value bv = Range("C6").Value cv = Range("D9").Value Do If a.Value = "" Then a.Value = av Exit Do Else Set a = a.Offset(1, 0) End If Loop Do If b.Value = "" Then b.Value = bv Exit Do Else Set b = b.Offset(1, 0) End If Loop Do If c.Value = "" Then c.Value = cv Exit Do Else Set c = c.Offset(1, 0) End If Loop End With End Sub '*****ここより上までをコピペ***** 3.AltキーとF11キーを同時に押してワークシートへもどります。 これでSheet1のA1に○を入れると、Sheet2のA4、B4、C4に値が転記されます。 もしそのセルに値が入っていたらその下のセルに、そこも空白でないなら空白のセルまで下がり順に値を転記します。 でもA1にいちいち○を入れるのって面倒じゃないですか? 例えばA1をダブルクリックしたらこうなるというやり方もありますよ。 コードの一番上の Private Sub Worksheet_Change(ByVal Target As Range) を、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) に変えて、一番下の End Sub の上に Cancel = True を入れてみてください。
お礼
回答が遅くなり、大変申し訳ありません! 早速試してみましたが、出来ました! 重ね重ねで申し訳ないのですが、これを同じパターンで複数回行うにはどのように書けばよいでしょうか‥。 なにはともあれ、大変感謝いたします。ありがとうございました!
- merlionXX
- ベストアンサー率48% (1930/4007)
シート2のセルにシート1のセルの値を表示させたいんですね? シート2のそれぞれのセル(A4,B4,C4)に =IF(Sheet1!A1="○",Sheet1!B4,"") =IF(Sheet1!A1="○",Sheet1!C6,"") =IF(Sheet1!A1="○",Sheet1!D9,"") ですね。
お礼
確かにそうでした!すみません、記入内容不足です‥。 =IF(Sheet1!A1="○",Sheet1!B4,"")で、シート2のA4にはデータが入りますが、 もしそのシート2のA4にデータが入っていた場合はその下の行に、さらにその下に入っていた場合には さらにその下に‥といったことをしたいのですが可能なのでしょうか。 自分で書いていても可能な気がしませんが、どうぞよろしくお願いいたします!
お礼
またまたお礼が遅くなり、大変申し訳ありません。。 やりたいことがうまく言えるか自信がありませんが、例えば、 1.A1に○を入力⇒シート1のE1,F1,G1がシート2のA1,B1,C1へコピーされる。 2.次にA2に○を入力⇒シート1のE2,F2,G2がシート2のA1,B1,C1へコピー。実際にはA1,B1,C1に文字が入っているので次のA2,B2,C2へコピーされる。 3.これと同じことを複数行で行う という流れです。お教え頂いた方法で、1.は完全にできました(すごい)。で2.と3.が分かりません。 本当に重ね重ねで申し訳ありません。お礼申し上げます。