• ベストアンサー

【EXCEL】あるセルにAという値が入力されたら既定範囲にマクロを自動実行したい

「あるセルにAという値が入力されると,既定範囲にマクロを自動実行する」ということはできますか? たとえばB2に「欠席」という値が入ったらその下のB3~B8までセルを斜線にする.     C3に「欠席」という値が入ったらその下のC3~C8までセルを斜線にする. という感じです.マクロサイトもいくつかみたのですが分かりません.お願いします.

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#02です。 >結合して斜線1本にしたかったです 結合するならこんな感じでしょう。ざっとしかテストしてませんが… ただしB3:B8の複数セルに値が入力されていると、先頭セル以外の値は消えてしまいますがよいですね。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r, trg As Range  Set trg = Intersect(Target, Range("B2:C2"))  If Not trg Is Nothing Then   For Each r In trg    If r.Value = "欠席" Then     Application.DisplayAlerts = False     r.Offset(1, 0).Resize(6, 1).Merge     Application.DisplayAlerts = True     r.Offset(1, 0).MergeArea.Borders(xlDiagonalDown) _         .LineStyle = xlContinuous    Else     r.Offset(1, 0).Resize(6, 1).MergeCells = False     r.Offset(1, 0).Resize(6, 1).Borders(xlDiagonalDown) _         .LineStyle = xlNone    End If   Next r  End If End Sub

maomao0115
質問者

お礼

できました!ありがとうございます.vbaってほんと難しいです.できたもののほとんど言語の意味がわからないので少し勉強してみます.

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

VBAが難しいという前に、質問の表現をしっかりしてください。 ーー 欠席という文字入力のセル範囲は制限しないといけないのか。 緩やかで良いのか。 何も書いてない。 >B2に「欠席」という値が入ったらその下のB3~B8までセルを斜線にする この場合B2の下の行から、8行までのように見える。 >C3に「欠席」という値が入ったらその下のC3~C8までセルを斜線 C3も含めてしまっている。 >C3に「欠席」はC2に「欠席」の誤りか。 ーー そんなことなら簡単になる Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 2 And Target = "欠席" Then '第2列が欠席なら Range(Target.Offset(1, 0), Cells(8, Target.Column)).Select Selection.MergeCells = True 'セル結合 With Selection.Borders(xlDiagonalUp) '斜線 .LineStyle = xlContinuous .Weight = xlThin End With End If End Sub でどうか。 ただしChangeイベントであるが、Cancelなど対応はしてない。

maomao0115
質問者

補足

ご回答ありがとうございます. すいません,C3はC2の間違いです. 文字入力のセル範囲も特定範囲のセルです.

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

>マクロサイトもいくつかみたのですが分かりません マクロ記録で斜線を引いてみれば、そのマクロは分かりますね。 あとは「値が入力されると」実行されるようにするだけです。いくらでも説明サイトがあると思いますが… 以下のマクロはサンプルです。シー名タブ右クリック→コードの表示で開く画面に貼り付けてください。シートに戻ってB2、C2に「欠席」と入れると斜線が引かれますが、たぶん実際のシートにあわせて修正は必要でしょう。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r, trg As Range  Set trg = Intersect(Target, Range("B2:C2"))  If Not trg Is Nothing Then   For Each r In trg    If r.Value = "欠席" Then     r.Offset(1, 0).Resize(6, 1).Borders(xlDiagonalDown) _         .LineStyle = xlContinuous    Else     r.Offset(1, 0).Resize(6, 1).Borders(xlDiagonalDown) _         .LineStyle = xlNone    End If   Next r  End If End Sub

maomao0115
質問者

補足

セルの値を変えたらできました!ありがとうございます. 1枠ずつ斜線になったのですが,結合して斜線1本にしたかったです.根本的に勉強不足のようです.ボタンを設置して簡単な背景をマクロで実行くらいしかやったことがありません.

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

シートの見出しを右クリックして"コードの表示"で表示されるエリアに 下記のマクロを貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column > 1 And Target.Row = 2 Then Target.Offset(1#).Resize(6, 1).Select Select Case Target.Value Case "欠席" With Selection.Borders(xlDiagonalDown) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Case Else Selection.Borders(xlDiagonalDown).LineStyle = xlNone End Select End If End Sub

maomao0115
質問者

お礼

ありがとうございます.コピペだけではできませんでした. それぞれの言葉の意味すらわかりませんし,勉強不足のようです.言語の1つ1つの基本的なところをおさえるところからのようです.

関連するQ&A

  • セルの値が変ると自動でマクロが実行される。

    セルの値が変ると自動でマクロが実行されるVBAを教えて下さいm(_ _ )m 例えば、シート1のA1の値が変ると、マクロAが実行される。 シート1のA2の値が変ると、マクロBが実行される。 と一つのシート内に複数のイベントを設置したのですが、イマイチわかりません。 知恵をお貸し下さい。

  • セルの値が●ならば▲のマクロを自動で実行

    エクセルで、セルの値が●ならば▲のマクロを自動で実行するということはできるのでしょうか? セルの値が●月(TODAY関数)なら、自動的に置換をするように設定したいのです。

  • マクロの自動実行などについて

    エクセル2003のVBAマクロについて質問です あるワークシートに値が入力されたら、マクロを自動実行するように出来ないでしょうか? 又、そのセルの値を別のセルにコピーしたいのですが、データを入力する度にセルの場所が ひとつ下へずれます。この最終列のセルの値を必ず拾うようにするにはどうすればよいでしょうか? ややこしくてすいません

  • 複数セルの入力内容で異なる値を返すマクロ

    次のようなマクロってどのように組めばいいのでしょうか。 例えば,A1のセルに「あ」B1に「1」C1に「2」が入力されているときにはD1に500を返す。A1に「い」B1に「2」C1がブランクのときにはD1に250を返す,のように複数のセルの入力内容によって異なる値を返したいのですが,このようなマクロってどのようにすれば組めますか。 マクロの初心者です。

  • 値によって違うマクロの実行

    表題の質問をさせていただきます。よろしくお願いいたします。 A1セルには、別シートで計算された値が転記されるようになっており、1から45までのいずれかの数値が入っています。 その数値によって異なる動きをするマクロが3個あります。  1から15の時はマクロA  16から30の時はマクロB  31から45の時はマクロC おのおののマクロはフォームのボタンから実行できるように登録してあります。 現在はA1セルの数値を見て該当するボタンを押してマクロを実行しています。 たとえばA1の値が「25」の時はマクロCが登録してあるボタンCを押しています。 そこで質問させていただきたいのは 既存のボタンを撤廃し 新たに設置するひとつのボタンで3個のマクロを制御したいと思ったのです。 新たなマクロでA1の値を取得し、そのマクロ内で既存のマクロへ割り振るためには どのような記述をすればよいのでしょうか。 よろしくお願いいたします。

  • マクロが実行されるセル範囲の変更を簡素化したい

    excel 2016を使っています。 例えば、ボタンを押すと指定したセルA1~A10までに入力されている数値を昇順に並べ替えるマクロがあるとします。 この数値が入力されているセルA1~A10の範囲をドラックして、D1~D10の位置に移動すると、マクロが実行される範囲を新たにD1~D10に指定しないとならないのですが、マクロが実行される範囲をA1~A10の範囲に固定して、別の場所に移動してもマクロを修正しなくても良い方法はありますか。

  • セルの値によって、どちらのマクロを実行するか分岐?

    ■もしも A1セルの値が 「課長」「部長」という文字列を含んでいる場合は、    ”マクロA” を実行する。 ■そうではなく、 A1セルに、 「社長」「社員」という文字列があったなrば、 ”マクロBを実行する”  ・・・というマクロを作りたいのですが、教えていただけませんでしょうか。  どうぞ、よろしくお願いいたします。  

  • エクセルでセルの値が変更されたらマクロを実行

    エクセルで、セルの値が変更されたらマクロを実行したいと考えています。 具体的には、A1のセルに何か値が入力されるか、変更されたら、 作成したマクロを実行したいと考えています。 どうしたらいいのでしょうか。 ご教授ください。 よろしくお願いします。

  • マクロの自動実行

    教えてください。 A1のセルの内容ををドロップダウンで選択するようにしてあります。 A1の内容によってB1のセルの内容を変更させたいと思っています。 通常はvlookup関数で対応するものを呼び出せばいいのですがB1セルに手動で入力することもあるので関数を書き込んで置けません。 そこでA1セルをドロップダウンで変更したときに自動でマクロ「変更」を実行して、C1セルにvlookupで呼び出してる内容をB1セルへ貼り付けできないでしょうか? よろしくお願いいたします。

  • マクロの自動実行について

    マクロの自動実行についてお伺いします。 今、エクセルに一定のデータを貼り付けたら、(例えばナンバーを元に)自動的にソートされるマクロを作ろうとしてます。 以下流れになります。 **************************** 以下貼り付け(エクセル以外からの元データ) (プログラムの詳細は分かりませんが、エクセルなどにコピペできるものらしいです。) 1|Aさん 3|Bさん 2|Cさん ~ N|XXさん ↑をエクセルをシートに貼り付けしたら、別シートにソートされて 1|Aさん 2|Cさん 3|Bさん ~ N|XXさん という表が出来上がる。 **************************** 自動実行だとworksheet_changeというイベントがあるようですが、特定の範囲なりセルなりが指定されてる場合にいきる処理のように見えます。 そんなに広範囲ではないことは予想できますが、はっきりとしたデータの範囲も量も分からない場合、ループで範囲を覚え、それをソートするのがいいのでしょうか。 ちょっと質問が曖昧な気もしますが、アドバイスお願いします。

専門家に質問してみよう