エクセル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.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
ご回答いたがき、ありがとうございます。
内容が理解できなかったため、どうお礼を書こうかと思っているうちに遅くなってしまいました。
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
ありがとうございます。
関数の戻り値が変更された場合でも、イベントを発生させる方法があるということですね。
しかし、誠に申し訳ないのですが、この度は理解できないまま締切の期限を迎えてしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
字面がカッコいい英単語
あなたが思う「字面がカッコいい英単語」を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Worksheet.Change イベントを他のシートにも反映させる方法?
Visual Basic(VBA)
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
-
4
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
-
5
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
6
”戻り値”が変化したときに、マクロを実行したい
Visual Basic(VBA)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
EXCELでセルの値が変化したときだけにマクロ実行
Excel(エクセル)
-
9
Calculateイベントでセルを指定したい
Word(ワード)
-
10
【Excel VBA】セルの値が変更されたらマクロを実行
その他(Microsoft Office)
-
11
EXCEL VBA 複数のシートに同じイベントプロシジャを書く場合
Excel(エクセル)
-
12
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
13
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
14
Worksheet_Changeの内容を標準モジュールから実行するには?
その他(プログラミング・Web制作)
-
15
VBA チェンジイベント 別シートにデータ転記
その他(Microsoft Office)
-
16
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
17
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
18
Private Sub Worksheet_Calculate()のことでお聞きします
Excel(エクセル)
-
19
VBA別シートの最終行の次行へ転記したい。
Visual Basic(VBA)
-
20
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
今まで文字化けなく開けていたc...
-
スプレッドシートで指定された...
-
ExcelでASCを使って全角を半角...
-
マクロの処理が遅くなった
-
Excel関数について教えてくださ...
-
作成した数式を値として表示し...
-
エクセルの質問です。 F列からL...
-
エクセルでファイルの最終更新...
-
EXCELの散布図で日付が1900年に...
-
【マクロ】VLOOKUPにて参照元に...
-
エクセルのセル内に分数などの...
-
Excelの警告について
-
Microsoft 365Excelの見開きペ...
-
Excel関数について教えてくださ...
-
シートの情報を別のシートへま...
-
Excelマクロで空白セルを詰めて...
-
【マクロ】フォルダ内にあるPDF...
-
index関数の説明をお願いします。
-
重複しない値を取り出したい
-
エクセルの数式バーのフォント...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報