• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:実力がなくマクロがわかりません。)

実力がなくマクロがわかりません

このQ&Aのポイント
  • 実力がないため、マクロの理解ができません。
  • C列とE列の数字を比較し、同じ場合はJ列に足し合わせた数字を表示します。
  • 関数を使っても、永遠にJ列に関数をコピーする必要がありますが、マクロを利用して自動表示ができます。

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

  • ベストアンサー
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.10

こちらをどうぞ。なお、J~M列には条件付き書式が設定されるので、一日の合計以外のセルはフォントの色が白になります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim OneColumn As Range Dim OneCell As Range Application.EnableEvents = False Application.ScreenUpdating = False For Each OneColumn In Target.Columns Select Case OneColumn.Column Case 3 For Each OneCell In OneColumn.Cells If OneCell.Row > 8 Then If OneCell.Value = "" Then OneCell.Offset(0, -1).ClearContents Else OneCell.Offset(0, -1).FormulaR1C1 = "=ROW()-8" End If End If Next OneCell Case 5, 6, 7, 8 For Each OneCell In OneColumn.Cells If OneCell.Row > 8 Then With OneCell.Offset(0, 5) If OneCell.Value = "" Then .ClearContents .FormatConditions.Delete Else .FormulaR1C1 = "=IF(RC3=R[-1]C3,RC[-5]+R[-1]C,RC[-5])" .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$C$" & OneCell.Row & "=$C$" & OneCell.Row + 1 .FormatConditions(1).Font.ColorIndex = 2 End If End With End If Next OneCell End Select Next OneColumn Application.ScreenUpdating = True Application.EnableEvents = True End Sub

kkazumi
質問者

お礼

適切な回答ありがとうございます。一つうまくいかないことがありました。 セルJ8~M8に文字及び罫線等を入力すると9行目を飛ばし10行目から表示されます。 回数の所も2と表示されます。以後は11行目の回数の所は3と表示されます。 本当は9行目から表示で回数の所も1と表示したいのですので、色々と試行錯誤(ごまかし)をして 何とかできました。セルJ8~M8所だけ、図形のテキストボックスと図形の罫線を使いました。 こちらの思っていたとおりに出来ました。 色々お世話になり、また無理ばっかり言ってすみませんでした。 またVBE質問の時は、でひともよろしくお願い致します。   今回はどうもありがとうございました。 kkazumi

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (10)

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.11

> セルJ8~M8に文字及び罫線等を入力すると9行目を飛ばし10行目 > から表示されます。 > 回数の所も2と表示されます。以後は11行目の回数の所は3と表示さ > れます。 このマクロは、C、E~H列の9行目以降に入力があった時だけ実行されます。 しかも、反映されるのは入力されたセルのある行だけです。これらの列の入力済みデータのある行には反映されません。 反映させるためには再入力する必要があります。C、E~H列の入力済みデータを範囲指定して、同じ所にコピーしてください。これで再入力したことになり、他の列に反映されるはずです。 特にJ~M列では、条件付き書式を絶対参照で設定しているので、他のセルからコピーしてもうまく表示されません。

kkazumi
質問者

お礼

説明までありがとうございました。また、ほかのVBEの質問の時はよろしくお願いいたします。 今回は、どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.9

ANo.8の下から3行目のNext OneColumnの次に、以下の行を挿入してください。 Application.ScreenUpdating = True これがないと不具合が生じる場合があるようです。

kkazumi
質問者

補足

ありがとうございます。ANo.8でこちらの思っていたとおりできました。もう少しお願いできませんですか。C列が日付でJ列はE列の合計です。もう少し工夫をしようと思いました。J列の合計ですが一日の最後に表示し、それ以外の表示の色を白で表示することで見えません。こうすることで一日一日の合計みの表示となり見やすくなります。日付でE列の合計をJ列に表示しています。すみませんが、追加で日付でF列の合計をK列にまた、日付でG列の合計をL列にまた、日付でH列の合計をM列にお願いいたします。   C  E  F  G  H   J  K  L  M   1  2  3  4  5   2  3  4  5   2  1  2  3  4   2  3  4  5  6   4  6  8 10   3  1  2  3  4    3  2  4  6  8   3  1  3  5  7   3  9  8  7  6  13 17 21 25 忙しいと思いますがよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.8

ANo.7です。更に、C列とE列の同時コピー・削除にも対応するように変更しました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim OneColumn As Range Dim OneCell As Range Application.ScreenUpdating = False Application.EnableEvents = False For Each OneColumn In Target.Columns Select Case OneColumn.Column Case 3 For Each OneCell In OneColumn.Cells If OneCell.Row > 8 Then If OneCell.Value = "" Then OneCell.Offset(0, -1).ClearContents Else OneCell.Offset(0, -1).FormulaR1C1 = "=ROW(RC)-8" End If End If Next OneCell Case 5 For Each OneCell In OneColumn.Cells If OneCell.Row > 8 Then If OneCell.Value = "" Then OneCell.Offset(0, 5).ClearContents Else OneCell.Offset(0, 5).FormulaR1C1 = "=IF(RC[-7]=R[-1]C[-7],RC[-5]+R[-1]C,RC[-5])" End If End If Next OneCell End Select Next OneColumn Application.EnableEvents = True End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.7

ANo.5です。どうせなので全部書き換えてみました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim OneCell As Range Application.ScreenUpdating = False Application.EnableEvents = False Select Case Target.Column Case 3 For Each OneCell In Target If OneCell.Row > 8 Then If OneCell.Value = "" Then OneCell.Offset(0, -1).ClearContents Else OneCell.Offset(0, -1).FormulaR1C1 = "=ROW(RC)-8" End If End If Next OneCell Case 5 For Each OneCell In Target If OneCell.Row > 8 Then If OneCell.Value = "" Then OneCell.Offset(0, 5).ClearContents Else OneCell.Offset(0, 5).FormulaR1C1 = "=IF(RC[-7]=R[-1]C[-7],RC[-5]+R[-1]C,RC[-5])" End If End If Next OneCell End Select Application.EnableEvents = True End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#3の回答者です。 もう少し、人の書いたものをきちんと読んでください。 #3で、 >少し気になるのは、C列の修正はしないのかなって思います。 このように書いています。私はすでに、その問題について気がついているのです。 質問には質問のコツがあります。自分がマクロが出来るという必要性は必ずしもありません。質問して上手に回答を得るもの技術です。回答者も人です。何のコメントも付けずに解答を得られるほど、回答者は機械化してはいません。 二重・三重のイベントというものは、まったく質の違うものです。だいたい、他人のコードに貼り付けて動くっていうのは基本的には考えないでほしいものです。ピンポイントで回答を貰えば解決するとおもうほど、甘くはないってことです。 なお、以下はご質問者が書かれていない部分も含まれています。 '// Private Sub Worksheet_Change(ByVal Target As Range)  '現行では貼り付けに対するイベントは起動しません。  Dim r As Variant  Dim i As Long  With Target  If .Count > 1 Then Exit Sub  If .Row < 3 Then Exit Sub   Application.EnableEvents = False   If .Column = 3 Then    If .Value <> "" Then     .Offset(, -1).Value = .Row - 8    Else     .Offset(, -1).ClearContents    End If    EnterData .Cells, 2   ElseIf .Column = 5 Then     EnterData .Cells, 0   End If  End With  Application.EnableEvents = True End Sub Function EnterData(rng As Range, ByVal i As Long)  With rng   On Error Resume Next   If .Offset(-1, -2 + i).Value = .Offset(, -2 + i).Value Then    .Offset(, 5 + i).Value = .Offset(-1, i).Value + .Offset(, i).Value   Else    .Offset(, 5 + i).Value = .Offset(, i).Value   End If   On Error GoTo 0  End With End Function

kkazumi
質問者

お礼

色々と考えていただきありがとうございました。やっとこちらの思ったことが出来ました。

kkazumi
質問者

補足

回答ありがとうございます。C列は日付ですので修正はありません。日付ごとの合計をJ列に表示さそうと思っています。

全文を見る
すると、全ての回答が全文表示されます。
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.5

下から6行目のNextの次に、以下のマクロを挿入してください。 If Target.Column = 5 And Target.Row > 8 Then For Each rg In Target If rg.Value = "" Then rg.Offset(0, 5).Value = "" Else rg.Offset(0, 5).FormulaR1C1 = "=IF(RC[-7]=R[-1]C[-7],RC[-5]+R[-1]C,RC[-5])" End If Next rg End If

全文を見る
すると、全ての回答が全文表示されます。
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.4

こんな感じでどうですか。 Visual Basic Editorを開いて、対象のシートに次のマクロをコピーしてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim セル As Range If Target.Column <> 5 Or Target.Row = 1 Then Exit Sub For Each セル In Target If セル.Value <> "" And IsNumeric(セル.Value) Then セル.Offset(0, 5).FormulaR1C1 = "=IF(RC[-7]=R[-1]C[-7],RC[-5]+R[-1]C,RC[-5])" End If Next セル End Sub E列の複数のセルに数値をコピーする場合にも対応しています。

kkazumi
質問者

補足

もっと詳しく書かないですみません。実際は、C列の9行目にに入力するとB列に回数が入るプログラムがあります。このプログラムもOKウエーブで7、8年前に教えてもらったものです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rg As Range On Error GoTo ErrorHandler Application.EnableEvents = False For Each rg In Target 'B列、9行目より下 If rg.Column = 3 And rg.Row >= 3 Then If rg.Text <> "" Then rg.Offset(0, -1) = rg.Row - 8 '9行目より下 Else rg.Offset(0, -1) = "" End If End If Next Application.EnableEvents = True Exit Sub ErrorHandler: Application.EnableEvents = True End Sub のプログラムがあります。エンドサブの前にそちらのプログラムを書き込みましたがうまくいきません。 忙しいところすみませんが、よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

少し気になるのは、C列の修正はしないのかなって思います。 今は、E列に数字が入った時だけです。C列の修正でJ列も変化するという方法も加えると、Target.Column<> 5 の所で分岐させます。 '//シートモジュール Private Sub Worksheet_Change(ByVal Target As Range)  With Target  If .Value = "" Then Exit Sub  If .Row < 2 Then Exit Sub  If .Column <> 5 Then Exit Sub  If Application.Count(.Offset(-1, -2).Resize(2)) <> 2 Then Exit Sub   Application.EnableEvents = False   If .Offset(-1, -2).Value = .Offset(, -2).Value Then    .Offset(, 5).Value = .Offset(-1).Value + .Value   Else    .Offset(, 5).Value = .Value   End If   Application.EnableEvents = True  End With End Sub なお、バージョンにもよりますが、フィールドテーブルにしておけば、数式はコピーされるはずです。マクロは実力でなくて、経験かな?

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

これ(プログラム)がどういう場面(バッチかイベントか)で働くのか良くわかりません。まず大枠として、そういうことを説明する必要がある。 (1)データが出来上がっていて、この処理を行うのか(バッチ)(いわゆるイベントの考えはなしで良いのか。入力等されたときに対応するのか(イベント)。 >E列に数字が入った時に自動でJ列に表示さすにはマクロでやるしか、と言っているところを見ると 何処の列のセルの値がChangeしたときに、プログラムを起動すれば良いのか。 (2)>一つ前の数字を比較 C列は全て(見出し行は別にして)数字が入力されているのか。 間に文字列は無いのか。単純にー1行を見れば良いのか。 (3)全般にデータは1行前部埋まっているのか。空白列があってJ列だけは他列に比して下までデータがあるようなことは無いか。 どうも>一番最後に入力された数字、と言う表現から、そうでもないのかな これらは心配です。データ実例をシート全体的に、実例でも挙げてあれば、ある程度類推して心配せずに済むが。 ーーー C列の最終行は  Sub test01() d = Range("C65536").End(xlUp).Row MsgBox d End Sub   で捉えられるのは有名な話。Cells(d,"C")で最終行の値。 1つ前の行はCells(d-1,"C") 両者を比較すれば良い。 >E列の一番最後に入力された数字 途中行で文字入力されないならC列と同じ考え。 >J列一つ前の数字を足しJ J列のデータ最終行の一つ前の数字を足し、のことか。 以上を踏まえ質問を書き直してほしいぐらいだ。 ==== 以上、列の最終行を捉えるのもありふれたことだし、後は比較とセルに値代入だけではないか。 なぜこの質問する必要があるのかわからない。初心者だといっても。 ーー またデータ最終行を捉えるユーザー関数を作ると、関数で処理できるような内容では。

kkazumi
質問者

お礼

的確な指摘ありがとうございました。やっとこちらの思ったことが出来ました。

全文を見る
すると、全ての回答が全文表示されます。
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.1

予め、J9セルに次の数式を入力し、J10セル以降にコピーしておけばよいのでは? =IF(E9="","",IF(C9=C8,E9+J8,E9))

kkazumi
質問者

補足

最初の質問にも書いていますが、永遠にJ列に関数をコピーしないと駄目なのです。E列に数字が入った時に自動でJ列に表示さすマクロを知りたいのです。この方法ですと、コピーしたセルを越えたら、たまたコピーしないと駄目ですのでVBEでないと方法がないと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 行ごとに判定するマクロについて教えて下さい

    行ごとに判定するマクロについて教えて下さい。 下記のようなマクロで、添付ファイルのように、行ごとで E列からN列で違った数値がないか、入力されていないセルがないかを調べ 4つすべてのセルが同じ数値でない場合は塗りつぶしはされず O列にOKを表示しないようなマクロを組みたいのですが 現在のマクロだと、行ごとではなく、E3~N102セルまでの中で 同じ数値がないかを判断してしまっているため K11セルやK15セルのように数値が入力されていないにも関わらずO列の部分にOKが出てしまいます。 他の行に同じ数値が入っているのは関係なしにして 11行目なら11行目だけで 15行目なら15行目だけで、というように行ごに判定していくには どのようにすればいいでしょうか? Sub 判定マクロ回転() Dim i As Integer, j As Integer Range(Cells(3, 15), Cells(102, 15)).ClearContents For i = 3 To 102 For j = 5 To 14 Cells(i, j).Interior.ColorIndex = 0 If WorksheetFunction.CountIf(Range("E3:N102"), Cells(i, j)) > 3 Then If Cells(i, j).Row Mod 2 = 1 Then Cells(i, j).Interior.ColorIndex = 6 Cells(i, 15) = "OK" Else If Cells(i, j).Row Mod 2 = 0 Then Cells(i, j).Interior.ColorIndex = 40 Cells(i, 15) = "OK" End If End If End If Next j Next i If WorksheetFunction.CountIf(Range("O3:O102"), "OK") > 99 Then MsgBox "データチェックOK(^O^)b" End If End Sub

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

    下記の処理をエクセルのマクロで行いたいのですが、どのように記述したよいか教えてください。 4行目から入力されている行まで下記の処理をマクロで行う。 1.J列のセル入力がCIRCLEの行で、B~E列の数値が同じセル間を結合する。 2.K列のセル入力がCIRCLEの行で、F~I列の数値が同じセル間を結合する。 3.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じ場合、B列をB列の数値XC列の数値とし、B~E列のセルを結合する。 4.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じ場合、F列をF列の数値XG列の数値とし、F~I列のセルを結合する。 5.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じでない場合、B列をB列の数値XC列の数値とし、B,C列のセルを結合する。又、D列をD列の数値XE列の数値とし、D,E列のセルを結合する。 6.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じでない場合、F列をF列の数値XG列の数値とし、F,G列のセルを結合する。又、H列をH列の数値XI列の数値とし、H,I列のセルを結合する。 7.J列のセル入力がSHAPEの行で、B~E列は何もしない 8.K列のセル入力がSHAPEの行で、F~I列は何もしない

  • エクセルでマクロを作りたいのですが上手くいきません

    エクセルで会社で使うファイルを作成していますが、ファイルサイズが大きくなりすぎたので、こういうマクロが作れないかと調べていたのですが、やり方がわからないので困っています。 わからないのは、入力シートのA列にデータを入力して、シート2のB列に自動的に表示する ことを自動的にやってくれるマクロです。 今はIF関数をシート2に入力している状態ですが、セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 (IF関数をあらかじめ入力しておくセル数がとてもたくさんある為) なお、入力シートA列がブランクの場合は、シート2のB列には何も表示されないようにしたいです。 大変困っております。よろしくお願いします。 

  • エクセルで…関数かマクロか?

    エクセル2007を使っています。 3列のシートがあるとしますね。 それぞれの列は、「A 現金残高」、「B 収入」、「C 支出」とします。 たとえば、3行目から数値を入れるとします。 普通ならば、B3 (収入)のセルに 1000(円) と数字を打ち込めば、 A3 (現金残高)のセルに同じく 1000が入るよう、=B3 とすればいいと思います。 同様に、C3のセルに1000と入力すれば、 A3のセルには -1*(C3) とすることで、現金残高が収入と支出によって、 プラスマイナスされるようにし、あとで各列を∑すれば済みますね。 でも、いま僕がやりたいのは、 たとえば現金残高 A3のセルに -1000 と入力すると、自動的に C3のセルに 1000 と 表示され、A3に 1000 と入力すると、 B3のセルに 1000と表示されるようにしたいのです。 要するに、現金残高に入力した数値がプラスかマイナスかによって、 数字が表示されるセルを個別に指定し、指定したセルに計算結果を表示させたいわけです。 IF関数で、数値のプラスマイナスは判断できますが、任意のセルを指定させる方法が わかりません。 「もし…だったら 『任意のセルに』○○せよ」  というような指定はできるのでしょうか? もしくは、マクロを使わないとできないのでしょうか? いろいろサイトも調べてみましたが、力不足で回答にたどり着くことができませんでした。 よろしくご教授お願いいたします。

  • 可視セルを関数に組み込むマクロ

    Z列に関数を入力するマクロを組みたいです。 最初に、A-D列のみ表示し、E-Y列はグループ化して非表示にしており、 A、B、C、D、Z 列のみ表示されています。 セルZ1に、A1、B1を引数とする関数を入力します。 次に、グループ化を解除し、E-H列のみ表示し、A-D列、I-Y列をグループ化して非表示にし、 E、F、G、H、Z列のみ表示します。 マクロを実行すると、セルZ1に、E1、F1を引数とする関数が入力されるようにしたいです。 グループ化は4列ずつ行い、画面に表示されるのは常に5列のみで、 Z列には、「表示されている第1列と第2列」のセルを引数とする関数を入力するように したいのです。 Z列から見て、表示されている列が変わっていくため、RC形式のセルの単純な相対表示では あらわせません。 よろしくお願いいたします。

  • マクロでの条件判断について

    A行に何かデータを入力した場合、同じ列のとなりの行のセルに入力時間を残したいと思い、 例 A1:あ B1:2006/5/9/16:00 A2:い B2:2006/5/10/18:00 以下のマクロを教えて頂いたのですが、 Private Sub Worksheet_Change(ByVal Target As Range) '///A列のセル以外ならマクロ終了/// If Target.Column <> 1 Then Exit Sub '///1行目のセルならマクロ終了/// If Target.Row = 1 Then Exit Sub '///内容がブランクならB列のセルをブランクにする。/// If Target.Value = "" Then Target.Offset(0, 1).Value = "" Else Target.Offset(0, 1).Value = Format(Date + Time, "yyyy/mm/dd hh:mm:ss") End If End Sub A列以外にもC列に入力した値の入力時間をD列にE列に入力した値の入力時間をF列にと、全部で6箇所値を入力したとなりのセルに入力時間が出るようにしたかったのですが、 '///A列のセル以外ならマクロ終了/// If Target.Column <> 1 Then Exit Sub の部分を '///A,C列のセル以外ならマクロ終了/// If Target.Column <> 1 Or Target.Column <> 3 Then Exit Sub のように変更してまずはA列とC列に値を入れて挑戦したのですが、時間が表示されなくこまっておりました。 解決方法をご存知のかたがいらっしゃいましたら、ぜひよろしくお願いいたします。

  • 【マクロ】クリックすると空白を含む列を非表示に

    上司にExcelのデータが見づらいと言われて困っています。 下記のようなマクロやVBAを教えていただけないでしょうか? 例えば、 A2のセルをクリックすると、その行(2行目)から空白セルを検索して、そのセルを含む列を非表示にして、データが入っている列だけを表するようなマクロってないでしょうか? (要は、C2とE2が空白セルのとき、A2をクリックして、A/B/D/F~の列だけ表示されるようになるマクロです。 同様に3行目でも、空白セルがB3、C3なら、A3をクリックした時、A/D/E…列だけ表示されて、B・C列が非常時になるような。) 似たような機能があれば、A2クリックでなく別にボタン等を作っても構いません。 ややこしくて、申し訳ございませんが、本当に困っているので、 どうかよろしくお願いいたします。

  • マクロで可視セルのみの削除

    A行に数字を入れ、B行にA行同列セルの数字に対して 数値を返す数式を入れています。 B行は非表示にしています。 (C・D行、E・F行・・・とも同じ処理) 数字を入力する範囲(A、C、E・・・)を選択し、 入力されている数字を消去するようマクロを組みました。 (範囲選択→ツールの編集→ジャンプ→可視セルを選択後、Delete) これはうまく作動します。 が、数式が壊れるのを防ぐ為、念には念を・・・と、 入力範囲部分はセルの書式設定で保護ロックを外し、 シートを保護しました。 そうすると、保護されているからだめ!と エラーが出て、マクロが作動しません。 (可視セル選択部分にデバッグがでます。) ・非表示のセルがある ・一部を除きシートを保護している 状態で、マクロで可視セルのみ削除することは不可能なんでしょうか? 宜しくお願いします。

  • 参照した数値を関数に代入し計算する方法

    手動で数字を入力するセル(C1)に入れた数字と同じ数字を 規則的に数字が書いてある(例;1~100)A列から探し A行の隣に書いてあるB行の数字(A1だったらB1)を 参照し関数の入っているセル(E1)にBの値を入れてExcelで 計算するような方法(マクロになるようなら貼り付ければできる形)を 教えて下さい(B1の値が直接使えないならD1というA行の隣から探した Bの数字を表示するセルを作る形でも可) 例えばC1に10といれA行から10と書かれているA6のセルを検索し その隣のB6のセルから20という数値を参照し、E1に書いてある 例えば=IF(X(B6)<45,Y(例;F1)*1.5,IF(45<X(B6),Y(例;F1)*2)) のような関数のXに代入する感じです(Y(F1)の数字は適当なセルの値) 上手く説明できていないかもしれませんが宜しくお願いいたします

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

    J列、K列に入力されている行まで下記処理を行うマクロの記述を教えてください。 J列のセルの文字列がにSHAPEの場合、その行のB~E列のセルの色を黄色にする。 K列のセルの文字列がにSHAPEの場合、その行のF~I列のセルの色を黄色にする。