マクロの書き方

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

マクロの書き方

恐れ入ります、めぐみと申します。 エクセルの書籍を何度も見て試してみたのですができませんでした・・・ 下記のマクロを書く場合どのように書けばいいでしょうか? お時間ある方がいらっしゃりましたらで結構ですので教えていただければ大変助かります。 下記のようにSheet1とSheet2にデータがります。 ■Sheet1 770474 770223 770876 702872 770773 770723 770762 770782 770422 770774 770725 770770 770805 770577 770720 770768 702725 770074 770330 ■Sheet2 A列  B列  C列 702725 X 702872 X 770074    0 770223 Z 770474    0 770242 X 770264 X 770330    0 770347 X 770422 X 770468    0 770523 X 770577    0 770627 X 770672 X 770677    0 770720 X 770723 X 770725 Z 770727 X やりたいことなのですが、 1.Sheet2のB列に"X"か"Z" があれば   その場所のA列の6桁の番号(左隣)を見て、その番号と同じ番号がSheet1のA列にあるかを探します。   その番号があれば、Sheet1のその番号の右隣のB列に、Sheet2のB列にあった"X"か"Z" を入れます。 2.Sheet2のC列に"0"があれば   その場所のA列の6桁の番号(左隣)を見て、その番号と同じ番号がSheet1のA列にあるかを探します。   その番号があれば、Sheet1のその番号の右隣のB列に、Sheet2のB列にあった"0" を入れます。 上記のSheet1とSheet2の場合に下記のような結果になるようにしたいです。 Sheet1 A列  B列 770474 0 770223 Z 770876 702872 X 770773 770723 770762 770782 770422 X 770774 770725 770770 770805 770577 0 770720 X 770768 702725 X 770074 0 770330 0

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

  • ベストアンサー
  • 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の番号の並び方違う状況で反映させたいです。 どうかよろしくお願いいたします。 でも、私の質問に答えてくださりまして本当に本当にありがとうございます。

関連するQ&A

  • マクロの書き方2

    マクロの書き方2 tom04さま、本当にありがとうございました。めぐみです。 すみません、先程の質問の続きになってしまいます。 Sheet2にのA列は時々同じ番号が2つ,3つあることがあります。 Sheet2に同じ番号があった場合は、Sheet1のダブっている番号の横のB列セルを黒くしたいです。 そのセルの中はSheet2の情報が反映されてもされなくてもどちらでもかまいません。 ただ、Sheet2のA列に同じ番号があった場合にSheet1のダブっている番号の横のB列セルを黒くなるという機能が追加されていればそれで良いです。 例えば下記のように1行目と4行目に同じ番号が存在していたら、Sheet1のA列の702725の横のB列のセルが黒くなっていたらいいです。 ■Sheet2 A列  B列  C列 702725 X 702872 X 770074    0 702725    0 770223 Z 770474    0 770242 X 770264 X 770330    0 770347 X 770422 X 770468    0 770523 X 770577    0 770627 X 770672 X 770677    0 770720 X 770723 X 770725 Z 770727 X 恐れ入りますが何卒よろしくお願いいたします。

  • 評価の事務処理をマクロでできないでしょうか

    派遣切り後、事務職の就職がようやく見つかりました。 仕事の効率を少しでも上げて、より多くの業務処理をしたいので下記のマクロを作成したいと考えています。 1ヶ月前に書籍を購入して独自でできるか試したのですがダイレクトな情報が見つからず、基礎の部分だけはできたところです。 恐縮なのですがもし、できる方がいましたらぜひ教えて頂けませんでしょうか。 Sheet1とSheet2があります。 Sheet1は、A列には6桁の納品番号の羅列、B列は【空白】です。 Sheet2は、顧客からの評価が記載→A,B,C,空白: A列には6桁の納品番号、B列は【評価】があります。 Sheet1例 ●A列 B列 238062 238075 238096 238220 92528 238230 238090 *A列はMAX70行ほどあります ●Sheet2例 A列 B列 92528 B 238062 A 238075 C 238090 B 238096 A 238220  ←空白(記載無し) 238230 A *A列はMAX500行ほどあります したいことは、 1.Sheet1のA列にある6桁の納品番号を1つずつ検索 2.Sheet2のA列ににその納品番号があるかどうか? 3.Sheet2にその納品番号があれば、Sheet2のその納品番号の右隣(Sheet2のB列)の評価がA,B,C,空白 の何かを見ます 4.そして、Sheet1のB列にその評価を記載します。空白の場合はSheet1のB列のセルを赤くします。 Sheet2にはダブル数字がある可能性が有り、その場合はSheet1のB列のセルを緑色にします。 です。以下の「●Sheet1処理後の例」を参照ください。 ●Sheet1処理後の例 A列 B列 238062 A 238075 C 238096 A 238220 セルを赤色にします 92528 B 238230 A 238090 B

  • Excel2000マクロ記述について

    下記の条件で下記のようなマスターを参照してマクロを作成したいのですが、どのように記述したら良いでしょうか シート名 滞留在庫表 条件 c列の5行目からdataが入っています。data例(AD1200S0110000000P)18桁 dataの頭8桁目がBの場合はL221をV列に表示 dataの頭8桁目が、A又はM又Pの場合はL222をV列に表示 dataの頭8桁目がB、A、M、P以外の場合は、ブランクをV列に表示 シート名 表示再設定マスタ             A列    B列 5行目****************** 6行目*******B********** L221 7行目*******A********** L222 8行目*******M********** L222 9行目*******P********** L222

  • EXCELの表を参照して値を返す方法

    例えば下記のような表があるとします。 表1(シート1)  A列  B列  ~10  A 11~20  B 21~30  C 31~50  D  ・  ・  ・ 151~  Z 表2(シート2) 45   X 21   X 133   X Xの箇所に表1のA列を参照してB列の値(AとかC)を返す方法はないでしょうか?IF文を使った場合7レベルまではできるのですが、それ以上のネストは無理なようです。ちなみに表1は30分類(行)ほどあります。 よろしくお願いします。  

  • VBA(マクロ)について

    エクセルのマクロを使って下記のように実行を考えています。 A列のコード番号が一定ではないため、処理に困っています。 どなたかアドバイス頂けないでしょうか。 詳細についてです。A列にコード番号があり、B列に数値があります。 例えば、A列の1~3行目まで100とあり、4~5行目まで400と1~3行目と4~5行目の数値はおなじです。3行分だったり2行分だったりと不規則に下に続いていきます。 そのA列の同じコード番号全てに対して、B列の値を合計してC列に合計値を入力したいのです。 C列の合計値入力箇所は、A列の1~3行目までだとするとC列1行目に合計値がくるようにしたいのです。 ちなみに行数は10万桁ほどあります。

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • EXCLEのマクロ 2つのシートを統合する方法

    下記のことを行いたいのです。 教えていただけないでしょうか。 下記2つのシートをA列をキーにして sheet1のあ、b、c列のデータに sheet2のc、d列を 統合して、sheet1のdれつ e列に統合して5列のデータを作りたい a列とb列のデータは基本同じですが、スペースが入っていたり 違う場合もある。B列はsheet1のデータを採用 sheet2は不要 ・sheet1 a列 b列 C列 123 ああ 123456 456 いい 125456 789 うう 12344556 1234 ええ 12345678 4567 おお 123456456 8945 かか 1234567844 ------------------- ・sheet2 a列 B列 C列 D列 123 ああ 03-5212-0000 東京都○ 456 いい 06-5212-0000 大阪府○ 789 うう 044-5212-0000 神奈川県○ 1234 ええ 045-512-0000 横浜市○ 4567 おお 043-212-0000 埼玉県○ 8945 かか 03-5212-0000 東京都○

  • マクロによる条件での行の入力と削除

     初めまして、よろしくお願いします。  次のような二枚のシートがあります  シート1      A  B  C   1     2       ・      99      100 23    101 25   102 31   103 34  104 43  105 44  106 49  107 50  108 55  109 60  110  111  ・  ・  シート2      A  B  C   1     2       ・      99      100 23  1 2 3   101 25  4 5 6 102 31  7 8 9     103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 55  5 6 7 109 60  8 9 0 110  111  ・  ・ シート1とシート2のA列に入っている数字が通し番号です。シート2では加えてその通し番号のデーター数字がB列、C列、D列に入っています。 のこシート1の通し番号31が削除、代わりに通し番5番と51番を追加し、  シート1      A  B  C   1     2       ・      99      100  5 101 23    102 25     103 34  104 43  105 44  106 49  107 50  108 51 109 55  110 60  111  112  ・  ・ マクロを実行すると  シート2      A  B  C   1     2       ・      99      100  5 101 23  1 2 3   102 25  4 5 6    103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 51 109 55  5 6 7 110 60  8 9 0 111  112  ・  ・ シート2がこように通し番号31が入っていた行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加されるマクロを教えていただきたく、よろしくお願いします。

  • エクセルのデータをマクロを使って自動仕分け

    めぐみと申します、エクセルのことではじめて質問させて頂きます。 エクセルのデータをマクロを使って自動仕分けできないかと思ってます。 書籍を購入して自分で試してみようと思ったのですが、どうしてもよくわからなくて質問させて頂きました。 エクセルで以下のような複雑な処理はできるのでしょうか? もし、できるようでしたらば大変恐縮ですがどのようにしたらできるのか教えて頂けないでしょうか。 お時間ある方でお分かりになる方がいらっしゃいましたら教えていただきたく何卒よろしくお願いいたします。 Sheet1のA列に名前がならんでいます。 Sheet2のA列にも名前が並んでいてB,C,D列には付随する情報が並んでいます。 Sheet1のA列の名前を1つずつ検索して、Sheet2のA列にその名前があるかを確認します。 もし、Sheet1のA列の名前がSheet2のA列にあれば、Sheet2のA列右横のB,C,D列3つのセルの情報をSheet1のA列の文字のB,C,D列にコピーするようにしたいです。 (例) Sheet1のA列の情報です。 美咲 愛 舞 里奈 美佳 彩 萌 順子 麻衣 茜 彩香 彩花 Sheet2のA,B,C,D列の情報です(申し訳ありません、空白を便宜上「---」にしてます)。 愛------ B型------ 1992------ 4 彩------ A型------ 1994------ 3 美穂---- B型------ 1993------ 2 成美---- O型------ 1994------ 3 沙織---- AB型----- 1995------ 3 麻衣---- AB型----- 1992------ 3 舞------ B型------ 1992------ 4 愛美---- A型------ 1993------ 5 瞳------ A型------ 1994------ 4 彩香---- AB型----- 1995------ 4 マクロの結果、Sheet1のA列が以下のようにしたいです(申し訳ありません、空白を便宜上「---」にしてます)。 美咲 愛------ B型------ 1992------ 4 舞------ B型------ 1992------ 4 里奈---- A型------ 1994------ 3 美佳 彩------ A型------ 1994------ 3 萌 順子 麻衣---- AB型----- 1992------ 3 茜 彩香---- AB型----- 1995------ 4 彩花 ※データのないとろこは何もしません。 どうか、お時間ある方でお分かりになる方がいらっしゃいましたら教えていただきたく何卒よろしくお願いいたします。 めぐみ

  • マクロで教えてください。

    4つのエクセルデータ(A,B,C,D)それぞれ内のシート全てを ペイントというエクセルデータの機種マスタというSHEETの右隣以降に移動したい場合の マクロを教えてください。 ちなみに、数式が入っているsheetにはそれぞれ名前が付いています。 A,B,C,Dのデータにはsheet2、sheet3というなにもデータが無いsheetもありますので、 そのsheet2、sheet3は移動したくありません。

専門家に質問してみよう