• 締切済み

Changeイベントの途中にユーザー定義関数が入る

Excel VBA勉強中のものです ○"A1"に数字を入力する →Worksheet_Changeイベント →"B1"~"B5"にそれぞれ結果が入る →"C1"にユーザー定義関数 =A(B5)がある みたいなことをしようとしているのですが、 やってみると、 ○"A1"に数字を入力する →Worksheet_Changeイベント →Worksheet_Changeイベントの"B1"(1つ目の結果)がでるところで →ユーザー定義関数 Function Aにとぶ →普通にEnd Function →そのまま終了(End subに行かない) となるのですが、Worksheet_Changeに戻って来ないものなのでしょうか? また、Worksheet_Changeの最初のところに Application.EnableEvents = Falseで他のイベントを発生させないように?はしているのですが、終わるまでユーザー定義関数を発生させない命令みたいなのってあるのでしょうか? 上には少なく書いてありますが、実際はたくさんのセルを使用しておりWorksheet_Changeだけだとかなりの長文になりそうで、後半はユーザー定義関数にしたのですが 根本的に考え方が間違っているのでしょうか? なにかいいアドバイスをお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 レスが付きませんね。 ただ、なんとなく、全体的にコードに無理があるような気がするのと、その質問では分かりにくいのです。ユーザー定義関数を貼り付けているのか、それとも、関数プロシージャにしているのか、その説明では分かりにくいです。コードを見るまではなんともいえません。 >→普通にEnd Function >→そのまま終了(End subに行かない) どうやら関数プロシージャのようですが、その内容に問題があるようです。 今の、そのご質問のままですと、ステップモードで調べてみるしかないとしか言えません。回答者側がどうしたよいとかとは言える状態ではありません。 ただ、イベントプロシージャに、あまり複雑なものを作ると、概して失敗することが多いということだけは言っておきます。

napple_001
質問者

お礼

>その質問では分かりにくいのです 私もそう思います、正直ほとんどわかっておりません 理由は不明ですが何とか今は動いています もうちょっと勉強します ありがとうございました

関連するQ&A

  • VBA ユーザーフォームのChangeイベントを停止したい

    ユーザーフォームのChangeイベントは Application.EnableEvents = Falseで停止できないのですか? シート上のChangeイベントの停止はできましたが、ユーザーフォーム上のテキストボックス等のChangeイベントは停止できませんでした。 ユーザーフォームのChangeイベントを停止する方法があれば教えてください。

  • Excelユーザー定義関数が書き込まれているセルアドレス

    Excelのユーザー定義関数で、自分自身が書き込まれているセルのアドレスって取得出来るのでしょうか? 例えば、 Function test(MyString As String) As String test = "入力された文字は、「" & MyString & "」です" End Function とユーザー定義関数を作り A1のセルに =test("てすと") と書くと 入力された文字は、「てすと」ですと出てきます。 そこで、ユーザー定義関数のなかで、ユーザー定義関数を呼び出した式が入力されている(上記の例ですと、「A1」)アドレスを取得する方法ってありますか? どなたか、詳しい方いらっしゃいましたら教えてください。

  • 続・エクセルのユーザー定義で 

    前回、「1234511」で「12345A1-1」となるユーザー定義「00000"A"0"-"0」を使っている列で、 「12345B1」で「12345AB-1」にする方法を教えていただきましたが、さらに問題が発生しました。 「12345A67-1」という風にAの次の数字が二桁の場合が出てきて、「12345671」では 「123456A7-1」になってしまいます。前回教えていただいたコードをいじれば修正可能なのでしょうか? 新たに「12345671」の入力で「12345A67-1」となるようにしたいのです。 前回のコード private sub worksheet_change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("A:A")) ’実際に合わせて修正   if h <> "" then   h.numberformat = "0000A0-0"   if application.istext(h) then   application.enableevents = false   h = application.replace(h, len(h), 0, "-")   h = application.replace(h, len(h)-2, 0, "A")   application.enableevents = true   end if   end if  next end sub

  • エクセルユーザー定義関数(1)

    エクセル初心者です。 複数のセル範囲(例えばRange("A1:A100"))を入力させ、入力されたセル範囲すべてのセルを3乗した総和を求めるユーザー定義関数は作ること可能でしょうか? Function Y(a As Range) As Variant ここに、aで選択されたセル全てを3乗して総和を求める関数Yを定義したい。 End Function よろしくお願い致します。

  • TEXTBOX_CHANGEのイベント抑制

    TEXTBOX_CHANGE イベントでのイベント抑制方法を教えてください。 エクセルのVBAで、ユーザーフォーム内のTEXTBOXの内容を変更した際にイベントが発生しない様にしたいのですが、うまくいきません。 Private Sub TextBox1_Change() Application.EnableEvents = False UserForm1.TextBox1.Text = "" Application.EnableEvents = True UserForm1.TextBox1.SetFocus End Sub  ユーザーフォーム内では Application.EnableEvents  は使えないのかな?? どなたかご教授をお願いします。

  • イベント(Worksheet_Change(ByVal Target As Range)に詳しい方お願いします。

    こんにちわ。 エクセルで経理関係の表を作っているのですが、イベントプロシージャにて、特定の列のセルに入力された数値に対して、許容範囲か否かサインを出して(IF関数)、そのサインがでれば音を出すマクロを組もうとしているのですが、なかなかうまく行きません。   商品           商品  A B C -------- L M N O  | P Q--------AA 1 ○ |     ▲ 2 | 3 | | この表で注意すべき赤字は▲、伸ばすべき黒字は○。 A1~N1が商品種別や単価などの情報です。 ○▲サインはIF関数にて表示出来るようにしたのですが、このサインが表示された時にマクロを実行するイベントとして、 ************************ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 14 Then Application.EnableEvents = False Target.Value = s If s <> "" Then Call サイン発生通知 End If Application.EnableEvents = True End If If Target.Column = 28 Then Application.EnableEvents = False Target.Value = s If s <> "" Then call サイン発生通知 End If Application.EnableEvents = True End If End Sub ************************ としています。 音を出すマクロ自体は単体で(call サイン発生通知で)確認出来ているので、イベントプロシージャの記述に問題があると思うのですが・・・ 記述しているところは、Excelobject Sheet1(この表があるところ)です。 どなたか詳しい方おられましたら、ご教授の程お願い致します。<(_ _)>ペコリ 

  • エクセル イベントマクロ Changeイベントを複数作りたい

    Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 以下マクロの内容 End Sub これでセルA1が変わるとイベントマクロが発生しますが セルB1が変わると別のマクロが発生し セルC1が変わるとまた別のマクロが発生し…とするには どうすればよいのですか 単純に並べて書いたらだめみたいだったんですけど

  • 配列を返すVBAユーザー定義関数の書き方

    VBAで、商と余りを返す整数割算のユーザー定義関数を書こうとしています。セルA1に割られる数、B1に割る数が書いてあり、C1とD1に「=xdiv("A1:B1")」をCtrl+Shift+Enterで入力します。C1に商、D1に余りを返すようにしたいと思ってます。 以下のように書いてみたのですが、戻り値の書き方がどうもよくわかりません… Function xdiv(ByRef d() As Integer) As Integer   ............. End Function よろしくお願いします。

  • Excel VBA ユーザー定義関数をイベントマクロで使用する

    Excel VBA ユーザー定義関数をイベントマクロで使用する Excel2003を使用しています。 あるセルと同色に塗りつぶされたセルの値を合計したく、下記1のユーザー定義関数を作成しました。 このユーザー定義関数を下記2のイベントプロシージャ内で呼び出して使用したいのですが、可能でしょうか? 可能であれば、どのようにコードを書いたらいいでしょうか? Call を使用するのかな?と思い、コードを追加してみましたが、引数の型が一致しないといった内容のエラーメッセージが表示されてしまいました。 よろしくお願いします。 ------------------------------------------------------------- 1.ユーザー定義関数(同色セルの合計) Function SumColor(hanni As Range, iro As Range) As Double   Dim myrng As Range   SumColor = 0    For Each myrng In hanni     If myrng.Interior.ColorIndex = iro.Interior.ColorIndex Then      SumColor = SumColor + myrng.Value     End If    Next myrng End Function 2.イベントマクロ(C列3行目以下ダブルクリックで塗りつぶし) Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Target.Column = 3 And Target.Row >= 34 Then    Range(Cells(Target.Row, 3), Cells(Target.Row + 1, 38)).Interior.ColorIndex = 36   End If End Sub

  • ユーザ定義関数がうまく動きません。

    ユーザ定義関数がうまく動きません。 2月のA1セル値が1になっていたりします。 どこがおかしいのかわかりません。解決方法を教えていただけませんでしょうか。 よろしくお願いします。 【シートの設定】 シート名は1月・・・12月です。 各シートの A1セルは「=sheetname()」 B1セルは「月のチェックシート」 が入っています。 【VBAの設定】 Function SheetName() As String 'Application.Volatile If Len(ActiveSheet.Name) = 3 Then SheetName = Left(ActiveSheet.Name, 2) Else SheetName = Left(ActiveSheet.Name, 1) End If End Function

専門家に質問してみよう