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

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ベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

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」のような書き方は、データとして不安定になりやすく、ワン・セルには、ワン・データというほうが扱いやすいです。

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

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

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

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

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
→...続きを読む

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

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

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

Aベストアンサー

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

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

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に貼り付けます。

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

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

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

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

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

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

Aベストアンサー

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


人気Q&Aランキング

おすすめ情報