Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2016)
グラフ機能でできますか?
投稿日時: 17/05/19 09:11:52
投稿者: きき

下記のデータで階段状のグラフが表示されるようにしたいのですが、
作成手順がわかりません。
Excelでは散布図でできていました。
Accessではどのようにすればいいでしょうか?
ちなみにAccessでグラフは初めて使います。
ご教授願います。
 
[距離] [高さ]
0.0    10.00
3.0    10.35
3.0    10.40
12.0    10.40
12.0    10.45
16.0    10.45
16.0    10.50
23.0    10.50
23.0    10.55
26.5    10.55
 
※距離は、原点からの距離です。

回答
投稿日時: 17/05/19 09:56:17
投稿者: sk

1. フォーム/レポートの任意のセクションに
   新規のグラフオブジェクトを挿入する。
   (この時点でグラフの種類を折れ線付き散布図にしておく)
 
2. 1 のグラフオブジェクトの[値集合タイプ]プロパティが
   「テーブル/クエリ」に設定されていることを確認した上、
   [値集合ソース]プロパティに以下のような選択クエリ
   または SELECT 文を設定する。
 
( SQL ビュー)
------------------------------------------------------------
SELECT [テーブル名].[距離],
       [テーブル名].[高さ]
FROM [テーブル名]
ORDER BY [テーブル名].[距離];
------------------------------------------------------------
(テーブル名は適宜修正すること)
 
3. 1 のグラフオブジェクトをダブルクリックするか、
   グラフオブジェクトを選択している状態で
   マウス右クリック->[グラフオブジェクト]->[編集]を
   クリックするかして、グラフを編集モードにする。
 
4. メニューバーより[データ]->[系列を列方向に定義]を選択する。

投稿日時: 17/05/23 17:15:03
投稿者: きき

おかげさまでグラフを表示することができました。
 
追加で質問なのですが、
データラベルの代わりに文字列(別フィールド)を
表示させることは可能でしょうか?

投稿日時: 17/05/23 17:17:41
投稿者: きき

[距離] [高さ] [CODE]←このフィールド値を表示させたい

回答
投稿日時: 17/05/24 10:40:17
投稿者: sk

引用:
追加で質問なのですが、
データラベルの代わりに文字列(別フィールド)を
表示させることは可能でしょうか?

引用:
[距離] [高さ] [CODE]←このフィールド値を表示させたい

出来なくはありませんが、VBA を使用する必要があります。
 
フォーム上のグラフに関しては、例えば
以下のようなコードをフォームモジュールに
記述なさればよろしいでしょう。
 
(フォームモジュール)
-------------------------------------------------------------
'フォームの[読み込み時]イベント
Private Sub Form_Load()
     
    '変数の宣言
    Dim grhChart As Object 'Graph.Chart
    Dim grhSeries As Object 'Graph.Series
    Dim grhDataLabel As Object 'Graph.DataLabel
     
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
     
    Dim strSQL As String
     
    'グラフの設定
    With Me.グラフ名
        '[値集合タイプ]プロパティの設定
        .RowSourceType = "テーブル/クエリ"
        '[値集合ソース]プロパティの設定
        strSQL = "SELECT [距離], [高さ]" & _
                 " FROM [テーブル名]" & _
                 " ORDER BY [距離], [高さ];"
        .RowSource = strSQL
        '再クエリ
        .Requery
        '埋め込まれている Graph.Chart オブジェクトの参照
        Set grhChart = .Object
    End With
         
    '1つめの系列の参照
    Set grhSeries = grhChart.SeriesCollection(1)
     
    '系列のデータラベルの表示
    grhSeries.HasDataLabels = True
     
    'カレントデータベースの参照
    Set db = CurrentDb
     
    '[テーブル名]のレコードを[距離],[高さ]の昇順に並べ替え、
    '全てのフィールドを返す SELECT 文
    strSQL = "SELECT *" & _
             " FROM [テーブル名]" & _
             " ORDER BY [距離], [高さ];"
     
    'レコードセットを開く
    Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
     
    '系列上のデータラベルを順次参照
    For Each grhDataLabel In grhSeries.DataLabels
        '読み込むべきレコードがない場合はループを抜ける
        If rs.EOF Then
            Exit For
        End If
        '参照中のデータラベルのテキストの書き換え
        grhDataLabel.Text = rs![CODE].Value
        '次のレコードへ移動
        rs.MoveNext
    Next
         
    '参照解放
    Set rs = Nothing
    Set db = Nothing
    Set grhDataLabel = Nothing
    Set grhSeries = Nothing
    Set grhChart = Nothing
 
End Sub
-------------------------------------------------------------
 
レポート上のグラフに関しては、デザインビューでなければ
グラフの設定を行なうことが出来ませんので、
レポートモジュールに上記のようなコードを記述しても、
実際には動作させることが出来ません。
(したがってファイル形式が mde / accde である場合や、
 Runtime 環境で動作させる場合は実現不可能)

投稿日時: 17/05/27 08:17:51
投稿者: きき

引用:
(したがってファイル形式が mde / accde である場合や、
  Runtime 環境で動作させる場合は実現不可能)

なるほど、accdeでは無理なようですね。
引用:
'系列上のデータラベルを順次参照
    For Each grhDataLabel In grhSeries.DataLabels
         '読み込むべきレコードがない場合はループを抜ける
        If rs.EOF Then
             Exit For
         End If
         '参照中のデータラベルのテキストの書き換え
        grhDataLabel.Text = rs![CODE].Value
         '次のレコードへ移動
        rs.MoveNext
     Next

ならば、と思いつき、このコードを参考に、データラベルではなく
ラベルコントロールでCODEを表示させることができました。
 
グラフのLEFT,TOPや[距離][高さ]を使って苦労しましたが、
思っていたものができました。
ありがとうございました。