• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つブック 条件転記と分岐の方法)

2つのブック 条件転記と分岐の方法

このQ&Aのポイント
  • 以前に2つのブックを条件で転記させるマクロのアドバイスを頂き、活用させていただいておりましたが、票の形式が変わってしまい、新規, 変更, 廃止という文言がなくなり、日付だけで判別する形式になってしまっています。現在、修正を行なっていますが、CASEで分岐させるときの書き方が上手く動作しません。どのように記述すればよいでしょうか?
  • IDデータ表.xlsとID管理票.xlsのIDが一致し、かつそのIDの横3つのセルに日付が入っている場合、それを上書きします。空白のセルは無視します。また、IDデータ表.xlsのB列に「取消」という文字が入力されている場合、ID管理票と合致したIDとその横3つの日付をクリアします。
  • 以前に頂いたマクロのアドバイスでは、新規、変更、廃止という文言を使用していましたが、今回はそれがなくなってしまったため、CASEを使用して分岐させる方法を教えていただきたいです。

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

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

続けてお邪魔します。 >IDデータ表の日付から→ID管理票のIDの横に記述にしたいのですが・・・ 「上書き」とはそういうコトだったのですね。 ↓のコードに変更してみてください。 尚、「ID管理票」Sheetの3つのセルデータは消去していますので、 残したい場合は適宜コードを訂正してください。 Sub 修正() Dim w0 As Worksheet, w1 As Worksheet Dim i As Long, c As Range Set w0 = Workbooks("IDデータ表.xls").Worksheets("大元") Set w1 = Workbooks("ID管理票.xls").Worksheets("管理") For i = 2 To w0.Cells(Rows.Count, "A").End(xlUp).Row Set c = w1.Cells.Find(what:=w0.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then '▼ここから訂正 With c.Offset(, 1) .Resize(, 3).ClearContents '←IDの3つ右隣りのセルを消去★ .Value = w0.Cells(i, "B") .NumberFormatLocal = "m/d" '←セルの表示形式は好みで★ End With '▲ここまで Else c.Resize(, 4).ClearContents End If End If Next i End Sub 今度はどうでしょうか?m(_ _)m

samohankinpo
質問者

お礼

tom04様 修正して頂いたコードで無事動作できました。 本当にありがとうございます!! マクロについては本で基礎的な事を覚え初めて FINDやIF~やloopなど勉強中です。 マクロの奥深さを知ると同時にまだまだ勉強することが多いと思っています。 コードの記述とご対応ありがとうございました。

その他の回答 (2)

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

No.1です。 投稿後もう一度コードを見直すと間違いがありました。 >Set c = w1.Cells.Find(what:=Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) の行を >Set c = w1.Cells.Find(what:=w0.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) に変更してください。 Sheetを指定していなかったので エラーになるかもしれません。 検証せずに投稿してごめんなさいね。m(_ _)m

samohankinpo
質問者

お礼

tom04様 色々とお手数かけて申し訳ありません ありがとうございます。 再度、修正していただいたコードを試してみましたが エラーやデバック等はありませんでしたが ID管理票の3つのどれかのセルの日付→IDデータ表に転記されております。 IDデータ表の日付から→ID管理票のIDの横に記述にしたいのですが 申し訳ありませんが確認してもらってもよろしいでしょうか? 下記に修正後のコードを記述します。 何度もお手数かけて恐縮です。 宜しくお願いいたします Sub 修正() Dim w0 As Worksheet, w1 As Worksheet Dim i As Long, c As Range Set w0 = Workbooks("IDデータ表.xls").Worksheets("大元") Set w1 = Workbooks("ID管理票.xls").Worksheets("管理") For i = 2 To w0.Cells(Rows.Count, "A").End(xlUp).Row Set c = w1.Cells.Find(what:=w0.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then If w0.Cells(i, "B") <> "取消" Then w0.Cells(i, "B") = WorksheetFunction.Max(c.Offset(, 1).Resize(, 3)) Else c.Resize(, 4).ClearContents End If End If Next i End Sub

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

こんばんは! >日付は必ずIDの横3つのどれかに記述されています。 日付は1つのセルだけに入っているとすると・・・ Sub Sample1() Dim w0 As Worksheet, w1 As Worksheet Dim i As Long, c As Range Set w0 = Workbooks("IDデータ表.xls").Worksheets("大元") Set w1 = Workbooks("ID管理票.xls").Worksheets("管理") For i = 2 To w0.Cells(Rows.Count, "A").End(xlUp).Row Set c = w1.Cells.Find(what:=Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then If w0.Cells(i, "B") <> "取消" Then w0.Cells(i, "B") = WorksheetFunction.Max(c.Offset(, 1).Resize(, 3)) Else c.Resize(, 4).ClearContents End If End If Next i End Sub こんな感じではどうでしょうか?m(_ _)m

samohankinpo
質問者

お礼

tom04様 早速のご回答ありがとうございます!! 頂いたコードを試してみたのですが IDデータ表の取消と書かれた部分はID管理票からクリアになりました。 ありがとうございます。 ただ、コードを書いていただいて申し訳ありませんが 日付転記が ID番号が合致したもので IDデータ表の日付から→ID管理票のIDの横に記述ですが 頂いたコードを試してみたところ ID管理票の3つのどれかのセルの日付→IDデータ表に転記されております。 回答頂いて申し訳ありませんが IDデータ表の日付から→ID管理票のIDの横に記述にしたいのですが この場合、コードのどの部分を変えれば宜しいのでしょうか? お答えいた中、恐縮ですが ご教授願います。 構成や画像について不明点があれば補足させて頂きます。 宜しくお願いいたします

関連するQ&A