マクロ困っています

このQ&Aのポイント
  • マクロ作成中に発生しているFINDエラーの解決方法を教えてください。
  • セルの書式設定をユーザー定義にして時間のみ表示しています。
  • スケジュール表の特定の列で時間を検索する際にエラーが発生しているようです。
回答を見る
  • ベストアンサー

マクロ 困っています

いつも回答して頂き、感謝しています。 作りかけで全然出来ていないんですが、 下記の文のFINDの箇所でエラーが発生します。 原因が分からないので、どうしたら解消されるか教えて頂けないでしょうか? 宜しくお願い致します。 ちなみにFINDで検索している行の最初の列は下記の数式が入力されています。 =FLOOR(NOW(),"1:00") 隣の列から下記の式が入力されています。 =RC[-6]+TIME(1,0,0) セルの書式設定のユーザー定義で時間だけ表示するようにしています。 Option Explicit Sub スケジュール表作成() Dim 始点 As Date, 終点 As Date, 開始 As Date, 終了 As Date Dim 開始c As Integer, 終了c As Integer Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Worksheets("スケジュール表") 始点 = ws1.Cells(3, 3).Value 終点 = ws1.Cells(3, 249).Value 開始 = Application.WorksheetFunction.Floor(ws1.Cells(10, 2), (1 / 24)) If 始点 <= 開始 And 開始 <= 終点 Then 開始c = ws1.Rows(3).Find(what:=開始, LookIn:=xlValues, lookat:=xlWhole, _ searchorder:=xlByColumns, searchdirection:=xlNext).Column End If End Sub

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 エラーの原因に関しては下記の参考URLのページを御覧下さい。 【参考URL】  [XL2000]Findメソッドで日付と時刻形式のデータを検索できない【日本マイクロソフト サポート】   https://support.microsoft.com/ja-jp/kb/416317/ja  又、それとは別の話として、時刻の情報を含んでいるデータを扱う際には、FLOOR関数やCEILING関数等の切り捨てや切り上げを行う関数を使う事は出来るだけ避けた方が良いと思います。  また、"1:00"の様な時・分・秒単位の情報を含んている値を、数回程度であれば兎も角、何度も重複して加減乗除を行う事も出来るだけ避けた方が良いと思います。  Excelでは日時のデータを扱う際に「基点である1900年1月1日0:00:00を数値の1として日単位の数値」であるシリアル値で表しており、時刻の様な1日未満の値は「コンマ何日」なのかという小数値で表しています。  例えば3:00は8分の1日なのでシリアル値は0.125、1900年1月2日6:00のシリアル値は2.25という具合です。  処が1:00では24分の1日なのでシリアル値は0.0416666666666666・・・という無限小数となってしまいます。  この様に時刻によっては無限小数で表さなければならない値も多いのですが、Excelでは数値の有効桁数を15桁までしか扱いませんので、無限小数を扱う際には正確に取り扱う事は出来ず、僅かながら誤差を含んだ値となります。  そのため、無限小数である日時のデータ同士の間でFLOOR関数やCEILING関数などを使用しますと、日時のデータの組み合わせによっては誤った計算結果が表示されてしまう場合があります。 【参考URL】  http://www.h3.dion.ne.jp/~sakatsu/TimeSerial_Error.htm  http://www.primestaff.co.jp/fumitaka_doc/2009/01/excel-floor-1.html  ですから、もし、1時間未満の端数を切り捨てた「日付+時刻」の値を求めるのでしたら、 =FLOOR(NOW(),"1:00") というのは止めて、 =(TEXT(NOW(),"yyyy/m/d h")&":0")+0 等の様にされるべきかと思います。  同様に 開始 = Application.WorksheetFunction.Floor(ws1.Cells(10, 2), (1 / 24)) というのは止めて、 With ws1.Cells(10, 2) 開始 = Int(.Value)+TimeSerial(Hour(.Value),0,0) End With とされるべきかと思います。  それで、御質問の件の解決方法ですが、まず、念のためにR3C3セルに入力する関数を次の様にして下さい。 =(TEXT(NOW(),"yyyy/m/d h")&":0")+0  又、同じく念のためにR3C4以降のセルに入力する関数を次の様にして下さい。 =(TEXT(RC[-6]+1/24,"yyyy/m/d h")&":0")+0  そして肝心のVBAに関してですが、Findメソッドを使ったために話がややこしくなったのですから、Findメソッドを使わずに済ませた方が良いのではないかと思います。  例えばMatch関数を使えば次の様になります。 Sub スケジュール表作成_改() Dim 始点, 終点 As Double Dim 開始c As Integer Dim ws1 As Worksheet Dim 検索値 As Variant 'Set ws1 = Worksheets("スケジュール表") Set ws1 = Worksheets("Sheet18") 始点 = ws1.Cells(3, 3).Value 終点 = Application.WorksheetFunction.Max(ws1.Rows(3)) 検索値 = ws1.Cells(10, 2).Value 開始c = 0 If IsDate(検索値) Then 検索値 = CDbl(検索値) + 0.000001 If 始点 <= 検索値 And 検索値 < 終点 + 1 / 24 Then 開始c = Application.WorksheetFunction.Match(検索値, ws1.Rows(3)) End If End If If 開始c = 0 Then MsgBox "現在、スケジュールが設定されているのは" & Chr(13) & _ Format(始点, "yyyy/m/d h:mm:ss") & "~" & Format(終点 + TimeSerial(0, 59, 59) _ , "yyyy/m/d h:mm:ss") & Chr(13) & "の範囲のみです。" _ , vbInformation, "スケジュール範囲外" End If End Sub  尚、 検索値 = CDbl(検索値) + 0.000001 の所で0.000001を加えているのは、万が一、有効桁数15桁の末尾の所で誤差が出たとしても検索結果自体には影響しない様にするためで、あくまで念の為に付け加えただけであり、もしかしますと必要が無いものである可能性もあります。  又、もしR10C2セルに入力されている日時がスケジュール表に記入されている期間の範囲外であった場合には、Msgboxによって期間外である事を御知らせする様にしております。  因みに、他にもやり方は色々あると思います。  例えば、1時間ごとに6列ずつ列がずれる事が決まっているのですから、何も3列目のセルに入っている値を検索対象にせずとも、R10C2セルに入力されている日時と、R3C3セルに入っている日時の間に何時間分の時間差があるのかを求めて、それを6倍すればC3セルとの列数の差を求める事が出来ます。 Sub スケジュール表作成_改2() Dim 始点, 終点 As Double Dim 開始c As Integer Dim 始点セル As Range Dim ws1 As Worksheet Dim 検索値 As Variant Set ws1 = Worksheets("スケジュール表") Set 始点セル = ws1.Cells(3, 3) 始点 = 始点セル.Value 終点 = Application.WorksheetFunction.Max(ws1.Rows(3)) 検索値 = ws1.Cells(10, 2).Value 開始c = 0 If IsDate(検索値) Then 検索値 = CDbl(検索値) + 0.000001 If 始点 <= 検索値 And 検索値 < 終点 + 1 / 24 Then 開始c = 始点セル.Column + Int((検索値 - 始点) * 24) * 6 End If End If If 開始c = 0 Then MsgBox "現在、スケジュールが設定されているのは" & Chr(13) & _ Format(始点, "yyyy/m/d h:mm:ss") & "~" & Format(終点 + TimeSerial(0, 59, 59) _ , "yyyy/m/d h:mm:ss") & Chr(13) & "の範囲のみです。" _ , vbInformation, "スケジュール範囲外" End If End Sub

kero1192kero
質問者

お礼

返事が遅れて申し訳ありませんでした。 色々細かな事まで教えて頂き、ありがとうございました。 オートフィルターの時も色々考えて、ここに質問した記憶があります。 時間の検索って難しいですね。 教えてもらった記述をベースに考えていこうかと思います。 大切な時間を割いて、色々教えて頂きありがとうございました。 たぶん、ここに質問すると思うので、時間があればまた教えて下さい。

その他の回答 (1)

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.1

検索日の列番号を取得したいという事で良いのでしょうか。 findシート関数を使用しないで、do~loopとDateDiffで開始日と検索日の差が0時間の場合れ列番号を開始cに取得する方法で良ければ下記はその一例です。 検索は249列目までとしています。検索日が見つからない場合は検索cは0となります。 Sub スケジュール表作成() Dim 始点 As Date, 終点 As Date, 開始 As Date, 終了 As Date Dim 検索日 As Date Dim 開始c As Integer, 終了c As Integer Dim ws1 As Worksheet, ws2 As Worksheet Dim i As Integer Dim find_value As Double Dim cell_value As Double Set ws1 = Worksheets("sheet1") 始点 = ws1.Cells(3, 3).Value 終点 = ws1.Cells(3, 249).Value 開始 = Application.WorksheetFunction.Floor(ws1.Cells(10, 2), (1 / 24)) i = 3 Do While i < 250 検索日 = Application.WorksheetFunction.Floor(ws1.Cells(3, i), (1 / 24)) If DateDiff("h", 開始, 検索日) = 0 Then 開始c = i Exit Do End If i = i + 6 Loop End Sub

kero1192kero
質問者

お礼

返事が遅れてすみませんでした。 繰り返し記述で目的の列まで辿りつく方法もあるんですね。とても参考になりました。 ですが、もう一人の方が繰り返し記述ではなく、もっと早い方法で検索する方法を教えてくれたので、今回はその方の方法でやろうかなと思います。 今回の質問に大切な時間を割いて頂き、ありがとうございました。 たぶん、また違う内容で質問する時があると思いますので、その時は宜しくお願い致します。

関連するQ&A

  • マクロが動作しない

    Office2003にバージョンアップすると動作しないマクロが出ました。ちゃんと動作するものもあります。 内容は変更していないので内容はあってるはずですが 念のためコピーします。 Sub 電装品() Dim Gyou As Integer Dim Gyouz As Integer Dim State As Integer Dim Statez As Integer Dim CelValue As String Dim CelValuez As String Dim CopyCelNo As String Dim CopyCelNoz As String Dim WS1 As Object Dim WS2 As Object Set WS1 = Worksheets("購入品リスト") Set WS2 = Worksheets("電装品リスト") WS2.Range("A:G").Delete Shift:=xlToLeft WS2.Range("B1") = "電 装 品 リ ス ト" With WS2.Range("B1") .Font.Bold = True .Font.Italic = True .Font.Size = 24 End With WS2.Range("D1") = "作成日:" & Date WS1.Range("C3:E3").Copy (WS2.Range("A2:C2")) State = 3 For Gyou = 1 To 2000 CopyCelNo = "A" & State CelValue = WS1.Cells(Gyou, 17).Value If CelValue = "1" Then WS1.Range(WS1.Cells(Gyou, 3), WS1.Cells(Gyou, 5)).Copy (WS2.Range (CopyCelNo)) State = State + 1 End If Next WS1.Range("G3:J3").Copy (WS2.Range("D2:G2")) Statez = 3 For Gyouz = 1 To 2000 CopyCelNoz = "D" & Statez CelValuez = WS1.Cells(Gyouz, 18).Value If CelValuez = "1" Then WS1.Range(WS1.Cells(Gyouz, 7), WS1.Cells(Gyouz, 10)).Copy (WS2.Range (CopyCelNoz)) Statez = Statez + 1 End If Next End Sub

  • マクロが思うように動きません

    エクセル2007です。 初心者です。 マクロが思うように動きません。 指定のセルが空白の場合、msgboxを表示して、処理を抜ける 空白でない場合は、処理をつつける。 と言う事をしたいです。 with~の後が問題だと思うのですが・・ Sub 受注履歴書き込み() Dim ws01 As Worksheet, ws02 As Worksheet Dim r As Long, c As Integer, tmp As Long Set ws01 = Worksheets("受注書") Set ws02 = Worksheets("受注履歴") ws01.Activate With ws01 If .Range("C2").Value = "" _ And .Range("M2").Value = "" _ And .Range("M11").Value = "" _ And Worksheets("粗利報告書").Range("D3").Value = "" Then MsgBox "受注Noが空白です。処理を中止します。" Exit Sub ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 ws02.Activate End If End With End Sub 採点願えますでしょうか? 宜しくお願い致します。

  • エクセルのマクロについて

    下記のようなプログラム組んでいます。 Sub 張付() Sheets("一覧表").Select Dim i As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("一覧表") Set ws2 = Worksheets("データー") For i = 5 To ws2.Cells(Rows.Count, 1).End(xlUp).Row ws1.Range("B5") = ws2.Cells(i, 2)    'セルB5に氏名を入力 ws1.Range("C5") = ws2.Cells(i, 3)    'セルC5に年齢を入力 ws1.Range("D5") = ws2.Cells(i, 4)    'セルD5に電話番号を入力 この後、 ws1.Range("B5")のB5をB6にまた、C5はC6に改行してそれぞれデーターを移していきたい のですが、B5をB6に順次プラスする方法を教えて下さい。 よろしくお願いいたします。

  • ファイルオープン時のマクロが一部実行されない

    いつも回答して頂き、ありがとうございます。感謝感謝です。 ファイルオープン時にApplication.Runで3つのマクロを実行させているのですが、最後のマクロだけ実行されません。どうしてでしょうか?もしかして、前の2つで『一覧シート』を除外するマクロを実行しているからでしょうか?御指導の程宜しくお願いいたします。 1番目に実行するマクロ Sub 特定のシート以外の最終履歴と次回予定日を算出する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .FormulaR1C1 = "=MAX(R8C:R10000C)" If .Value = 0 Then .Value = "履歴無し" ws.Cells(7, c).ClearContents Else .Value = .Value ws.Cells(7, c) = DateAdd("d", ws.Cells(5, c), DateAdd("m", ws.Cells(4, c), DateAdd("yyyy", ws.Cells(3, c), ws.Cells(6, c)))) End If End With c = c + 1 Loop End If End If Next End Sub 2番目に実行するマクロ Sub 期限の未達と到達を色で分ける() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Long Dim res As Variant For c = 3 To ws.Cells(7, Columns.Count).End(xlToLeft).Column If IsDate(ws.Cells(7, c)) Then If ws.Cells(7, c) > Date Then res = 8 Else res = 3 End If Else res = xlNone End If ws.Cells(7, c).Interior.ColorIndex = res Next c End If End If Next End Sub 3番目に実行するマクロ Sub 各シートの情報を一覧へ転記する() Dim d As Integer Dim retu As Integer d = 3 Do While Cells(d, 2).Value <> "" With Worksheets(Worksheets("一覧").Cells(d, 2).Value) .Activate retu = .Range("IV7").End(xlToLeft).Column .Range(Cells(7, 3), Cells(7, retu)).Copy End With With Worksheets("一覧") .Activate Cells(d, 3).PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End With d = d + 1 Loop End Sub

  • エクセル:マクロの手直し

    お世話になります。 以前ここで教えてもらったマクロのシート名のつけ方をすこし手直ししたいのでアドバイスください。 以下のマクロは、1シート目を決まった行数分に分割し各シートに振り分けるものです。今のマクロではシート名は分割1、分割2…分割10…などなりますが、Worksheets(1) のシート名+3桁の連番(001,002…010…)などとしたい。 Worksheets(1) のシート名が「総務課」の場合、総務課001,総務課002…総務課010…となるのが理想です。 このようにするためにはマクロをどのように修正すればよいか教えてください。 Sub シート分割()  Dim WS1 As Worksheet  Dim WS2 As Worksheet  Dim i As Integer  Dim Bunkatsu As Integer  Set WS1 = Worksheets(1) 'コピー元のデータシート  Set WS2 = WS1  Bunkatsu = 1  Application.ScreenUpdating = False  For i = 7 To WS1.Cells(Rows.Count, 1).End(xlUp).Row Step 25   Set WS2 = Worksheets.Add(After:=WS2)   WS2.Name = "分割" & Bunkatsu   WS1.Rows("1:6").Copy WS2.Cells(1, 1)   WS1.Rows(i & ":" & i + 24).Copy WS2.Cells(7, 1)   Bunkatsu = Bunkatsu + 1  Next  Application.ScreenUpdating = True End Sub

  • マクロ Date関数の使用中に・・・・

    未来の日付を算出するなかで、起算日(C6セル)にyyyy/m/d以外の情報が入っている場合エラーがかかってしまいます。何故、yyyy/m/d以外の情報が入るかと申しますと、前段階のマクロ処理の中で選択範囲の中に『0 ゼロ』が含まれている場合、履歴無しと入力されてしまうからです。 この場合、前段階のマクロを修正した方が良いのでしょうか?それとも以下のマクロを修正するだけでOKなのでしょうか?御指導お願いします。 Sub シート単位で周期到達日を繰り返し算出する() Dim c As Integer c = 3 Do While Cells(2, c).Value <> "" Cells(7, c) = DateAdd("yyyy", Cells(3, c), Cells(6, c)) Cells(7, c) = DateAdd("m", Cells(4, c), Cells(7, c)) Cells(7, c) = DateAdd("d", Cells(5, c), Cells(7, c)) c = c + 1 Loop End Sub 一応、前段階のマクロ処理を記載しときます。 Sub 一覧以外の全シートの最終履歴を表示する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .NumberFormatLocal = "G/標準" .Value = Application.WorksheetFunction.Max(ws.Range(ws.Cells(8, c), ws.Cells(10000, c))) .Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole .NumberFormatLocal = "yyyy/m/d;@" End With c = c + 1 Loop End If Next End Sub

  • マクロ実行中エラーが発生する

    いつも回答して頂きありがとうございます。 ws.Cells(7, c).ClearContentsの箇所で『excel2010』ではエラーが発生しませんでしたが、『excel2003』ではエラーが発生しました。(オブジェクトが・・・・みたいなコメント有。)原因は何でしょうか?御指導の程宜しくお願い致します。 Sub 特定のシート以外の最終履歴と次回予定日を算出する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .FormulaR1C1 = "=MAX(R8C:R10000C)" If .Value = 0 Then .Value = "履歴無し" ws.Cells(7, c).ClearContents'ここでエラーが発生 Else .Value = .Value ws.Cells(7, c) = DateAdd("d", ws.Cells(5, c), DateAdd("m", ws.Cells(4, c), DateAdd("yyyy", ws.Cells(3, c), ws.Cells(6, c)))) End If End With c = c + 1 Loop End If End If Next End Sub

  • マクロ エクセル2003 Sort

    いつも回答して頂きとても感謝しています。 エクセル2010で作成した記述を、ほぼそのままエクセル2003に書き写し実行した所、Sortの箇所でエラーが発生しました。 これはLoop中に実行しており、Loop1回目はエラーは発生しませんでしたが、Loop2回目ではエラーが発生しました。 確認の為、エクセル2010で実行した所、エラーは発生しませんでした。 いまいち原因が分からないので、間違いや抜けている箇所があれば教えて下さい。宜しくお願い致します。 問題のマクロの記述を一部下記に記載。 ※問題の記述の箇所は一番下にあります。 Dim 開始1 As Date, 開始2 As Date, 開始3 As Date Dim 終了1 As Date, 終了2 As Date Dim 最初 As Date, 最後 As Date Dim Path1 As String, Path2 As String Dim Buf1 As String, Buf2 As String Dim File As String Dim 日付c As Long Dim 項目c1 As Long, 項目c2 As Long Dim c As Long Dim MaxR As Long, MaxC As Long Dim wb As Workbook Dim ws1 As Worksheet Dim ws2 As Worksheet On Error GoTo errhandle 開始1 = InputBox("yyyy/mm/dd", "開始日設定画面") On Error GoTo 0 If 開始1 > Date Then MsgBox "現在の日付より開始日の方が新しい為検索出来ません。" Exit Sub End If On Error GoTo errhandle 終了1 = InputBox("yyyy/mm/dd", "終了日設定画面") On Error GoTo 0 If 終了1 > Date Then MsgBox "現在の日付より終了の日付の方が新しい為検索出来ません。" Exit Sub ElseIf 開始1 >= 終了1 Then MsgBox "現在の日付より終了の日付の方が新しい為検索出来ません。" Exit Sub End If 開始2 = 開始1 If Day(開始1) >= Day(終了1) Then 終了2 = DateAdd("m", 1, 終了1) Else 終了2 = 終了1 End If Set ws2 = Workbooks("アラーム収集").Worksheets("アラーム履歴一覧") MaxR = ws2.Cells(Rows.Count, 2).End(xlUp).Row If ws2.Cells(3, 3) <> "" Then ws2.Rows("3:" & MaxR).ClearContents End If Do Until 開始2 >= 終了2 File = "aaa " & Format(開始2, "yyyy年m月") Path1 = "C:\Users\Owner\Documents\" Path2 = "C:\Users\Owner\Documents\" & Format(開始2, "yyyy年") & "\" If Dir(Path1 & File & ".xlsx") <> "" Then Buf1 = Dir(Path1 & File & ".xlsx") For Each wb In Workbooks If wb.Name = Buf1 Then MsgBox Buf1 & vbCrLf & "はすでに開いています", vbExclamation Exit Sub End If Next wb Workbooks.Open Filename:=Path1 & File & ".xlsx" ElseIf Dir(Path2 & File & ".xlsx") <> "" Then Buf2 = Dir(Path2 & File & ".xlsx") For Each wb In Workbooks If wb.Name = Buf2 Then MsgBox Buf2 & vbCrLf & "はすでに開いています", vbExclamation Exit Sub End If Next wb Workbooks.Open Filename:=Path2 & File & ".xlsx" Else MsgBox (File & "が存在しません!!") Exit Sub End If Set ws1 = Workbooks(File).Worksheets("アラーム履歴") If 開始1 = 開始2 Then 最初 = 開始1 Else 最初 = Format(開始2, "yyyy/m/1") End If If 終了1 < Format(DateAdd("m", 1, 開始2), "yyyy/m/d") Then 最後 = 終了1 Else 開始3 = Format(開始2, "yyyy/m/1") 最後 = DateAdd("d", -1, DateAdd("m", 1, 開始3)) End If With ws1 MaxR = .Cells(Rows.Count, 2).End(xlUp).Row MaxC = .Cells(2, Columns.Count).End(xlToLeft).Column 日付c = .Rows(2).Find(what:="発生日時", LookIn:=xlValues, _ lookat:=xlWhole, searchorder:=xlByColumns, _ searchdirection:=xlNext).Column .Range(.Cells(2, 日付c), .Cells(MaxR, MaxC)).Sort _             ←  問題の箇所 Key1:=.Cells(2, 日付c), order1:=xlAscending, Header:=xlYes

  • エクセルマクロに関する質問

    最近、エクセルマクロを始めてたのですが、下記のような状態で困っています。 プログラムを実行した際に、Cells((I1 + I5), I6)のセルに計算式がはいって欲しいのですが、 現状では計算結果が入るだけになってしまっています。 また、単純に文字列に変換してしまうだけだと、変数が邪魔になって式になってくれません。 誰かお分かりになる方がいましたら、教えてください。  Dim I1 As Integer Dim I2 As Integer Dim I3 As Integer Dim I4 As Integer Dim I5 As Integer Dim I6 As Integer Dim I7 As Integer Dim I8 As Integer Cells((I1 + I5), I6) = Cells((I1 + I5) - 2, I6) + Cells((I1 + I5), I6 - 2) - Cells(I1 + I5, I6 - 1)

  • エクセルの簡単なマクロ機能を追加したいのです

    既存のエクセルマクロ(Sub チェック()以下です)に下記の内容のマクロを付け足したいです。 教えていただけないでしょうか。 付け足したい条件です:  Sheet2のC列に 0  があれば  Sheet1のB列に 愛 と([太字]でセルの背景色を[灰色25%]にして)入れたいです 恐れ入りますがご存じの方がいらっしゃりましたら教えていただきたく何卒よろしくお願いいたします。 ----------------------------------------------- Sub チェック() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c1 As Range Dim c2 As Range Dim myCt As Long Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") Set myRange1 = Ws1.Range("A1", Ws1.Cells(Rows.Count, "A").End(xlUp)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(Rows.Count, "A").End(xlUp)) For Each c1 In myRange1 myCt = 0 For Each c2 In myRange2 If c2.Value = c1.Value Then If c2.Offset(, 1).Value = "" Then c1.Offset(, 1).Interior.ColorIndex = 3 Else c1.Offset(, 1).Value = c2.Offset(, 1).Value End If myCt = myCt + 1 End If Next c2 If myCt > 1 Then c1.Offset(, 1).Interior.ColorIndex = 10 Next c1 Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub

専門家に質問してみよう