• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロの書き方)

マクロの書き方

このQ&Aのポイント
  • エクセルのマクロの書き方について、質問者が試行錯誤してもうまくいかなかったため、教えてほしいという内容の質問です。
  • 具体的には、Sheet1とSheet2にデータがあり、Sheet2のB列に特定の値(XやZ)がある場合は、そのA列の番号をSheet1のA列で検索し、対応する行のB列に値を入れたいという要望です。
  • また、Sheet2のC列に0がある場合も同様にSheet1で検索し、対応する行のB列に値を入れたいとのことです。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! Sheet1・B列にSheet2のC列データ表示時のみ、赤文字・太字にすれば良いわけですよね? 前回同様にSheet2のB・C列のどちらか一方のみデータが入っているという前提です。 Sub test2() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") Application.ScreenUpdating = False For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, 1) = ws2.Cells(j, 1) Then If ws2.Cells(j, 2) <> "" Then ws1.Cells(i, 2) = ws2.Cells(j, 2) Else With ws1.Cells(i, 2) .Value = ws2.Cells(j, 3) With .Font .ColorIndex = 3 .Bold = True End With End With End If End If Next j Next i Application.ScreenUpdating = True End Sub こんなんではどうでしょうか?m(_ _)m

MEGUMI19800214
質問者

お礼

めぐみです。 完璧でした!ありがとうございます! 恐縮ですがお礼とベストアンサーとさせて頂きました。 Sheet2の番号が時々2つ、3つある時もあるのですがその場合どうすればいいのかまた新たに質問させて頂きました。 誠に恐れ入りますがもしわかりますようでしたらご回答いただければ非常に助かります。 本当にこの度は素早いご連絡と私の質問に完璧にお応え下さり本当にありがとうございました。 今後ともよろしくお願いいたします。

その他の回答 (3)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

≫No.1 この回答へのお礼 >質問させていただいた内容でShett1とSheet2の番号の並び方違う状況で反映させたいです。 実際に試された結果反映されていなかったのでしょうか? 反映されているはずなのですが、、、 フォントにも対応してみました。 Dim rng1 As Range Dim rng2 As Range Dim c1 As Range Dim c2 As Range With Sheets("Sheet1") Set rng1 = .Range("A1", .Range("A" & Rows.count).End(xlUp)) End With With Sheets("Sheet2") Set rng2 = .Range("A1", .Range("A" & Rows.count).End(xlUp)) End With rng1.offset(, 1).ClearContents rng1.offset(, 1).ClearFormats For Each c1 In rng1 For Each c2 In rng2 If c1.value = c2.value Then With c1.offset(, 1) .value = c2.offset(, 1).value & c2.offset(, 2).value If c2.offset(, 2).value <> "" Then .Font.ColorIndex = 3 .Font.Bold = True End If End With Exit For End If Next Next End Sub

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 Sheet2のデータはB列・もしくはC列どちらかにしかデータはないという前提です。 >Sheet2のB列に"X"か"Z" があれば・・・ とありますが、質問文ではB列には「X」か「Z」しかないので、 B列にデータがあれば・・・という解釈をしています。 標準モジュールにコピー&ペーストしてマクロを実行してみてください。 両Sheetともデータは1行目からあるとしています。 Sub test() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") Application.ScreenUpdating = False For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, 1) = ws2.Cells(j, 1) Then If ws2.Cells(j, 2) <> "" Then ws1.Cells(i, 2) = ws2.Cells(j, 2) Else ws1.Cells(i, 2) = ws2.Cells(j, 3) End If End If Next j Next i Application.ScreenUpdating = True End Sub ※ コードの書き方は十人十色です。個人的に For~Next が好きなので 上記のようなコードにしてみました。 参考になれば良いのですが・・・m(_ _)m

MEGUMI19800214
質問者

お礼

めぐみです、ありがとうございます、完璧でした!感激です!! 大変恐れ入りますがもし、Sheet2のC列に0だけではなく、セルの中に何かあれば(例えばKやH)、 Sheet1のB列にその文字を赤の太字で表示する(B列はこのままで構いません)場合どうすればいいでしょうか。 反映結果のイメージは下記のような感じです。 ■Sheet1 770474 0【←が0の赤字の太字】 770223 Z 770876 702872 X 770773 770723 X 770762 770782 770422 X 770774 770725 Z 770770 770805 770577 K【←がKの赤字の太字】 770720 X 770768 702725 X 770074 H【←がHの赤字の太字】 770330 0 本当にありがとうございます。こんなに完璧でものすごく感激しました。 更に質問して本当に申し訳ありません。。。 何卒よろしくお願いいたします。 本当にありがとうございます。

MEGUMI19800214
質問者

補足

補足ですみません、下記のような感じです。 A列とB列の間に空白がなく誤解を招くかと思いまして補足させて頂きました。 ■Sheet1 A列   B列 770474  0【←が0の赤字の太字】 770223  Z 770876 702872  X 770773 770723  X 770762 770782 770422  X 770774 770725  Z 770770 770805 770577  K【←がKの赤字の太字】 770720  X 770768 702725  X 770074  H【←がHの赤字の太字】 770330  0

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

A列の値が同じなら、Sheet2のB:C列セルの値をSheet1のB列セルに代入 としてみました。 Dim rng1 As Range Dim rng2 As Range Dim c1 As Range Dim c2 As Range With Sheets("Sheet1") Set rng1 = .Range("A1", .Range("A" & Rows.count).End(xlUp)) End With With Sheets("Sheet2") Set rng2 = .Range("A1", .Range("A" & Rows.count).End(xlUp)) End With For Each c1 In rng1 For Each c2 In rng2 If c1.value = c2.value Then c1.offset(, 1).value = c2.offset(, 1).value & c2.offset(, 2).value Exit For End If Next Next

MEGUMI19800214
質問者

お礼

早速の返信有難うございました。 ただ、A列の値はShett1とSheet2では違います。 なので、ものすごく申し訳ないです。 せっかくこんなに素晴らしいマクロを書いていただいたのですが使うことができません。 本当に申し訳ありません。 質問させていただいた内容でShett1とSheet2の番号の並び方違う状況で反映させたいです。 どうかよろしくお願いいたします。 でも、私の質問に答えてくださりまして本当に本当にありがとうございます。