• ベストアンサー

Worksheet_Changeについて

A列1~10のセルそれぞれに「A」と入ると右側2つのセルに色がつき 「B」と入ると右側5つのセルに色がつくようにしたいのですが・・Worksheet_Changeの使い方が良く判りません。 過去の質問や他のHPも調べて見ましたが・・ まだ超初心者なのでよく理解できてないのです。 出来れば分かりやすく教えていただけませんか?宜しくお願い致します。

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

  • ベストアンサー
回答No.4

>Alt+F11で挿入「標準モジュール」ですよね? ワークシートのイベントですので、標準モジュールでは動きません。もちろん、ワークシートのコードから標準モジュールのコードを呼び出すことは可能ですが。 プロジェクトのツリーで、標準モジュールの上のほうに、”Microsoft Excel Objects”が表示されていて、その配下にシート名が表示されていますよね。 操作対象にしたいシートの所に、プログラムコードを記述して下さい。

pco1633
質問者

お礼

きゃぁ~うごいたぁ♪ ありがとうございますぅぅ(^▽^) 変だと思ってたんです!そうか、そういう事だったんですね!! rotesKometさん、こんな超初心者に気長に付き合って頂いてありがとうございます!!

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

その他の回答 (3)

回答No.3

補足を書いておきますと Target.Row,Target.Column では直前に操作したセルの行番号と列番号が取得できます。 例えば、"A8"に値を入力した場合、Target.Rowは 8、Target.Columnは 1になります。 Target.Cells(1, 1).Value では直前に操作したセルの値が取得できます。セルに"C"と値を入力した場合、Target.Cells(1, 1).Valueは"C"になります。Target.Valueでも値は取得できますが、複数セルが対象となった場合にエラーになります(複数セルを選択して値を削除したときなど)。 Range(セル1, セル2)で複数のセルを対象とできます。 ActiveSheet は今選択されているシートです。 対象の範囲.Interior.ColorIndex = カラーパレット番号 で、対象の範囲の背景色を変更できます。

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

下記の感じでいかがでしょうか? 急いで作ったので少し汚いですが Targetという引数に直前に操作したセル範囲が渡ってきますので、そこから情報を取得しています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim lngTargetRow As Long Dim lngTargetCol As Long Dim vntCellValue As Variant '操作セルの行番号と列番号を取得 lngTargetRow = Target.Row lngTargetCol = Target.Column 'セルがA1~A10の時 If lngTargetRow >= 1 And lngTargetRow <= 10 And lngTargetCol = 1 Then '操作セルの値を取得 vntCellValue = Target.Cells(1, 1).Value '操作セルの値により分岐 Select Case vntCellValue 'Aの時 Case "A" '右側2つのセルの色を変更 Range(ActiveSheet.Cells(lngTargetRow, lngTargetCol + 1), ActiveSheet.Cells(lngTargetRow, lngTargetCol + 2)).Interior.ColorIndex = 6 'Bの時 Case "B" '右側5つのセルの色色を変更 Range(ActiveSheet.Cells(lngTargetRow, lngTargetCol + 1), ActiveSheet.Cells(lngTargetRow, lngTargetCol + 5)).Interior.ColorIndex = 7 End Select End If End Sub

pco1633
質問者

補足

ありがとうございます!!すいません、こんなに丁寧に。。 すいません、ほんとはじめたばかりで超初心者で申し訳無いです・・・コンパイルしてエラーは出ないのですが、実際に動かないんです。なぜですか? 根本的に何か間違ってますか? Alt+F11で挿入「標準モジュール」ですよね?

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

VBA を使用して実現しなければならないのでしょうか? 条件付書式を使えば簡単にできますが。

pco1633
質問者

補足

実は・・本当はもっと条件が複雑で条件付書式では対応出来ないのです。ですのでVBAでと頑張っているのですが・・説明がわかりにくくてすいません。 Worksheet_Changeの例はいくつか見たのですが、わからなくて・・・宜しくお願いします(ぺこり

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

関連するQ&A

  • linkとWorksheet_Change

    LINK してあるセルを ターゲットにして Worksheet_Change をとっても 反応しない。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub   Msg = MsgBox("bが変更されました。", vbOKCancel)   tensou この$B$2は 他の部分からデータを得ています。時間でこのセルの値が自動で変化するのですが Worksheet_Change 起きないのか、捉えられないのか、分かりかねますが その下$B$3に =$B$2 もしくは =Value($B$2) で 飛ばして Target.Address <> "$B$3"にしても 同じ。 このLINKした セルの Worksheet_Change イベントを ひらう方法を お教え願えませんでしょうか IF 分を =で置き換えても同じでした。

  • worksheet_changeの無効化

    worksheet_changeを使って、特定のセルの値が変更されたときに、処理をしています。 例えば、セルA1が変更されたときに3万回のセルに値を入力する繰り返し操作をするマクロを書いていると 1回目のセルに入力される操作をしたときにworksheet_changeがおそらく反応しています。 3万回のセルに値を入力する繰り返し操作中だけ、worksheet_changeが起きないようにはできないでしょうか?

  • WorkSheet _Change について

    いつもお世話になっています。 今、セルにある特定の文字列が入力されたら、セルの色を変えるという処理を作成しています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sTitle As String sTitle = Target.Value If sTitle = "aaa" Then Target.Interior.ColorIndex = 16 End If End Sub コードはこんな感じです。(動作確認済み) たしかに特定の文字列を察知してシートの色を変えることはできるんですが、今作成しているものは随時セルの中身が更新されるのです。 そこで、別の文字列が入力されたら(もしくは文字列が削除されたら)もとの白色に戻る、という処理はできますでしょうか。

  • worksheet_changeがループする

    worksheet_change イベントでの質問です。シートに文字が入力された時に、他のセルに値をコピーしたいのですが、一つ目の値を代入した時点で、再びchangeイベントが発生して、この関数の頭に戻ってしまいます。実行中は、changeイベントを発生しないようにできないのでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i, j As Integer j

  • WorkSheet _Change を使って

    たびたびお世話になります。 worksheet_changeを使うマクロを作成しています。 sheet1で入力されたデータがsheet2にあるデータベースの文字と一致した場合、sheet1の該当セル(入力した部分)の色を変えます。 もしそのセルの内容が変更、削除された場合は塗りつぶしなしに戻します。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sTitle As String sTitle = Target.Value If sTitle = "aaa" Then Target.Interior.ColorIndex = 7 Else Target.Interior.ColorIndex = xlNone End If End Sub このコードで、「aaaという文字を入れたら色を変える/削除・変更されたらは塗りつぶしなし」という動作はできました。 しかしその後、aaaに当たる項目が増え、項目自体を変更する可能性も増えたので、上記のように別シートにデータベースを作ることにしたのです。 このコードを基にしてプログラムを組んだのですが、うまく参照が出来てないようでコンパイルエラーになってしまいます。 アイディアでも良いのでアドバイスをお願いします。

  • エクセルのPrivate Sub Worksheet_Change

    エクセルのPrivate Sub Worksheet_Change すいません。どうやっても動作しません。 シート1のB5のセルに英数字を入力しエンターを押して確定すると シート2のC列から同レコードを検出し、その検出された行のB~E列の値を シート1のH4、H5、H6、J7に値をかえします。 またB5の値はH8にも表示されます。 データがあった場合には、シート1のH4、H5、H6、J7に値が表示されています。 シート2にデータが無い場合はシート1のH4、H5、H6、J7には「#N/A」と表示されます。 ここまでは関数と計算式なのでマクロではありません。 ここでフォームで作成した「印刷ボタン」をクリックします。 すると「印刷ボタン」に登録したマクロが起動します。 シート1のセルG4~J11までが印刷されます。 マクロの内容は シート1のH4に「#N/A」が表示されている場合はメッセージボックスで 「データがありません」と出ます。印刷は実行されません。 H4が「#N/A」以外の場合は印刷が実行されますがその前に シート3のセルA1の数値をプラス1してシート3のB2に、セルA1の値の先頭にAを付けて 表示します。(セルA1が0002ならB1はA0002) それがシート1のH12に表示されます。(H12への表示は計算式で対応) 印刷ボタンを押すごとにシート3のセルA1は1づつ繰り上がります。 シート1のH12の値が変わってから印刷がされます。 と同時に シート1のセルB5がDELETEされセルB5がアクティブになります。 結果シート1のH4、H5、H6、J7、H8は「#N/A」が表示されます。 H12はクリアされません。 印刷終了後にもセルの値が変化する事になります。 もう一つフォームで作成した「初期化」というボタンがあります。 これをクリックするとマクロが起動して シート1のセルB5がDELETEされセルB5がアクティブになります。 よってシート1のセルH4、H5、H6、J7、H8も「#N/A」に値が変わります。 ここまでは完璧に動作しています。 でこの「印刷ボタン」を押してマクロが起動ではなく セルB5に入力しエンターを押したらマクロを起動させたいです。 Private Sub Worksheet_Change(ByVal Target As Range) を利用しましたが動作しません。 シート1のB5のセルに入力しエンターを押すと シート1の一部のセルの値が変化。 印刷ボタンを押すと、シート3の一部のセルの値が変化し その後再びシート1のセルの一部が変化し印刷が開始され その後シート1のセルB5がDELETEされアクティブに。 それに伴いシート1の一部のセルの値が変化する。 マクロが起動すると、シート1とシート3のセルの値が数回変化します。 このような場合はPrivate Sub Worksheet_Change(ByVal Target As Range)で セルB5の入力後エンターで確定しての上記のマクロ起動は無理なのでしょうか?

  • Worksheet_Changeが 起こらない?

    早速ですが fundata シートの Worksheet_Change endrh = Cells(20000, 1).End(xlUp).Row Application.EnableEvents = False 'If Target.Address = "$F$" & endrh Then ですが 手入力で F 最後を 弄ると イベントをひらうのですが 他のシート("orgdata").の Worksheet_Calculate() Worksheets("orgdata").Activate Range("a4:h4").Select Selection.Copy Worksheets("fundata").Activate Range("A2").Select Range("A20000").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlValues でデータを アペンドで 追加するのですが、その追加には 上記が反応しないのです。 また、情報として orgdata の Range("a4:h4"). は リンクで得られたデータをもとに 加工して 値が得られ、時間で変化しています。 リンクで得られたデータは 癖があるのは承知しているのですが、その口でしょうか? よろしくどうぞ

  • worksheet_changeの一時無効化

    VBAエクセル初心者です。 セルの値を手入力変更すると赤字で表示されるようWorksheet_Changeメソッドを利用しています。 これをあるマクロ(Subプロシージャ)の実行中だけ無効にすることはできますか? 外部データを参照し列や行を削除や挿入して更新するマクロなのですが列を選択するとこのChangeメソッドにひっかかってしまい、エラーがでてしまいます。 何かよい方法はあるでしょうか・・・?

  • Excel VBA Worksheet_Change イベントについて

    Excel VBA Worksheet_Change イベントについて質問です。 セルH8とI8を結合し、入力規則よりリストボックスを配置しました。 本シートにWorksheet_ChangeをVBAで作成しましたが、 セルH8:I8をDeleteすると実行時エラー13が発生します。 If Target = "" then exit sub end if や If Target.value = "" then exit sub end if や If Target <> "" then 処理 end if としても対処できませんでした。 よい対処方法のアドバイスよろしくお願いします。

  • エクセル ラジオボタンでWorksheet_Change

    表題の質問をさせていただきます。 ワークシートに以下を記述しました。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Range("A1") Case "1" MsgBox "1です。" Case "2" MsgBox "2です。" Case Else MsgBox "3です。" End Select End Sub A1に手入力をすると無事に動作します。 しかし、ラジオボタンを用意して「リンクするセル」をA1に設定した場合は動作しません。 (ラジオボタンは3つで表示される数値は1・2・3です) Worksheet_Changeは手入力での変更時にしか動作しないのでしょうか。 どうにかラジオボタンによる動作方法をご教授願います。 エクセル2003です、よろしくお願いします。