プロが教えるわが家の防犯対策術!

小数点第1位までの数値を扱っているフィールドがあるのですが、
0を空白、それ以外を数値通りに表示できないでしょうか?

A 回答 (2件)

> 0を空白、それ以外を数値通りに表示できないでしょうか?



『書式』では、「;」(セミコロン)区切りで
 正の値のときの書式
 負の値のときの書式
 0のときの書式
 Nullのときの書式
と、それぞれ個別に設定を指定できます。

ですので、ご質問の例では
 ##.0;;""
と設定すれば、通常の値(正負)は小数点1桁での表示、
0は空白での表示になると思います。
(Nullのときの書式は省略しています)

なお、正負によって色も変更できます。
詳しくは、Accessのヘルプかこちらを参照下さい:
http://office.microsoft.com/ja-jp/access/HA01232 …

この回答への補足

回答いただいた##.0;;""では、.6と表示され0.6と表示されませんが
0.0;;""ではないでしょうか?
そもそも##と入力すると#となりますが・・・。

補足日時:2009/08/11 13:41
    • good
    • 0

ACCESSの操作に沿って言えば、テーブルをデザインビューで開き、その(数値型)のフィールドをクリックすると、下部にフィールドプロパティが出る。


そこの書式をクリックすると(詳細はF1キーを押してヘルプを見よとなっているので)F1キーをおす。
カスタム書式にその説明があり、
番目 正の数値の書式
2 番目 負の数値の書式
3 番目 0 の書式
4 番目 Null 値の書式
に区別できること、その例が載っている。
講習などでは、テーブルやフィールドとは?の次に説明される事項。

この回答への補足

それは知りませんでした、ありがとうございます。
ただNo1さんでの書式では100を100.0と表示する問題があります。
結局のところFormat関数を使わなければ無理な気がします。

補足日時:2009/08/11 13:43
    • good
    • 0
この回答へのお礼

結局のところ印刷にしようするだけなので、cstrで文字列に変換しました。ありがとうございました。

お礼日時:2009/08/11 14:48

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

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

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QACCESS DCOUNTの抽出条件について

式1: DCount("コード","テーブル","コード=" & [テーブル]![コード])

結果の2以上のものを抽出したいのですが、どのように記述するのでしょうか?

>1または>=2またはnot 1でもいいですが・・・
記述方法が良く分かりません。

Aベストアンサー

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも上記エラーが出ているようでしたら、
 元となるテーブルとクエリの情報(フィールド名とデータ型)をお知らせ下さい)
※なお、コードは数値型と想定しています。もしも文字列方の場合は、併せて
 式を「"コード='" & [テーブル]![コード] & "'"」と変更する必要があります。

上記のエラーを回避するには、DCountの第1引数を「*」にします。
また、コードがNullのレコードで、クエリの表示結果が「#エラー」となるのを
回避するためには、第3引数にNz関数を使用します。
(コードの最小値は0か1でしょうから、「最小値-1」(=-1か0)にするのがよいかと
 思います)

【Nullは重複数に含めない場合】
DCount("*","テーブル","コード=" & Nz([テーブル]![コード],-1))
※コードがNullの場合は、第3引数の結果がTrueにならない(Null=-1)ので
 0件扱いとなるため、抽出条件の「>1」で弾かれます。
 また、第3引数にNz関数を使用する代わりに、クエリの『コード』の抽出条件に
 「Is Not Null」を指定する(→最初から集計の対象外にする)方法もあります。

【Nullも1つのコードとして重複扱いする場合】
DCount("*","テーブル","Nz(コード,-1)=" & Nz([テーブル]![コード],-1))

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも...続きを読む

QVBAを時間指定で自動実行

就業時間内(9時~6時)でエクセルVBAを指定時間に自動実行させたいです。
エクセルはパソコン起動した朝に、開いておきます。(バックグラウンド)
指定時間になったらVBAを自動実行させたいのです。
指定時間は例えば、
10時11分
10時16分
10時21分 などです。最初の時間から5分間隔で実行。
こういう事はできるのでしょうか?VBAでできるのか?
それ以外の方法があるのか?よくわかりません。
詳しく教えてください。

Aベストアンサー

たとえば、こんなことか。
下記は、1度testを実行すると、15秒たつとtest1を実行し、以後10秒ごとにtest2を実行するというもの。
test1もtest2も単にmsgboxを表示するだけ。

Dim gotime1, gotime2
Sub test()

gotime1 = Time + TimeValue("00:00:15")
gotime2 = gotime1
Application.OnTime gotime1, "test1"
gotime2 = gotime2 + TimeValue("00:00:10")

While gotime2 < gotime1 + TimeValue("00:01:00")
Application.OnTime gotime2, "test2"
gotime2 = gotime2 + TimeValue("00:00:10")
Debug.Print gotime1, gotime2
Wend
MsgBox "start " & Time
End Sub

Sub test1()
MsgBox "test1 " & Time
End Sub

Sub test2()
If Time >= gotime1 + TimeValue("00:01:00") Then
MsgBox "end " & Time
Else
MsgBox "test2 " & Time
End If
End Sub

たとえば、こんなことか。
下記は、1度testを実行すると、15秒たつとtest1を実行し、以後10秒ごとにtest2を実行するというもの。
test1もtest2も単にmsgboxを表示するだけ。

Dim gotime1, gotime2
Sub test()

gotime1 = Time + TimeValue("00:00:15")
gotime2 = gotime1
Application.OnTime gotime1, "test1"
gotime2 = gotime2 + TimeValue("00:00:10")

While gotime2 < gotime1 + TimeValue("00:01:00")
Application.OnTime gotime2, "test2"
gotime2 = gotime2 + TimeValue("00:...続きを読む

QアクセスのDsum関数の使い方

これまでに何度となく同じような質問を出している者です。すみません・・・。以前は下記の【newcode】を【code】と【国名】から作成する方法を質問しその問題は解消しました。
【code】  【国名】    【newcode】
 111    日本     111_日本
 111    日本     111_日本
 111    中国     111_中国
 111    中国     111_中国
 121    アメリカ   121_アメリカ
 121    アメリカ   121_アメリカ
 123    日本     123_日本
 123    日本     123_日本
 123    中国     123_中国
しかし、この表にはまだもう一つの作業が残っているのです。それは、下記のように
【code】  【国名】   【A1】 【A1合計】
 111    日本     10    30
 111    日本     20    30
 111    中国     25    40
 111    中国     15    40
 121    アメリカ   22    37
 121    アメリカ   25    37
 123    日本     20    35
 123    日本     15    35
 123    中国     30    30
【A1】が追加されているのです。
そして、【A1合計】として【code】と【国名】が同じものを『DSum関数』を使用してレコードの合計値を出すにはどうしたらいいでしょうか?
以前は、上にあった【newcode】を使い、『DSum("[A1]","[シート名]","[newcode]='" & [newcode] & "'")』といった演算でやっていたんですが・・・。条件を『[code]=[code]and[国名]=[国名]』といった感じでやりたいのです。
すみませんが、教えていただけるとありがたいです。

これまでに何度となく同じような質問を出している者です。すみません・・・。以前は下記の【newcode】を【code】と【国名】から作成する方法を質問しその問題は解消しました。
【code】  【国名】    【newcode】
 111    日本     111_日本
 111    日本     111_日本
 111    中国     111_中国
 111    中国     111_中国
 121    アメリカ   121_アメリカ
 121    アメリカ   121_アメリカ
 123    日本     123_日本
 123...続きを読む

Aベストアンサー

No.3、DexMachinaです。

> 質問に書いたとおり前には、条件式を増やすやり方ではムリでしょうか?

えーと・・・その方法でしたら、「code」と「cade」の打ち間違い(「o」が「a」に
なっている)がありますが(汗)、No.2でn-junさんが既に答えられています。

なお、質問文を見返していて気になった点があったので、念のためですが、
「And」の前後には必ず半角スペースが入りますので、手入力する際は
ご注意下さい。

それと、もしも現状では「'」の置き方がわかりにくいようでしたら、以下の
書き方でも同じ意味になりますので、参考まで。
(かえってわかりにくかったら、すみません(汗))

【「"'" & [code] & "'"」でひとセット、という形】
 DSum("[A1]","シート名","[code]=" & "'" & [code] & "'" & " And [国名]=" & "'" & [国名] & "'")

【さらに、「And」も分離した形】
 DSum("[A1]","シート名","[code]=" & "'" & [code] & "'" & " And " & "[国名]=" & "'" & [国名] & "'")

※「[code]=」と「"'" & [code] & "'"」が1条件目の指定、
  「[国名]=」と「"'" & [国名] & "'"」が2条件目の指定で、
  それを「" And "」でつないでいます。

No.3、DexMachinaです。

> 質問に書いたとおり前には、条件式を増やすやり方ではムリでしょうか?

えーと・・・その方法でしたら、「code」と「cade」の打ち間違い(「o」が「a」に
なっている)がありますが(汗)、No.2でn-junさんが既に答えられています。

なお、質問文を見返していて気になった点があったので、念のためですが、
「And」の前後には必ず半角スペースが入りますので、手入力する際は
ご注意下さい。

それと、もしも現状では「'」の置き方がわかりにくいようでしたら、以下の
書き方...続きを読む

QACCESS フォームからサブフォームのデータを更新・入力したい

ACCESS フォームからサブフォームのデータを更新・入力したい

tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。

フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェクトに所属するプロジェクトコードをサブフォームのtbl_テーマのプロジェクトコードにも反映したいのですがどのようにしたらよいでしょうか?
そういったことは可能でしょうか?分かりにくい説明で申し訳ないですが教えていただけると助かります。よろしくお願いします!



DBの構成
【テーブル】
tbl_プロジェクト (1件1件のIDとプロジェクトコードを持つ)
(フィールド:P_ID、プロジェクトコード、件名、契約日など)
tbl_テーマ(プロジェクト毎に関連のあるキーワードを持つ)
(フィールド:P_ID、プロジェクトコード、テーマ)←これのプロジェクトコードにtbl_プロジェクトのデータが入るようにしたい。
tbl_顧客(プロジェクトを依頼した顧客情報を持つ)
【クエリ】
q_テーマ(プロジェクト、テーマ、顧客を抽出するクエリ)
【フォーム】
f_プロジェクト (プロジェクトを1件ずつ表示・参照・新規作成するフォーム)
f_テーマサブフォーム (f_プロジェクトフォームのプロジェクトコードにづきテーマを
        表示・入力するサブフォーム)

リレーションはP_IDをキーに一対多で作成しています。

ACCESS フォームからサブフォームのデータを更新・入力したい

tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。

フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェク...続きを読む

Aベストアンサー

No.4です。

前回の回答は、「レコードの新規登録」のみを想定していました(汗)
大変失礼致しました。


【「メインフォーム」-「サブフォームの新規レコード」間の不一致について】
(=No.4の補足での、2個目の「◆」の件)

メインフォーム側の「レコード移動時」イベントで、『プロジェクトコード』の
更新後イベントと同様の処理を行えば、解消すると思います。
(先頭1行が「Private Sub Form_Current()」となる他は、前回のVBAと全く
 同じなので、今回は省略します)


【既存レコードでの『プロジェクトコード』の空白について】
(=No.4の補足での、1個目の「◆」の件)

対処法としては、
 a)更新クエリを使用して、tbl_テーマの『プロジェクトコード』を一括更新
  (→tbl_テーマに入力済みの『P_ID』の再確認が不要な場合)
 b)「メインフォーム上のプロジェクトコードを、サブフォームの全レコードに
  一括代入」するためのコマンドボタンを、メインフォームに追加
  (→tbl_テーマの『P_ID』が正しいかを目視確認してから代入する場合)
の、2つの考え方があります。

「a」については添付画像をご覧いただくとして、ここでは「b」について説明
します。

メインフォームに『コード転記』コマンドボタンを作成したら、そのクリック時
イベントに以下のコードを記載して下さい:

Private Sub コード転記_Click()

  If MsgBox("サブフォームにプロジェクトコードを追記します", vbOKCancel, "確認") = vbCancel Then Exit Sub

  'サブフォームの全レコードを上書き更新
  With Me![サブフォームのコントロール名].Form.RecordsetClone
    Do Until .EOF
      .Edit
      !プロジェクトコード = Me!プロジェクトコード
      .Update
    Loop
  End With

  '更新を反映
  Me![サブフォームのコントロール名].Form.Refresh

  MsgBox "追記しました", , "確認"

End Sub


なお、「a/b」のどちらを採った場合でも、サブフォームの『P_ID』の上書き
編集に合わせて『プロジェクトコード』も連動して更新させるには、別途、
以下のような『P_ID』の更新後イベントでの対応が必要です:

Private Sub P_ID_AfterUpdate()
'メインではなくサブフォームの『P_ID』テキストボックスの更新後イベント

  If IsNull(Me!P_ID) Then
    Me!プロジェクトコード = Null
  Else
    Me!プロジェクトコード = DLookup("[プロジェクトコード]", "tbl_プロジェクト", "[P_ID]=" & Me!P_ID)
    '『P_ID』がテキスト型の場合は上記ではなく以下のコード
    'Me!プロジェクトコード = DLookup("[プロジェクトコード]", "tbl_プロジェクト", "[P_ID]='" & Me!P_ID & "'")
  End If

End Sub

また、この対応を組み込んで戴けば、

> テーマを修正するとフォーム上では10001が入力される。
> tbl_テーマには反映されない。

の件も解消すると思います。
(但し、別のレコードに移動したり、メニューから「レコード(R)→レコードの
 保存(O)」を選択する等して、レコードが保存してからでないと、テーブル
 には反映されないので、確認の際はご注意下さい)


・・・以上です。

No.4です。

前回の回答は、「レコードの新規登録」のみを想定していました(汗)
大変失礼致しました。


【「メインフォーム」-「サブフォームの新規レコード」間の不一致について】
(=No.4の補足での、2個目の「◆」の件)

メインフォーム側の「レコード移動時」イベントで、『プロジェクトコード』の
更新後イベントと同様の処理を行えば、解消すると思います。
(先頭1行が「Private Sub Form_Current()」となる他は、前回のVBAと全く
 同じなので、今回は省略します)


【既存レコードでの『プロジェクトコー...続きを読む


人気Q&Aランキング