- ベストアンサー
左のセルと違った値だけを、他のセルに書き込む
ワークシートの任意の「G列とH列」において、G列の値と違っていたら、 P列にその違った値だけを書き込む。 「違った値」の選択まではなんとかできましたが、それからがどうも進みません。 何卒ご教示お願い致します。 ------------ Sub tes1() Dim r As Range, base As Range Dim x, y Dim i Set r = Selection Set base = Selection.Cells(1, 1) x = r.Columns.Count y = r.Rows.Count Selection.RowDifferences(ActiveCell).Select ・ ・ --------------- G H ・・・・P 98 94 98 101 101 91 95 91 69 69 71 71 99 95 99 89 89 94 94 67 67 68 64 68
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 >「 G列にある違った値 」 を抽出し、P列に貼り付けるにはどのようにすれば、よろしいのでしょうか? すみません、選択されたH列の値を貼り付けてましたね。 G列なら以下の通りです。 Sub test3() Dim r As Range, base As Range, c As Range Dim x, y Dim i Set r = Selection Set base = Selection.Cells(1, 1) x = r.Columns.Count y = r.Rows.Count Selection.RowDifferences(ActiveCell).Select For Each c In Selection c.Offset(0, -1).Copy c.Offset(0, 8) Next c End Sub
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。Wendy02です。 'InputBox で聞くようにしました。 'Selection で取るなら、不要なものは取って、Set r = Selection のみとします。 Sub CopyDifferencesR() Dim r As Range Application.DisplayAlerts = False Application.Goto Range("G1"), True '画面を動かさないなら、,True を取る On Error Resume Next Set r = Application.InputBox("設定範囲を選択してください。1列でも範囲でも可能です", _ Title:="範囲選択", Left:=200, Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If r Is Nothing Then Exit Sub With r.Columns(1).Cells Cells(.Row, 16).Resize(.Rows.Count).FormulaR1C1 = "=IF(RC[-9]=RC[-8],"""",RC[-9])" Cells(.Row, 16).Resize(.Rows.Count).Value = Cells(.Row, 16).Resize(.Rows.Count).Value End With Set r = Nothing End Sub
お礼
誠に、有難うございます。 非常に詳細なご回答どうも有難うございました。 全く持って高レベルなご回答であると思いました。 満点でしたが、No1様が、どおしても、未熟である私自身の希望にちょうど合致してました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 こういうことでは? Sub CopyDifferences() With Range("G1", Range("G65536").End(xlUp)) Range("P1").Resize(.Rows.Count).FormulaR1C1 = "=IF(RC[-9]=RC[-8],"""",RC[-9])" Range("P1").Resize(.Rows.Count).Value = Range("P1").Resize(.Rows.Count).Value End With End Sub
補足
誠に有難うございます。完璧に実行できました。 すみません、 当方の 「 任意セル選択のコード 」 を使い、実行したいんですが、 「 ご回答されたコード 」 を元に編集してるのですがうまくできません。 よろしくお願い致します。 ---- G H ・・・・P ・ ・ ・ ・ ・ ・ 98 94 98 101 101 91 95 91 69 69 71 71 99 95 99 89 89 94 94 67 67 68 64 68
- imogasi
- ベストアンサー率27% (4737/17069)
こんなのこそ関数式でできるのでは =IF(G21=H21,"",G21) -- VBAなら Sub test01() For i = 2 To 30 If Cells(i, "G") <> Cells(i, "H") Then Cells(i, "P") = Cells(i, "G") End If Next i End Sub のように簡単では。 For i = 2 To 30 の30はEnd(xlUp)でも使って割り出してください(略)。
お礼
ご回答、誠に有難うございました。 皆様が満点でした。 未熟である私自身が判定を致さないといけませんので、何卒、ご了承下さいませ。 ご回答コードに興味がありますので、改めて、質問をするかも知れませんが、よろしくお願い致します。
補足
ご回答どうも有難うございます。 実行できました。 申し訳ございませんが、 「 データの一番左上 」か、「 データのG列 」を選択してから実行するにはどのようにすればよろしいでしょうか? つなげかたが、どうもうまく出来ません。 何卒よろしくお願い致します。 --------------- Sub test01() Dim r As Range, base As Range, c As Range Dim x, y Dim i Set r = Selection Set base = Selection.Cells(1, 1) x = r.Columns.Count y = r.Rows.Count For i = 1 To y - 1 If Cells(i, "G") <> Cells(i, "H") Then Cells(i, "P") = Cells(i, "G") End If Next i End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
oshietecho-daiさんこんばんは。 selectまで出来たのなら、それをそのまま利用してこんなのはどうでしょう? Sub test2() Dim r As Range, base As Range, c As Range Dim x, y Dim i Set r = Selection Set base = Selection.Cells(1, 1) x = r.Columns.Count y = r.Rows.Count Selection.RowDifferences(ActiveCell).Select For Each c In Selection c.Copy c.Offset(0, 8) Next c End Sub
補足
ご回答どうも有難うございます。 完璧でした。 すみません、ご回答コードの場合、 「 G列にある違った値 」 を抽出し、P列に貼り付けるにはどのようにすれば、よろしいのでしょうか? 予め入れ替えれば済むと思いますが、よろしくお願い致します。
お礼
度々と恐れいります。 私自身の質問内容が不足で、申しわけありませんでした。