• ベストアンサー

左のセルと違った値だけを、他のセルに書き込む

ワークシートの任意の「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

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.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

oshietecho-dai
質問者

お礼

度々と恐れいります。 私自身の質問内容が不足で、申しわけありませんでした。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。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

oshietecho-dai
質問者

お礼

誠に、有難うございます。 非常に詳細なご回答どうも有難うございました。 全く持って高レベルなご回答であると思いました。 満点でしたが、No1様が、どおしても、未熟である私自身の希望にちょうど合致してました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 こういうことでは? 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

oshietecho-dai
質問者

補足

誠に有難うございます。完璧に実行できました。 すみません、 当方の 「 任意セル選択のコード 」 を使い、実行したいんですが、 「 ご回答されたコード 」 を元に編集してるのですがうまくできません。 よろしくお願い致します。 ---- 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)
回答No.2

こんなのこそ関数式でできるのでは =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)でも使って割り出してください(略)。

oshietecho-dai
質問者

お礼

ご回答、誠に有難うございました。 皆様が満点でした。 未熟である私自身が判定を致さないといけませんので、何卒、ご了承下さいませ。 ご回答コードに興味がありますので、改めて、質問をするかも知れませんが、よろしくお願い致します。

oshietecho-dai
質問者

補足

ご回答どうも有難うございます。 実行できました。 申し訳ございませんが、 「 データの一番左上 」か、「 データの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)
回答No.1

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

oshietecho-dai
質問者

補足

ご回答どうも有難うございます。 完璧でした。 すみません、ご回答コードの場合、 「 G列にある違った値 」 を抽出し、P列に貼り付けるにはどのようにすれば、よろしいのでしょうか? 予め入れ替えれば済むと思いますが、よろしくお願い致します。

関連するQ&A