
お世話になります。
フォームA
リストボックスがあり、その中の項目として[金額]があります。
そこに表示しているソースのテーブルの[金額]フィールドは通貨型です。
フォームB
[金額]テキストボックスがあり、書式は通貨にしてます。
フォームAのリストボックス上でダブルクリックするとフォームBが開き、フォームAで選択した金額がフォームBの[金額]テキストボックスにコピーするようにしてます。
Forms[フォームB]![金額] = Forms![フォームA]![リスト].Column(3)
金額のコピー自体は問題なくできておりますが、通貨型になりません(\やカンマが付かない)。
但し、テキストボックスに直接数字を入力すると通貨型で表示されます。
フォームAをダブルクリックするときに、
Forms[フォームB]![金額] = Format(Forms![フォームA]![リスト].Column(3),"\\#,###")とすれば、表示上はOKなのですが、このようにしないと通貨型でコピーは出来ないのでしょうか。
ご教授の程、宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
【要旨】
Columnプロパティの値を直接代入すると、書式は適用されなく
なります。
Val関数を使用すると、テキストボックスに設定した書式が適用
されるようになります:
Forms![フォームB]![金額] = Val(Forms![フォームA]![リスト].Column(3))
【詳細】
こちらの環境(Access2007/WinXP Home)で確認したところ、
ListBoxのColumnプロパティの値は、「(書式情報を持たない)
文字列」(=Text)として扱われるようです。
つまり、フィールドでの格納値が「2000」、リストボックスでの
表示値が「\2,000」だった場合、Columnで取得した値は
「"2000"」という文字列になります。
一方、書式に「通貨」を指定したテキストボックスで、その
書式が適用されるのは数値だった場合に限られます。
「"2000"」という文字列として受け取ったテキストボックス側は
その値を文字列としてしか認識できず、結果、書式の適用対象外
と判定した、ということのようです。
ですので、最もシンプルなのは、Val関数を使用して数値型
に変換する形になるかと思います。
Forms![フォームB]![金額] = Val(Forms![フォームA]![リスト].Column(3))
または(フォームA側にコードを記述している前提で:以下2行とも)
Forms![フォームB]![金額] = Val(Me![リスト].Column(3))
または
Forms![フォームB]![金額] = Val([リスト].Column(3))
【別解】
上記よりも手間が増えますが(汗)、TextBoxのTextプロパティを
使用する方法もあります。
(なお、Textプロパティを使用する場合は、対象となるTextBox
にフォーカスを移動する必要があります)
Forms![フォームB]![金額].SetFocus
Forms![フォームB]![金額].Text = Forms![フォームA]![リスト].Column(3)
※こちらも「Forms![フォームA]」は上と同様の書き換えが可能。
なお、こちらの場合は、フォームBの『金額』テキストボックスの
更新前イベント/更新後イベントが発生します。
同イベントでの処理の有無や内容によって、この点が利点にも
欠点にもなりますが、併せて参考まで。

この回答への補足
『入力されてない場合は空白(Nullもしくは"")』 がちょっと分かり辛いと思いましたので補足させて頂きます。
テーブルの金額フィールドにNullが入っているかもしれないし""が入ってるかもしれない・・・ということであり、そいうケースの場合はフォーム上、空白にしておきたいという意味です。
ご回答ありがとうございます。
Columnでの値の代入は書式が適用されないんですねぇ。。
勉強になります。
早速Valで試したところうまくいきました。。が、金額のデフォルト値は\0という訳ではなく、入力されてない場合は空白(Nullもしくは"")、金額が入力されている場合のみその金額を表示したいところです。
説明不足ですみません。
なので、
If IsNull(Forms![フォームA]![リスト].Column(3)) or Forms![フォームA]![リスト].Column(11) = "" Then
Forms![フォームB]![金額] = Val(Forms![フォームA]![リスト].Column(3))
Else
'空白の場合は何もしない。
End If
とすることで、やりたいことが出来ました。
ありがとうございました。
No.3
- 回答日時:
#2です
質問者さんには、私の意図したことが伝わっていればよいのですが。
通貨型の「金額」は、 Null のものはない・・・・
これが質問内容から読み取れませんでした。
なので、蛇足として Null は "" で得られることを記述していました。
確かに CCur("") であれば、エラーになります。
ただ、このエラーは検証時に発覚するものです。
要は、Null を 勝手に 0 として扱わない・・・・・これが前提であります。
単に比較する時には Null を 0 とかに置換えて・・・・等することがありますが、
値を設定する場合、Null は Null であるべきだ、と思っています。
私の考えを押し付けるわけではありませんが、上記エラーを処理するには、
On Error Resume Next
Forms[フォームB]![金額] = CCur(Forms![フォームA]![リスト].Column(3))
とでもしておけば良いと、私は思います。
※ Forms[フォームB]![金額] の初期値が気になりますが・・・・
この回答への補足
#1様の回答に記載した「・・・とすることで、やりたいことが出来ました。」ですが、ThenとElseでやる処理を逆に記載しておりましたので、ここで訂正させて頂きます。
補足日時:2013/03/04 18:47ご回答ありがとうございます。
おっしゃる通り、初期値は¥0という訳ではなく、Nullの場合もありえますし””(0文字)の場合もありえます。
なので、Nullか0文字かを判定し、そうであれば何もせず(もしくはフォームBの金額テキストボックスにNullを入れる)、値が入ってる場合のみ金額表示するように致しました。
ご教授ありがとうございます。
No.2
- 回答日時:
横から失礼します。
リストボックスに表示していた型で変換された方が良いと思います。
通貨型という事なので、
リストボックス上では ¥1,234 の様に表示されているのでしょうか。
(表示上 ¥ にするため全角で置換えてます)
であれば、
Val("¥1,234") → 0
Val("1,234") → 1
となるので、CCur を使った結果と異なるものになります。
CCur("¥1,234") or CCur("1,234") → 1234
上記、違いを記述しましたが、実際のリストボックスでは、
表示上は、¥1,234 だけど、Column(3) で得られるものは "1234" 見たいなので、
現状では Val / CCur どちらでもよいと思います。
Val を使う時の注意点という事で・・・・
表示上 / Column の違い等、意識したくない・・・・
表示の型での変換をやっておけば、後々他の人が見ても分かりやすいかと・・・
Column では文字列で得られるので、通貨型への変換・・・・
(文字列は "¥1,234" であろうが "1234" であろうが)
蛇足)
リストボックス上に表示した、元々 Null のものを参照した時には、
Null ではなく "" になるようです。(うそかも)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- Visual Basic(VBA) Excel VBA ユーザーフォーム内のラベルにテキストボックスの小計を出す方法 5 2022/08/17 14:27
- Access(アクセス) Accessテキストボックス内に2つのフィールドの値を比較して大きい方の値を表示させる方法 1 2022/09/09 10:50
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
このQ&Aを見た人はこんなQ&Aも見ています
-
Acccessで2つのテーブルから1つのフォームをつくりたい
Access(アクセス)
-
Access ¥マークを表示しない
Excel(エクセル)
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
-
9
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
10
Access サブフォームでの選択行の取得
その他(データベース)
-
11
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
12
yes/no型のチェックができない(アクセス2003)
Access(アクセス)
-
13
アクセス レコードセットを更新できません
その他(データベース)
-
14
Access:フォームプロパティ「ダーティー時」が使えない
Access(アクセス)
-
15
フォームのコントロールのバックカラーの色を変えたい
Visual Basic(VBA)
-
16
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
17
access マクロでのフィルタの解除の方法
Access(アクセス)
-
18
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
19
Accessでデータを更新したらその日付を自動入力したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
YahooのIDがロックされてしまい...
-
ACCESSでオートメーションエラー
-
Excelのデータフォームの設定変更
-
「フォームを作成できませんで...
-
大至急!アクセスのフォームを...
-
エクセルでフォームのDropDown...
-
MSワード 年齢を計算表示でき...
-
Accessで、フォームからフォー...
-
デフォルトでチェックボックス...
-
Access レポート印刷するときに...
-
アクセスで数値型のフィールド...
-
Word縦書きで左から右への行
-
サブフォームに対してGoToRecor...
-
passwordが入れられません・・・・
-
データベースのINT型項目にNULL...
-
親フォームからサブフォームの...
-
iphoneのフルスクリーンの解除方法
-
このオブジェクトに値を代入す...
-
アクセスでテキストボックスの...
-
アクセスのレポートで同ページ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「フォームを作成できませんで...
-
Excelのデータフォームの設定変更
-
YahooのIDがロックされてしまい...
-
フォームの高さを数値で指定し...
-
MSワード 年齢を計算表示でき...
-
Accessのフォームで開く時のウ...
-
デフォルトでチェックボックス...
-
大至急!アクセスのフォームを...
-
ACCESSでオートメーションエラー
-
Accessフォームを開くときに決...
-
エクセルで各セルをダブルクリ...
-
フォームなどに半角カナで入力...
-
access vba 開いていないフォー...
-
Accessで、フォームからフォー...
-
エクスポートされたエクセルの...
-
アクセス フォームをリクエリ...
-
ACCESS クロス集計クエリの抽...
-
Access2003 フォーム入力中に...
-
帳票フォームのなかにリストを...
-
アクセスで複数列にまたがる同...
おすすめ情報