![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
エクセル2010を使っている者ですが、ファイル中に「入力」という名前のシートが左から3番目にあるのですが、そのシートのC5の値を変更したときに、A列が空白になっている行を非表示にするというマクロについてですが、以下のように書いても動きませんでした。
マクロを書いたシートのC5が変更になった場合はうまく動くので、
Worksheets("入力").Range("C5")
という書き方が問題だと思うのですが、どのように書けば良いのか、ご教示願います
もしくは、同じシートのC5は関数で値を取得しており、関数の戻り値で変更されてもマクロが起動しないようなのですが、戻り値での変更でも起動させるようにする方法をご教示願います。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Worksheets("入力").Range("C5")) Is Nothing Then
Exit Sub
Else
Dim LastRow As Long
Dim i As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To LastRow
If Cells(i, 1) = "" Then Rows(i).Hidden = True
Next i
End If
End Sub
No.3ベストアンサー
- 回答日時:
関数の戻り値が変わった場合はChangeイベントは発生しませんね。
Calculate(再計算)イベントは発生しますが、どこが再計算されたかは判断できないので使えません。
修正方法ですが、処理やシート構成などが良く判らないので…処理コードのところは適当に修正してください。
☆入力シートのシートモジュールに
--------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$5" Then Call 処理
End Sub
--------------------------------------------------------------
☆標準モジュールに
--------------------------------------------------------------
Sub 処理()
Dim i As Long
Sheets("Sheet1").Select
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) = "" Then Rows(i).Hidden = True
Next i
End Sub
--------------------------------------------------------------
No.5
- 回答日時:
関数が入っているセルの値が変わった時にマクロを動かす仕組みになります。
まず、下記のVBAを各オブジェクトの下に張り付けて下さい(非表示にするマクロは、qazxcvfr4さんの方で書き直してくださいね)。
その上で、「入力」シートのC5セルに入っている関数を下記のユーザ定義関数(MyChangeIf)で包みます。
具体的には、例えばC5セルに =IF(Sheet2!A1<10,"A","B") という式が入っている場合、それを =MyChangeIf(IF(Sheet2!A1<10,"A","B")) とします。
【ThisWorkbook】
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
If MyChange Then
Call 非表示にするマクロ
MyChange = False
End If
End Sub
【標準モジュール】
Public MyChange As Boolean 'パブリック変数で定義。
Function MyChangeIf(v As Variant) As Variant
If Application.ThisCell.Text <> CStr(v) Then
MyChange = True
End If
MyChangeIf = v
End Function
Sub 非表示にするマクロ()
MsgBox "A列が空白になっている行を非表示にするというマクロ"
End Sub
ありがとうございます。
関数の戻り値が変更された場合でも、イベントを発生させる方法があるということですね。
しかし、誠に申し訳ないのですが、この度は理解できないまま締切の期限を迎えてしまいました。
No.4
- 回答日時:
このご質問の内容は、古典的で、昔は、Microsoft 側のサポートに載っていましたが、いつのまにか消えてしまいました。
特に、DDEから自動的に入ってくるものを取れないかという内容でしたが、今は、ActiveX やCOMアドインで、知らないままにセルの値が変わっていたりしますので、そちらがわで処理することが多いようです。私の記憶違いかもしれませんが、Change イベントは、Enter (CRコード)が必要だったような気がします。CRコードがないものは、イベントが走りません。Calculate イベントも、本来、計算をしないと走らないので、やや扱いに難があります。必ず、そのシートに計算式があることが条件です。
そして、最大級は、API時計を使ってイベントを自分で作ってしまうことです。しかし、そんなものは常に時限爆弾を抱えているようなマクロになってしまいます。
以下は、難易度最大を10としたら、以下のマクロはレベル2ぐらいです。
でも、これって、そのままなら、一回きりのマクロですよね。(^^;
注意点は、一旦閉じて、ファイルを開ければ、myVal の中に値が入りますが、そうでなければ、人為的にmyValに値を入れたほうが良いと思います。
Private ステートメントがついていますから、ThisWorkbook モジュールで、
Sub Test1()
myVal =Me.Worksheets("入力").Range("C5").Value
End Sub
と入れてください。
不安が残るなら、別のイベントで、値を入れてください。
マクロを書いた最初だけです。後は、ファイルを開けるとき、マクロが実行されますから、大丈夫です。
同じ型のマクロは、標準モジュールでも作れます。こちらが古いスタイルです。
'ThisWorkbook モジュールに貼り付けてください。
Private myVal As Variant 'モジュールスコープ変数
Private Sub Workbook_Open()
With Me.Worksheets("入力")
myVal = .Range("C5").Value '値を入れる
End With
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim c As Variant
If Me.Worksheets("入力").Range("C5").Value <> myVal Then
For Each c In Me.Worksheets("Sheet1").Range("A1:A10")
If c.Value = "" Then
c.EntireRow.Hidden = True
End If
Next c
myVal = Me.Worksheets("入力").Range("C5").Value
End If
End Sub
ご回答いたがき、ありがとうございます。
内容が理解できなかったため、どうお礼を書こうかと思っているうちに遅くなってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Worksheet.Change イベントを他のシートにも反映させる方法?
Visual Basic(VBA)
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
-
4
別のシートから値を取得するとき
Visual Basic(VBA)
-
5
Calculateイベントでセルを指定したい
Word(ワード)
-
6
”戻り値”が変化したときに、マクロを実行したい
Visual Basic(VBA)
-
7
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
-
8
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
9
Private Sub Worksheet_Calculate()のことでお聞きします
Excel(エクセル)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
Worksheet_Changeの内容を標準モジュールから実行するには?
その他(プログラミング・Web制作)
-
13
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
14
EXCELでセルの値が変化したときだけにマクロ実行
Excel(エクセル)
-
15
VBA チェンジイベント 別シートにデータ転記
その他(Microsoft Office)
-
16
EXCEL VBA 複数のシートに同じイベントプロシジャを書く場合
Excel(エクセル)
-
17
【Excel VBA】セルの値が変更されたらマクロを実行
その他(Microsoft Office)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
19
エクセルVBA シートモジュールにチェンジイベントを複数設定する方法を教えて下さい。 例えば、B列に
Visual Basic(VBA)
-
20
エクセルのマクロをセルの値に応じて自動起動したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel関数-文字列で自動作成さ...
-
エクセルの関数について教えて...
-
Excelデータをコピペして、ペー...
-
職場の人から聞かれており、こ...
-
ユーザー定義関数をアドイン登...
-
Excelで50個のセルに同じ文字を...
-
スプレッドシート、Excelでの数...
-
Microsoft Officeの中古は信用...
-
エクセルで不等号記号(≠)が上に...
-
スプレッドシートで使う数式を...
-
エクセルでの特別な文字を上に...
-
エクセル日付 文字列の関数がエ...
-
A列とB列を参照してC列に連番を...
-
エクセルVBA、別ブックへ転記す...
-
各ページの1番上の表示について
-
エクセルでセルに標準で入力さ...
-
EXCELの質問です 119から足した...
-
pdfの表をexcelにはりつけて計...
-
Excelのif関数で文字が見えなく...
-
【マクロ】アクティブセルにブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報