• ベストアンサー

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

ワークシートの任意の「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/17068)
回答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

  • 一度に、任意の列全体へ、関数をコピーするマクロは?

    下記コードのように、 「 E 列 」 だけに実行するのではなく、 「 実行前 」 に、手動にて、好みの任意のセル1つに  「 関数 」 を貼り付けます。 そしてマクロを実行し、 下記 「 実行後 」 のようにするには、どのようなコードになりますでしょうか? 下記のような変数を組み入れるのだと思いますが、うまく出来ません。 ただ、先頭の 「 行番号 ( 変動しますが、例では60 ) 」 は、 手動にて貼り付けますので事前に解かっているとします。 また、 「 オートフィルタ 」 後に、使用する予定です。 何卒、よろしくお願い致します。 ------------------ Sub test() Range("E60").Select ActiveCell.FormulaR1C1 = "=RC[2]" Selection.AutoFill Destination:=Range("E60", Range("C65536").End(xlUp).Offset(0, 2)), Type:=xlFillDefault End Sub ------------------ 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 ---実行前(オートフィルタ後)------------------ C列            E列  ・              ・  ・              ・ 2007/10/13       =G60    2007/10/13 2007/10/13 2007/10/13 2007/10/13 2007/10/14 2007/10/14 --実行後------------------- C列            E列  ・              ・  ・              ・ 2007/10/13       =G60    2007/10/13       =G60 2007/10/13       =G60 2007/10/13       =G60 2007/10/13       =G60 2007/10/14       =G60 2007/10/14       =G60

  • このコードのどこが違ってますか?

    Windows XP Home Edition Excel 2002 左表(行方向)のコードは図のように問題なく動作しますので、 今度は、 右表(列方向)のように実行したいのですが、 最下記の「'---- 」間の箇所だけを変更すればいいかなと思いましたが、 どこが違ってますでしょうか? それと、(y * myCol) の基本的な日本語訳はどおなりますか? 何卒、ご教授お願い致します。 Sub 左表() Dim r As Range, base As Range Dim x, y Dim i, myCol Range("B3:D5").Select '省略 Set r = Selection Set base = Selection.Cells(1, 1) x = r.Columns.Count y = r.Rows.Count '------------------ For myCol = 1 To x - 1 base.Offset(0, myCol).Resize(y).Copy base.Offset(y * myCol) '●前記myColの各列を行方向(縦方向)に空白セルを詰めて、B列の下へ順次貼り付けていく '------------------ Next End Sub ========================== Sub 右表() '--変更箇所--------  For myCol = 1 To y - 1 base.Offset(myCol, 0).Resize(x).Copy base.Offset(myCol * x) '------------------

  • セルにワイルドカード*を含む式を書き込むには?

    下記コードはアクティブセルの右にアクティブセルと同じ値を書き込みますが、 ワイルドカード付きの値を書き込むにはどうすれば良いのでしょうか? n列  (n+1)列 あ     あ* い     い* う     え* ______________________________ Sub test1() Dim R As Range, R1 As Range Set R = ActiveCell Set R1 = Range(R, Cells(Rows.Count, R.Column).End(xlUp)) With R1.Offset(, 1) .Formula = "=" & R.Address(0, 0) End With Set R1 = Nothing: Set R = Nothing End Sub

  • マクロ 結合セルへ値のみ貼り付けるにはどうしたらよいでしょうか。

    マクロは初心者で、まだまだ勉強しているところです。 シート名「入出金履歴」のデータを顧客コードごとに分かれている別シートへデータを振り分けて貼り付ける、もしくは反映させたいのですが、貼り付け先のセルがシートの都合上、結合セルになっており、下記のマクロだと当然ながらエラーになってしまいます。結合セルをまず、解除してから貼り付けようと思ったのですが、うまくいかず、困っています。 コピー先の結合状態は、7行目から、列A:C、列D:E、列F:H と、3列になるように結合されています。結合されている行の終わりは、A:C(結合されている)列に「合計」の値が入っているセルの行、H列まで、3列になるよう結合されています。 解除する以外に、良い方法があれば是非教えていただきたいです。 よろしくお願いします。 Sub samplea() r1 = ActiveCell.Row r2 = r1 + Selection.Rows.Count - 1 Dim myRange As Range Dim s_no As String For i = r1 To r2 s_no = Cells(i, 2) Range(Cells(i, 4), Cells(i, 9)).Select Selection.Copy Sheets(Format(s_no)).Select Set myRange = Columns("a:c").Find(what:="合計") If myRange Is Nothing Then Debug.Print "Not Fount" Else myRange.Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Sheets("入出金履歴").Select End If Next End Sub

  • Selectした範囲の最終セルの1つ下を選択

    よろしくお願いします。 Dim R As Range Dim rr As Range Set R = Columns("H").Find("○", After:=Range("H" & Rows.Count)) Set rr = Columns("H").Find("○", After:=R, SearchDirection:=2) Range(R, rr).Select で、Selectした範囲内の最終セルの1つ下を選択したいのですが ご存知の方、ご教示をお願いします。

  • 行列入れ替えの並び替えを簡単に出来る方法

    エクセルで写真の左側のシートを右側のシートの様に並び替えをしたいのですが、簡単に計算式を入れてやる方法はありますか? 変換前のシートは他にもありまして、行列の長さはどれも長さがバラバラになっております。 行は~◯kgが複数あり、列は商品コードが100個以上あるのもあります。 なので、行列の長さがバラバラでも一つのマクロで動作出来るものを作成したいと考えています。 計算式を一個づつ入れて作ってましたがとんでもなく不格好になり。。。。 すみません、どなたかご指導お願いできませんか? Sub henkan() '貼付けシートの作成 'シート名は変換で作成 Sheets.Add after:=ActiveSheet ActiveSheet.Name = "変換" 'タイトル名作成 Range("A1").Select ActiveCell.FormulaR1C1 = "商品コード" Range("B1").Select ActiveCell.FormulaR1C1 = "容量" Range("C1").Select ActiveCell.FormulaR1C1 = "量" '容量作成 Dim g As Integer Dim h As Integer r = 0 Z = 0 y = 0 Worksheets("量").Activate Range(Cells(3, 3), Cells(3, Columns.Count).End(xlToLeft)).Select Z = Selection.Count Worksheets("量").Activate Range("B4", Range("B4").End(xlDown)).Select y = Selection.Rows.Count For g = 4 To y + 3 Worksheets("量").Activate Range(Cells(3, 3), Cells(3, Columns.Count).End(xlToLeft)).Select Selection.Copy h = g - 2 + r 'ここでhの値を計算しています Sheets("変換").Cells(h, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True r = r + Z - 1 Next g '量作成 Dim j As Integer Dim k As Integer r = 0 For j = 4 To y + 3 Sheets("量").Select Sheets("量").Range(Cells(j, 3), Cells(j, Columns.Count).End(xlToLeft)).Copy k = j - 2 + r 'ここでkの値を計算しています Sheets("変換").Cells(k, 3).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True r = r + Z - 1 Next j '商品コード作成 Dim l As Integer Dim m As Integer r = 0 For l = 4 To y + 3 Worksheets("量").Activate Cells(l, 2).Select Selection.Copy m = l - 2 + r 'ここでmの値を計算しています Sheets("変換").Cells(m, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True r = r + Z - 1 Next l '罫線作成 Sheets("変換").Select With ActiveSheet.UsedRange.Borders .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With '容量コードの空白埋め Sheets("変換").Select Range("A1").Select Dim o As String Dim p As Range o = "A2:B" & Range("C" & Format(Rows.Count)).End(xlUp).Row For Each p In Range(o) If p.Value = "" Then p.Value = p.Offset(-1, 0).Value Next Dim rng As Range Worksheets("変換").Activate Worksheets("変換").UsedRange.Select For Each rng In Selection If rng.Value = "" Then rng.Value = "0" End If Next rng End Sub

  • 式を残して値のみ削除

    Sub clear() Dim wskyu As Worksheet Dim wsData As Worksheet Dim Y As Range Const SH_KYUYO As String = "給与明細" Const SH_DATA As String = "データ入力" Set wskyu = Worksheets(SH_KYUYO) Set wsData = Worksheets(SH_DATA) With wsData For Each Y In .Range("C3:G55") If Y.Interior.ColorIndex <> xlNone Then Y.ClearContents End If Next End With With wskyu Range ("P7:AQ7"), .Range("D10:AQ10"), .Range("D13:AQ13"), _ .Range("D17:AQ17"), .Range("D20:AQ20"), .Range("D24:AQ24"), _ .Range("D29:AI29").Select Selection.SpecialCells(xlCellTypeConstants, 23).Select Selection.ClearContents End With MsgBox "個人番号を入力後、性別を選択しボタン(1)を押してください" End Sub 値のみ削除しようと上のコードを書いたのですが With wskyu のあとの Range~ でプロパティの使い方が不正です と言われてしまいました(-_-;) ヘルプボタンがあったので押しても空のページに飛んでしまい どうすればよいのかわかりません、、、 どうかよろしくおねがいします!!

  • VBA 他ブックのセルの値を1セルずつ代入したい

    昨日↓でお世話になりました。 http://oshiete1.goo.ne.jp/qa4299999.html おかげさまでだいぶ先に進むことができました。 ですがまた行き詰ってしまったので、お力を借りれたらと思い質問させていただきます。 昨日ご教授いただいたコードでは、「管理表.xls」のコマンドボタンを押すと、同一フォルダ内にあるブック「*予定表*.xls」内のシート「*予定?」の固定の範囲 「G2,H2,N3,O3」を「管理表.xls、sheet2、A1:D4」に 「B14:I44」を「管理表.xls、sheet2、A2:H32」に まだファイル、シートがある場合はループでそれらの次の行に値をいれていくことができたのですが、固定範囲のうちの「G2,H2,N3,O3」を、「管理表.xls、sheet2、A2:H32」のA~D列全てに付けたいのです。 なんかわかりづらい表現になってしまいましたが、 ____A___B___C___D____E____F____G____H____I____J_____K____L 1 G2 G2 N2 O3 B14 C14 D14 E14 F14 G14 H14 I14 2 G2 G2 N2 O3 B15 C15 D15 E15 F15 G15 H15 I15 3 G2 G2 N2 O3 B16 C16 D16 E16 F16 G16 H16 I16             ・             ・             ・ という感じにしたいんです。どうかご教授お願いします。 一応コードを載せておきます。 Sub 予定() Dim Pn As String Dim Fn As String Dim ws As Worksheet Dim r As Range Dim v, i As Integer Pn = ActiveWorkbook.Path ChDir Pn Fn = Dir("*予定表*.xls") v = Array("N3", "O3", "G2", "H2") Set r = ThisWorkbook.Worksheets("Sheet2").Range("A1") Do Until Fn = "" Workbooks.Open Filename:=Fn For Each ws In Worksheets If ws.Name Like "*予定?" Then With ws For i = 0 To 3 r.Offset(0, i).Value = .Range(v(i)).Value Next r.Offset(1).Resize(31, 8).Value = .Range("B14:I44").Value Set r = r.End(xlDown).Offset(1) End With End If Next Workbooks(Fn).Close SaveChanges:=False Fn = Dir() Loop End Sub ++++++++++++++++++++ OS ⇒Windows XP Version⇒Excel 2000 ++++++++++++++++++++

  • テキストの値を、セルの値に取り込みたい。

    すみません。誰か教えて頂けませんか。 エクセルの値を、テキストファルに出力する事が出来たのですが、 この値を、同じセル位置に取り込み操作をマクロで記述したいのですが、 どうやっても分かりません。 誰か教えて頂けませんでしょうか。 出力記述を下記に記入させて頂きます。 Sub 記録() Dim myFileNo As Integer Dim i As Long Dim y As Long Dim myLastRow As Long Dim IMA As String IMA = Format(Now, "yyyy.mm.dd.ss") & ".txt" Worksheets("Sheet1").Activate myLastRow = Range("A51").CurrentRegion.Rows.Count myFileNo = FreeFile Open "D:¥" & IMA For Output As myFileNo For i = 50 To 64 For y = 1 To 64 Write #myFileNo, Cells(i, y), Next y Next i Close #myFileNo End Sub 空欄と値はカンマ区切りで出力されます。 すみません、宜しくお願いします。

  • セルの値をテキストボックスへ記入及び名前変更

    範囲選択したセルに丸オートシェイプを挿入すると共に、それぞれのセルの値をテキストで追加及び、図形名を同じ値にしたいと思っています(下記の***の部分)。この時セルは結合されている場合があります。 描写は下記のようにしたのですが、セルの読み込みで詰まってしまいました。セルの値を読み込むにはどの様なしたらいいのでしょうか? 宜しくお願い致します。 Sub 選択されたセルに丸テキスト挿入() Dim X As Double Dim Y As Double Dim L As Double Dim c As Range If Not TypeName(Selection) = "Range" Then Exit Sub For Each c In Selection With c.MergeArea If c.Address = .Item(1).Address Then L = IIf(.Width > .Height, .Height, .Width) X = .Left + (.Width - L) / 2 Y = .Top + (.Height - L) / 2 ActiveSheet.Shapes.AddShape(msoShapeOval, X, Y, L, L).Select Selection.Name = *** Selection.Characters.Text = "***" Selection.ShapeRange.Fill.Visible = msoFalse      Selection.HorizontalAlignment = xlCenter With Selection.Characters(Start:=1, Length:=3).Font .Size = 8 End With End If End With Next End Sub

専門家に質問してみよう