【先着1,000名様!】1,000円分をプレゼント!

フィールドの標題に関数を使用できないのでしょうか?
そのまま入力してもただ関数が文字として表示されます。

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

A 回答 (2件)

フィールド名を動的に変更したいということですか


だったらVBAで動的にSQLを作成することになりますね
    • good
    • 0
この回答へのお礼

VBAで組むことになるのですか
参考になりました。ありがとうございます。

お礼日時:2008/04/21 19:13

フォームかレポートの標題ですよね。


標題(ラベル)を右クリックして「コントロールの種類の変更」で
「テキストボックス」を選択してください。
そのプロパティで「コントロールソース」に関数を設定すれば結果が表示されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
レポートで表示する場合はそれでよいのですが、
エクセルで出力すると列の内容が空白で本来そこに表示したい内容が
異なるので、フィールドの表題を関数で変更できないかと思い質問
させていただきました。

お礼日時:2008/04/21 19:10

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QACCESSで条件によってフォーム上のフィールドの色を変更

一覧形式のフォームがあり、条件によって色を変更したいのですが、その条件というのが下記のような感じです。

フィールドA | フィールドB | フィールドC | チェックボックス
チェックボックスのチェックがあったら、フィールドA・B・Cの色をグレーにする。
チェックがなかったら白いまま。

というものです。
条件付書式だと、色を変更するフィールドそのもののデータを参照にしないといけないんですよね?
フォームオープンのところにVBAをかいてみたんですが、ひとつひとつは認識してないみたいで…。
どのようにすればいいのでしょうか?

よろしくお願いします。

Aベストアンサー

フォームのデザイン画面で3つのフィールドすべて選択し条件付書式画面を表示させる。
条件1のコンボで”式”を選択。
右側の欄に[チェックボックスのコントロール名]=True
と入力し、バケツアイコンでグレーを選択。
(もちろん1フィールドづつ設定してもOK)

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

Q前のレコードの値を自動で入れたい

accessを使い始めたばかりで初歩的な質問で申し訳ありません、
新しくレコードを作ったとき前のレコードの値を参照し
自動で入力するというのは可能なのでしょうか??

どなたかわかる方がいらっしゃったら力を貸してください。
よろしくお願いいたします。

Aベストアンサー

326さんの回答にもありますが、自動入力するテキストボックスの「規定値/DefaultValue」プロパティを利用するのが良いでしょう。

新規に入力するデータの規定値ですから、参照するのは、入力済みの最後のデータになりますね。
そこで具体的な方法ですが、フォームの該当するテキストボックスのデータ タブの規定値に、
=DLast("テキストボックス名","フォームの元になるテーブル(またはクエリー)名")
と、記述してみてください。
( DefaultValue プロパティ、DLast 関数を HELP で確認してください。)
(また、326さんのご希望のような ID番号の入力の場合は、DLast 関数でなく、DMax 関数を使って、=DMax(・・・・)+1 としてください。)

とりあえず、これでご希望に添えるようでしたら、以下は読まなくてもけっこうです。
もし、テーブルデータの並べ替えを行っていて、厳密な処理を行いたい場合のみ、続きをご覧ください。

データの入力は、常に順番に行っていらっしゃるのでしょうか?
例えば、データを日付で昇順に並べ替えをしているテーブルに、古い日付のデータを後から入力するようなことはないでしょうか?
もし、このような入力をすると、最後に入力したデータは、画面上では上の方に表示されますが、実際は最終データですので、新規データの規定値も古い日付になってしまいます。

このような問題を回避するには、今、私が思いつくところでは、以下の三つの方法があります。
(1)(入力済みデータから一番最近の日付を参照するなら、)DMax 関数を組み合わせて、規定値の式を記述する。
(2)常に、画面上の最後のデータと同じ一つのレコードだけが抽出されるクエリーを別に作って、このクエリーの値を規定値にする。
(3)VBA でレコードセットを定義して、並べ替え後の最後のデータを取得する。

(1)で良ければ、これが一番簡単です。
(2)または(3)の方法を取るなら、私個人としては、(3)の方が、余計なクエリーが増えないし、処理も高速ですので、良いと思いますが、初心者の方で、VBA になじみが無い場合は、(2)の方がわかりやすいかも知れません。

まず、(1)の記述方法です。
=DLookup("テキストボックス名","テーブル名","日付フィールド名=DMax(""日付フィールド名"",""テーブル名"")")
( DLoolup 関数、DMax 関数、”:文字列内でのクォーテーション をHELP で確認してください。)

次に、(2)の方法で処理する場合の別クエリーの作り方です。
クエリーをデザインビューで新規作成してください。
まず、フォームの元になるテーブル(またはクエリー)をデザインビューに追加します。
次に、並べ替えをするフィールド(この場合は、日付のフィールドでしょうか?)を選択し、並べ替えを「降順」(最後のデータを抽出するので、元のテーブルが昇順で並べ替えられている場合、その逆の「降順」になります。)にします。また、表示のチェックは、はずしておいてください。
それから、次のフィールドを「元になるテーブル名.*」としてください。(「*」を利用すれば、すべてのフィールドが表示されることになります。)
最後に、クエリーのプロパティのトップ値に、1(数字の一です)を入れてください。
( TopValues/トップ値 プロパティを HELP で確認してください。)

以上で、最後のレコードのみを抽出するクエリーができます。
DLast 関数が参照するテーブルをこのクエリーに変更すれば、これで終わりです。

もし、(3)の方法にチャレンジしたければ、補足でコメントください。

なお、今、私の手元にあるのは Access97 ですので、他のバージョンをお使いの場合、操作方法が微妙に違うかも知れませんが、多分基本的には問題なく動くと思います。

326さんの回答にもありますが、自動入力するテキストボックスの「規定値/DefaultValue」プロパティを利用するのが良いでしょう。

新規に入力するデータの規定値ですから、参照するのは、入力済みの最後のデータになりますね。
そこで具体的な方法ですが、フォームの該当するテキストボックスのデータ タブの規定値に、
=DLast("テキストボックス名","フォームの元になるテーブル(またはクエリー)名")
と、記述してみてください。
( DefaultValue プロパティ、DLast 関数を HELP で確認してください。)
...続きを読む

QAccess-フォームのCaption変更

お願い致します。
Access97のフォームのクラスモジュールでCaptionの変更を行うコードを書いたのですが、いまいちうまくいきません。

ご指導お願い致します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
***********************************************
Private sub Form_Load()

DoCmd.OpenForm "F_OPEN"
Forms!F_OPEN!Msg.Caption="お待ちください"
************************************************
このForms!F_OPEN!Msg.Caption="お待ちください"
のところで、エラーメッセージ
「'Item'メソッドは失敗しました:'Forms'オブジェクト」がでてしまうのです。

お願い致します。

Aベストアンサー

こちらの環境では、
Forms("F_OPEN").Controls("msg").Caption = "お待ちください"
と書いても、
Forms!F_OPEN!msg.Caption = "お待ちください"
と書いてもちゃんとラベル(msg)の表題が変わります。
意図的に色々変えてみても、別のエラーにしかならないし・・・。

ぐぐってみても、悩んでいる人はいても、どう解決したかまではたどりつけませんねえ。

疑ってみてもよいのは、データベースが壊れているとそうなるという説ぐらい。メニューから[最適化]とか、[修復]をやってみる、または新しく作り直すと直るかもしれません。
あと、環境(マシン)が違って(設定が違う)と出る/出ないの違いがあるとか・・・。


現時点でこれ以上私のアドバイスできることはなさそうです。すみません。

(よかったら駄目元で、forms(),Controls()形式の表記も試してみてください)

QAccess 同じデータをたくさんのレコード(同一列)に一度に入力するには

いつもお世話になっています。
Accessの基本的な入力に関して教えてください。
同じデータをたくさんのレコード(同一フィールド)に一度に入力するには、どうすればよいか教えてください。

Excelの列方向へのコピーと同じような感覚でできないのでしょうか?

よろしくお願いします。

Aベストアンサー

質問の回答にならないかも知れませんが・・・

1.EXCELでコピーするための元データを作成します
  ※仮にレコードが1000件ある場合はEXCELで1000行作ります。

2.Excelのデータをコピーします。

3.Accessのテーブルを開きます。

4.先頭レコードの貼り付けをしたい項目にカーソルを合わせます。(カーソルは白の十字)

5.下方向へドラッグし、項目を選択します。

6.貼り付けをします。

※貼り付けに失敗した場合、元に戻せませんので必ず元ファイルのコピーを取ってから行ってください

よろしければ、お試し下さい


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング