ジメジメする梅雨のお悩み、一挙解決! >>

現在ACCESS2003から出力されるレポートのレイアウトを作っています。
普段は余り使われないものの、ごく稀に100文字くらい書き込まれるテキストフィールドがあるのですが、その為に100文字分のスペースをレポート上に確保しておくのはとてももったいなく、レイアウトも窮屈になってしまいます。
そこで標準フォントを12の前提で50文字入るスペースを確保し、そのスペース以上のデータの場合には自動的にフォントサイズが小さくなるようなアレンジは出来ますか。
レポート上の対象フィールドの印刷時縮小プロパティを『はい』にしてみましたが、何も変りませんでした。よろしくアドバイスお願いします。

A 回答 (4件)

縦方向の可変であれば、テキスト型でも可能でしたね。


no3は読み捨ててください。
    • good
    • 0
この回答へのお礼

アクセスは難しくて私みたいな素人には判らないことだらけなので、アドバイス本当に助かります。ありがとうございました。

お礼日時:2009/05/29 10:14

縮小ではなく、本当に可変にしたいのであれば


単純に、テキスト型のそのフィールドを メモ型に変えます。
そうすれば、勝手に印字領域の行が増えたり、減ったりします。
印刷のレイアウトにもよりますが、データ型を変えるのも
お勧めです。
    • good
    • 0

>例えばフォントサイズが12or5の二者択一ではなくて、データ量が印刷範囲内であれば12とし、範囲を超えればその範囲内のすべてのスペースを有効に使う最適のフォントサイズにて表示されるという方法はありますでしょうか。

(ちょうどエクセルのセル設定にあるような機能です)

ACCESSには無いでしょうね。
それを実現しようとしたら、WIN API等で 文字のピッチを求めたり
かなりのプログラム知識がいるでしょう。
プロポーショナルだとさらに 複雑そうですね。
私には難しいです。お力になれなくて済みません。

テキストで文字数のMAXは設定しているのでしょうか?
2者択一で無くても、MAXサイズにもよるでしょうが
10文字単位の括りで、何通りも指定できるようにされてはどうでしょう
ベースを30文字以内だったら 12 
(数値は適当です)
40文字以内は 11
50文字以内は 10
60文字以内は  9



の様にです。
実際に該当のテキスト印刷サイズに対して
入る文字数を適当に洗い出せば、そこそこ見栄えの
良いものになると思います。
    • good
    • 0
この回答へのお礼

トライしてみます。アドバイス本当にありがとうございました。

お礼日時:2009/05/29 10:10

印刷時のイベントで判断すれば可能です。


例えば(Access2003で確認)
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
If Len(Me.ss) > 50 Then
Me.ss.FontSize = 5
Else
Me.ss.FontSize = 12
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
例えばフォントサイズが12or5の二者択一ではなくて、データ量が印刷範囲内であれば12とし、範囲を超えればその範囲内のすべてのスペースを有効に使う最適のフォントサイズにて表示されるという方法はありますでしょうか。(ちょうどエクセルのセル設定にあるような機能です)

お礼日時:2009/05/28 08:46

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

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

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

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

QAccessで文字列の長さによって、フィールドの幅を自動で合わせる方法

よく住所録を、レポートでプリンタに出力するのですが、人の名前や住所の長さが毎回違う為、調整に凄い時間がかかります。

A4用紙にきっちりと収めないといけないので、収まりきらないときは、名前のフリガナを少し省いたりすることもあります。

今はLen関数を使って文字の長さをある程度計って、おおまかに調整しているのですが、半角文字などが入ってくると、正確な長さが出なかったりします。

Accessにある機能を使って、レポートで出力するさいの、フィールドの幅を自動調整(フィールドに格納されている最大文字数が入る幅に調整)はできるのでしょうか?できないのでしたら、他に良い方法などございましたら、アドバイスして下さいませ!

宜しくお願いします。

Aベストアンサー

データの量に応じて、フィールドの横幅を自動調整することはできませんが、
縦幅なら調整できます。

イメージとしては、次のような感じです。

  データが少ない場合
  ┌───────┐
  │ああああああ │
  └───────┘

  データが多い場合
  ┌───────┐
  │あああああああ│
  │あああああああ│
  │あああああああ│
  │あああ    │
  └───────┘

上記のようなパターンでもよろしければ、
次の操作で、レポートのデザインビューを使い
プロパティの設定を行ってください。

1)レポートをデザインビューで表示
2)自動調整したいコントロールを選択
3)プロパティシートを表示
4)[書式]タブ内の[印刷時拡張]を[はい]に設定
5)プロパティシートが表示されたまま、
  自動調整したいコントロールのあるセクションを選択
    プロパティシートのタイトルバーが
    「セクション:○○」と表示されます
6)[書式]タブ内の[印刷時拡張]を[はい]に設定

以上です。
これで、データ量が多くなったときは、
縦にコントロールが伸びるようになります。

お役に立てばよいですが。

データの量に応じて、フィールドの横幅を自動調整することはできませんが、
縦幅なら調整できます。

イメージとしては、次のような感じです。

  データが少ない場合
  ┌───────┐
  │ああああああ │
  └───────┘

  データが多い場合
  ┌───────┐
  │あああああああ│
  │あああああああ│
  │あああああああ│
  │あああ    │
  └───────┘

上記のようなパターンでもよろしければ、
次の操作で、レポートのデザインビューを使い
プロパティの設定を行ってください...続きを読む

Qaccessのレポートのテキストボックス

accessのレポートのテキストボックスで文字数が多いと文字が入らず印刷時拡張を使ってもそのテキストボックスしか大きくならずアンバランスです,他のテキストボックスも一緒に大きくするか,文字を小さくしてテキストボックス内に入るようにするにはどうすればよいでしょうか?VBAを使ってもかまいませんので教えてください。

Aベストアンサー

こんにちは。

どういう感じのレポートか分かりませんが、
テキストボックスの高さを少し高くして改行ができるようにしては、どうでしょうか?
また、レポートの詳細のフォーマット時にテキストのフォント名、サイズは、変更できますよ。
例えば、そのテキストボックスの桁数を調べて、桁数が多ければ、フォントまたは、サイズを変更する。
ただ、これは、全テキストボックスをそうしたい場合は、記述が大変だし、
印刷するデータ件数が多い場合は、若干遅くなりますが...(^_^;)

こんな感じです。
レポートの詳細のフォーマット時で、

If Len(Me![テキストボックス名])> xx then ←何桁以上だった時
Me![テキストボックス名].FontName = "フォント名1" ←小さいフォント
Me![テキストボックス名].FontSize = xx ←小さく印刷する時のサイズ
Else
Me![テキストボックス名].FontName = "フォント名2" ←通常印刷するフォント
Me![テキストボックス名].FontSize = xx ←通常の指定のサイズ
End

これで出来ます。
よい回答じゃないかもしれないですけど、本職じゃないのでご勘弁下さい。
では。



では。

こんにちは。

どういう感じのレポートか分かりませんが、
テキストボックスの高さを少し高くして改行ができるようにしては、どうでしょうか?
また、レポートの詳細のフォーマット時にテキストのフォント名、サイズは、変更できますよ。
例えば、そのテキストボックスの桁数を調べて、桁数が多ければ、フォントまたは、サイズを変更する。
ただ、これは、全テキストボックスをそうしたい場合は、記述が大変だし、
印刷するデータ件数が多い場合は、若干遅くなりますが...(^_^;)

こんな感じです。...続きを読む

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 IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QAccessのフォーマット時イベント

宜しくお願いいたします。

Accessを使用していますが、
レポートの詳細セクションの[フォーマット時]
イベントについて教えてください。

この[フォーマット時]というイベントは、具体
的にいうと、どんなイベントのことを指してい
るのでしょうか?

[クリック時]イベントはマウスがクリックされ
たときなのは良く分かりますが、
レポートの詳細セクションがフォーマットされ
るときとはどういう意味なのでしょうか?

教えてください。

Aベストアンサー

通常レポートを印刷(プレビュー)するとき、まず内部でそのイメージを構築します。

このとき、一般的には設定してある紙の印刷可能領域からページヘッダーと、ページフッターを確保します。

その後に詳細部分を繰り返して残りの印刷可能領域に詳細を詰めていきますが、あるところまで行ったときに詳細の途中で印刷可能領域が足りなくなったとします。このときにその一つ前のレコードまででイメージを再フォーマットします。(プロパティーで項目を1ページに収める設定がしてある場合)

このようにフォーマット時は場合により数回繰り返されたりもします。フォーマットイベント内で回数のカウントなどしてみるとよくわかると思います。

また、フォーマットイベントの引数に何回フォーマットを行っているかというのもあったと思います。
必要により1回目のフォーマとの時のみに何か処理をさせるといったことも可能です。(たとえばSUMを使わずに項目の合計を求めるなどと行ったこと)

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

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

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

Aベストアンサー

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

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

こんにちは。

Access初心者です。

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

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

Aベストアンサー

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

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

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


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

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

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

Me.CurrentRecord

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

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

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】フォーム名/コントロール名を文字列型変数で指定するには

バージョン: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)

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


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

人気Q&Aランキング

おすすめ情報