次のような仕様のユーザー定義関数を作りましたが、関数入力直後しか、働いてくれません。リアルタイムに動くようにするには、どんな仕掛けを作成したら良いのか分かりません。

A1:A10の範囲にA1からA10に向かって、任意のセルにデータを入力します。この範囲の最下段に入力された情報を表示させるユーザー定義関数です。

このロジックは正しく機能しているのですが、範囲内の情報を入れ替えても、反応しません。再度、定義関数を入力すると、正しい結果を表示する状態です。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは



Application.Volatile

をあたまにつけてみたらいかがでしょうか?

参考URL:http://www2.odn.ne.jp/excel/
    • good
    • 0
この回答へのお礼

ありがとうございます。できました。
本屋さんで、何冊も立ち読みしましたが、わかりませんでした。
これで、今夜は快眠です。では、退社させていただきます。

お礼日時:2001/01/23 21:04

計算方法は自動になっていますか?


「ツール」-「オプション」-「計算方法」タブで、自動を選んでいないと、再計算しませんが・・・。
あるいは、F9を押すとか。
    • good
    • 0
この回答へのお礼

超スピード回答ありがとうございます。
確認してみましたが「再計算」になっています。やっぱりユーザー定義関数に何らかの仕掛けが必要では?

お礼日時:2001/01/23 20:35

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q既存のファイルからグループ名を表示するエクセルのユーザー定義関数の作成方法について

「A.xls」というファイルに、
     A         B         C
1 「所属グループ」 「所属チーム」    「ID」
2    X         1       1・3・4・6
3    X         2       2・5・7・8・9・15
4    X         3       10・11・12・14
5    X         4       13・16
6    Y         1       1・2・3・9
7    Y         2       4・5・11
8    Y         3       6・10
9    Z         1       1・4・6
10    Z         2       2・8・
11    Z         3       3・5・7・9

のように管理しているものを、

     A         B         C
1 「所属グループ」  「ID」   「所属チーム」
2    X         1         1
3    X         2         2
4    X         3         1
5    X         4         1
6    X         5         2
7    X         6         1
8    X         7         2
9    X         8         2
10    X         9         2
11    X         10         3
     ・         ・
     ・         ・
     ・         ・


上記のように「所属グループ」をA列に「ID」をB列に置いた
「B.xls」ファイルを作成したいのですが、
既存の関数でやろうとしても上手くできませんでした。

ですので、「A.xls」のC列をデータベースとした、
下記の3つを引数にとるユーザ定義関数を作りたいと
思っているのですが、

所属グループ名 →   検索値1
所属ID  →   検索値2
A.xls C列2~  →  データベース

マクロの知識があまりない私にはここから先どのようにすればよいか分かりません。
お手数ですがどなたか教えてくれないでしょうか?

「A.xls」というファイルに、
     A         B         C
1 「所属グループ」 「所属チーム」    「ID」
2    X         1       1・3・4・6
3    X         2       2・5・7・8・9・15
4    X         3       10・11・12・14
5    X         4       13・16
6    Y         1       1・2・3・9
7    Y         2       4・5・11
8    Y ...続きを読む

Aベストアンサー

こんばんは。

マクロならまだしも、ユーザー定義関数ですと、これは、3次元ですから、なかなかややこしいです。

本来、C列に、「1・3・4・6」のような書き方は、データとして不安定になりやすく、ワン・セルには、ワン・データというほうが扱いやすいです。

今回、あまり、難しくせずに作ってみました。

区切り文字は、「・」としていますが、混在は出来ませんが、違うものなら、「区切り文字」の部分に、任意で入れてください。見つからない場合は、「?」が出ます。

ユーザー定義関数は、シートに置いたままにすると、量が多くなると、配列数式と同じくシートが重くなります。その場合は、値貼り付けしてしまってください。
検索値の大文字・小文字/全角・半角のの区別はありません。

数式例:

=ThreeD(A2,B2,[A.xls]Sheet1!$A$2:$C$11)

コードの登録は、値を出す側のブックの標準モジュールです。間違えないようにしてください。

--------------------------------------------

Public Function ThreeD(ByVal Grp As String, ByVal ID As String, mData As Range, Optional Delim As String)
'引数:検索グループ名,検索ID, データ範囲(3列),[区切り文字]
Dim myDic As Object ' New Dictionary
Dim ky As Variant
Dim Ar As Variant
Dim c As Variant
Dim v As Variant
Dim x As Variant
Dim i As Long, j As Long
Dim a As Variant, b As Variant
Dim n As String
Dim flg As Boolean
flg = False

If Delim = "" Then Delim = "・"
Set myDic = CreateObject("Scripting.Dictionary")
myDic.CompareMode = 1 'TextCompare

For Each c In mData
  ky = Trim(c.Value) & "-" & Trim(c.Offset(, 1).Value)
  Ar = Split(c.Offset(, 2).Value, Delim)
  For Each v In Ar
    On Error Resume Next
    myDic.Add ky, v
    If Err.Number > 0 Then
      myDic.Item(ky) = myDic.Item(ky) & "," & v
      Err.Clear
    End If
  Next v
Next c
For Each x In myDic.Keys
  n = InStr(1, x, Grp & "-", 1)
  If n > 0 Then
    a = Mid(x, n + 2)
    b = myDic.Item(x) & ","
    j = InStr(1, b, ID & ",", 1)
    If j > 0 Then
      flg = True
      Exit For
    End If
  End If
Next x
If flg Then
  ThreeD = a
Else
  ThreeD = "?"
End If
End Function
  

こんばんは。

マクロならまだしも、ユーザー定義関数ですと、これは、3次元ですから、なかなかややこしいです。

本来、C列に、「1・3・4・6」のような書き方は、データとして不安定になりやすく、ワン・セルには、ワン・データというほうが扱いやすいです。

今回、あまり、難しくせずに作ってみました。

区切り文字は、「・」としていますが、混在は出来ませんが、違うものなら、「区切り文字」の部分に、任意で入れてください。見つからない場合は、「?」が出ます。

ユーザー定義関数は、シート...続きを読む

QAccess2002 Insert関数が未定義関数となり、エラー

XP Access2002です。

ランキング形式のテーブルから、クエリを作成しています。

クエリでの表示は A1 となっているのですが、それにハイフン「-」を入れて、A-1としたいです。
「A1」は、テーブル名:「ランク」内のフィールド名:「順位」

SQLビューで
insert(ランク!順位,2,0,'-') AS ランキング
としたのですが、結果は、未定義関数と出てしまいます。
InsertをReplaceに変更したら、今度はアラーとは出ませんが、表示画面では、エラー表示になってしまいます。

構文が違うのでしょうか?
SQLを使っていて、『未定義』とアラートが出たのは初めてですので、戸惑っています。

Aベストアンサー

Excel、或いはその他のプログラミングなどをされた経験がある方でしょうか。

> SQLを使っていて、『未定義』とアラートが出たのは初めてですので、戸惑っています。

Accessには、Insertという関数がない(=定義されていない)ため、ご質問のエラーが
発生しています。


また、Excelのワークシート関数のReplaceとAccessのReplace関数とでは、引数の
内容が異なります。

【Excel】
REPLACE(文字列, 開始位置, 文字数, 置換文字列)
http://office.microsoft.com/ja-jp/excel/HP100625741041.aspx
→位置と文字数を指定

【Access】
Replace(文字列, 検索文字列, 置換文字列, (開始位置, 文字数, 比較モード))
http://office.microsoft.com/ja-jp/access/HA012288981041.aspx
→置換前の文字と置換後の文字を指定(おおまかには)

第4引数まで指定した場合、Excelの方では第4引数には文字列型のデータが
指定されますが、Accessの方では数値型が要求されますので、恐らくそこで
型不一致によるエラーが発生しているのではないかと推測します。

念のため、上記の引数をご確認の上、式を見直してみてください。


・・・ただ、AccessのReplace関数では、今回の目的は達せられないのではないかと
いう気がします(汗)
(但し詳細未検討)

Insert関数の第2引数に「2」を指定していることからすると、恐らくハイフンは常に
2番目に追加、ということだと思いますので、Left関数とMid関数を組み合わせでも
いけるかと思いますので、参考まで:

Left(ランク!順位, 1) & "-" & Mid(ランク!順位, 2) As ランキング

※Excelのワークシートと違い、「&」の前後には半角スペースが必須ですので、
  合わせてご注意下さい。

Excel、或いはその他のプログラミングなどをされた経験がある方でしょうか。

> SQLを使っていて、『未定義』とアラートが出たのは初めてですので、戸惑っています。

Accessには、Insertという関数がない(=定義されていない)ため、ご質問のエラーが
発生しています。


また、Excelのワークシート関数のReplaceとAccessのReplace関数とでは、引数の
内容が異なります。

【Excel】
REPLACE(文字列, 開始位置, 文字数, 置換文字列)
http://office.microsoft.com/ja-jp/excel/HP100625741041.aspx
→...続きを読む

Qsumif関数の範囲と合計範囲は隣合わせのセルしかできませんか?

たびたびすみません。
sumif関数の範囲と合計範囲は隣合わせのセルでないといけないのでしょうか?
どうも計算結果が変なのですが・・・

Aベストアンサー

列は離れていてもいいです。
指定した範囲の行の数は同じにしなければいけないです。通常の表では行番号も同じになると思います。
行の数や、行番号は同じになっているでしょうか。

QA1から最下行までを選択するVBA

offise2000です。
EXCEL VBAです。
A1からセルの最下行までの範囲を別シートに貼付するVBAを教えてください。
 
Range("A1").End(xlDown).select で最下行のセルを選択するところまでは調べたのですが、基本がないので応用がききません。宜しくお願いします。

Aベストアンサー

Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste

Sheet2のA1に貼り付けます。

QACCESS モジュールで自作した関数が、未定義関数・・・?

モジュールで自作した関数を使用する際、普段は問題なく使用できるのですが、何かの拍子に「未定義関数です」という内容のエラーが発生します。
こうなると、この関数は使えなくなります。
この関数のコードを変更しなくても、このエラーは発生します。

ACCESSそのものを再起動すると問題なく使用できます。

なぜこのようなことがおきるのでしょうか?
解決方法はありますか?

よろしくおねがいします。

Aベストアンサー

ダメ元ですがもし、プロシージャ名(Functionに続く名前)が2バイト系の日本語だったり、スペースが入ってたり、半角カナの場合は、1バイト系アルファベット(ABC等)にした方が良いかもしれません。変数などもできれば。元々米国のソフトですし。
念のためモジュールのコンパイル、MDBの再編成・修復もしたほうがいい鴨です。
場合によっては、空のMDBを作って全てのオブジェクトをインポートして直ることもあるソフトですから。


このカテゴリの人気Q&Aランキング

おすすめ情報