• ベストアンサー

ACCESS データシートビューでの回転

こんにちは。 ACCESSに詳しい方のご意見をうかがいたくお尋ねします。 現在エクセルで処理を行っている業務があるのですが、これを効率化のためにACCESSに移植する事を検討中です。 その中に受注一覧表というのがあり、数か月分の受注状況をフォームに表示したいのですが、現在のエクセルでは日付を横方向にスクロールするように作っています。 ACCESSでもそれと同じ動きを実現するためには、レコードを一番上の行(もしくは下の行)に追加するのではなく、一番右の行に追加するという作る必要があります。 データシートビューでそのような表示は可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • gadd3
  • ベストアンサー率46% (211/451)
回答No.7

できますなら、ユーザーに日付を縦方向に取る表や画面になれてもらうのが一番コストがかからないと思いますけど でないと無駄な作業ばかりが増える羽目になると思いますけど データベースは一般的に時間軸は縦方向に取るように仕組み上なっていますからそれに逆らうとあとあと不便なことになってしまう気がします 今回限りにしておくことをお勧めます

kunisada
質問者

お礼

非常に丁寧な回答に深く感謝します。 それぞれの回答に対してお礼を書くべきですが、この欄で全回答へのお礼とさせて下さい。 まず私の質問の意図ですが、エクセルにはX軸とY軸を回転させるチェックボックスがあったはずなのでアクセスのデータシートビューでもそれが可能なのかどうかを確認したかったのです。 私が確認した範囲ではその機能はなさそうだったのですが、お二人の回答でそれができない事が確認できました。 また、この回答欄でご指摘くださった通り、ソフトウェアの仕様に準じない設計は無理がありそうな事から、今回は時間軸を縦にするように設計変更をしようと思います。 せっかくのサンプルコードを生かす事ができずに申し訳ありません。

その他の回答 (6)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

肝心なことを書くのを忘れていました。 No2の(3)で作ったフォームのボタンを クリックするとインポートしたデータを 収めたテーブル「Sheet1」からテーブル 「T受注明細」へデータを移動します。 (5)~(7)で作成したフォームのボタン「cmd追加」 をクリックすするとテキストボックスに入れた データを「T受注明細」へ入れ、そのデータを元に 「Q受注」の結果が変更され、変更された結果を フォームに表示するためにサブフォームの表示 コントロールのソースオブジェクトを再設定 して表示しなおす、ということをしています。 Q受注はクロス集計クエリですが、クロス集計クエリ には直接データを入力したりできないのでこのような 方法をとります。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

No2の追加をもう一つしておきます。 No2の(7)で、 Private Sub cmd初期化_Click() Me!tx日付 = "" Me!tx名前 = "" Me!tx受注 = "" End Sub としていますが、同じ日にデータを集中して 入力するならば、日付は消さずにそのままにして、 Private Sub cmd初期化_Click() Me!tx名前 = "" Me!tx受注 = "" End Sub でもいいのでは、と思います。そのあたりは ボタンを数個用意し、状況に応じて使いわける などの設定もいいのでは、と思います。 これは入力時の便宜を図るものですから、特に 重要というわけではありませんが。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No2の追加をしておきます。 No2で、 >なお、名前がダブって同じ日に登録されるものか >わかりませんが、一応ないものとしています。 >ある場合は、Accessにデータを移動した後処理を >することになりますが。 としていますが、 (1) 入力するデータで、一日のうち以下のように 同じ人物から複数回あった場合には入力時には すべて合計したデータを入力するならば No2のままでいいです。 名前   2011/1/1  2011/1/2  2011/1 /3・・・・・・ 徳川    200     30     90 豊臣    100    120     60 伊達    60     200     150 徳川    300           120 豊臣          300 (2) 入力時に合計せずにそのまま入力し、表示で 合計しておく場合は、Q受注を以下にします。 TRANSFORM Sum(T受注明細.受注) AS 受注の合計 SELECT T受注明細.名前 FROM T受注明細 GROUP BY T受注明細.名前 PIVOT Format([日付],"Short Date"); (3) 合計せずにそのまま表示する場合は、Q受注を 以下のようにします。 TRANSFORM First(T受注明細.受注) AS 受注の先頭 SELECT T受注明細.ID, T受注明細.名前 FROM T受注明細 GROUP BY T受注明細.ID, T受注明細.名前 ORDER BY T受注明細.ID PIVOT Format([日付],"Short Date");

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。 訂正です。 No2の(6)の最後あたり、 >db.Close: Set rs = Nothing となっていますが、正しくは、 db.Close: Set db = Nothing です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

以下はAccessのバージョンによって出来るかは 確認していませんが、多分できるだろうという 予測のもとに作成しています。 同じような状況の事が以下のところに記載されています。 http://www.mahoutsukaino.com/ac/ac2000/vba2000/03/000001.htm ただし、上記はExcelのデータをAccessに取り込み、 取り込んだデータを別テーブルに入れ直すところ までです。 上記はADOですが、ここではDAOですべて行ないます。 コード表のツール、参照設定からDAAにチェックを いれてください。 Micrososft DAO 3.6 Object Library のようなものです。チェックをいれたら ↑ボタンで上げられるところまで上げて ください。 (1) Excelでデータが以下のように並んでいるものします。 名前   2011/1/1  2011/1/2  2011/1/3・・・・・・ 徳川    200     30     90 豊臣    100    120     60 伊達    60     200     150 なお、名前がダブって同じ日に登録されるものか わかりませんが、一応ないものとしています。 ある場合は、Accessにデータを移動した後処理を することになりますが。 このデータをこのままAccessからインポートします。 インポート時には上記の名前というデータが入力 されている必要があります。 Accessの外部データの取り込み、インポートから、 Excelファイルを指定して、インポートを押します。 データのあるシートを指定して、次へ行き、 「先頭行をフィールド名に使う」にチェックを入れ、 次に行き、「新規テーブルに保存」にチェックを入れ 次に行き、また次に行き、「主キーを設定しない」に チェックを入れ、次に行き、「インポート先のテーブル名」 に適当な名前をいれ、完了をおします。 「インポート先のテーブル名」は何もしなければたとえば データのあるシート名がテーブル名になります。たとえば 「Sheet1」のようになります。ここでは分かりやすく 「Sheet1」とします。 (2) テーブルを一つ作ります。テーブル名は「T受注明細」 フィールドは、 ID    オートナンバー 日付   日付/時刻型 名前   テキスト型 受注   通貨型 主キーは設定しません。 (3) フォームを一つ作りそのフォームに ボタンを一つ設定します。 そのボタンの「クリック時」のイベントに 以下を設定します。 Private Sub コマンド0_Click() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim i As Integer Dim j As Integer Dim str As String Set db = CurrentDb Set rs1 = db.OpenRecordset("Sheet1") Set rs2 = db.OpenRecordset("T受注明細", dbOpenDynaset) i = rs1.Fields.Count - 1 j = 0 Do Until i = j j = j + 1 If rs1.RecordCount > 0 Then rs1.MoveFirst str = rs1.Fields(j).Name Do Until rs1.EOF rs2.AddNew rs2!日付 = str rs2!名前 = rs1!名前 rs2!受注 = rs1.Fields(j) rs2.Update rs1.MoveNext Loop Else Exit Do End If Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing db.Close: Set db = Nothing End Sub 保存して閉じます。 (4) クエリを一つつくります。 以下を新しいクエリのSQLビューに貼り付け、 ほぞんしてください。名前は「Q受注」とします。 TRANSFORM First(T受注明細.受注) AS 受注の先頭 SELECT T受注明細.名前 FROM T受注明細 GROUP BY T受注明細.名前 ORDER BY T受注明細.名前 PIVOT Format([日付],"Short Date"); (5) フォームを一つつくります。 フォームのデザインビューで、フォームに 「フォームヘッダ/フッタ」を設定します。 フォームを適当に大きく広げ、「フォームヘッダ」の 下の部分にテキストボックスを三つ、ボタンを二つ 設定します。名前は、 tx日付    テキストボックス tx名前    テキストボックス tx受注    テキストボックス cmd追加    ボタン cmd初期化   ボタン とします。 次に、フォームの「詳細」の下に「サブフォーム」 を表示するコントロールを設定します。初期値は 「埋め込み0」のような名前になっています。 一応名前はそのままにしておきます。 その上で右クリックから、ソースオブジェクト の項で、「クエリ.Q受注」を選択し、保存します。 (6) 「cmd追加」のクリック時のイベントで以下のように 設定します。これはテキストボックスに入力した データをテーブルに保存し、改めてフォームの ソースオブジェクトを設定しなおして、データを 再表示するものです。なお、コード中の埋め込み0 はサブフォーム表示コントロールですが、この場合は このコントロールにクエリを表示します。 Private Sub cmd追加_Click() Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T受注明細", dbOpenDynaset) If rs.RecordCount > 0 Then rs.MoveFirst Do Until rs.EOF If rs!日付 = Me!tx日付 Then rs.AddNew rs!名前 = Me!tx名前 rs!受注 = Me!tx受注 rs.Update Exit Do Else rs.AddNew rs!日付 = Me!tx日付 rs!名前 = Me!tx名前 rs!受注 = Me!tx受注 rs.Update Exit Do End If rs.MoveNext Loop End If Me.埋め込み0.SourceObject = "クエリ.Q受注" Me.Refresh rs.Close: Set rs = Nothing db.Close: Set rs = Nothing End Sub (7) 「cmd初期化」のクリック時のイベントで、以下を 設定します。これはテキストボックスに入力した データを消す為のものです。 Private Sub cmd初期化_Click() Me!tx日付 = "" Me!tx名前 = "" Me!tx受注 = "" End Sub 以上です。なお、データがない状態から始める場合は、 (2) (4) (5) (6) (7) の順番でテーブル、クエリ、フォームを作りデータを 入力してみてください。

回答No.1

> データシートビューでそのような表示は可能でしょうか? 表示だけなら、クロス集計クエリを使えば可能ですが、データ入力や編集は不可能です。 入力もできるようにするには、非連結フォームで、テキストボックスを多数並べて、VBAで、テーブルからデータをセット、編集後のデータをテーブルへ書き込む、等すべて自前で処理をする必要があります。 かなりの工数になりますし、それなりのスキルも必要です。

kunisada
質問者

お礼

回答ありがとうございます。 理論的にはご指摘の方法で実現可能である事は理解できますが、現実的にはかなり困難ではないかと考えます。

関連するQ&A

  • Accessのデータシートビューでのフィルタ

    現在Access2010でシステムを作成しています。 データシートビューで,EXCELのフィルタと同じ様に操作したいのですが,チェックボックス付きの一覧が表示されるフィールドと,表示されないフィールドがあります。 どのようにすれば,全てのフィールドでチェックボックス付きの一覧を表示させることができますでしょうか? フォームのRecordSourceは動的に変更おり,また内部結合したクエリをRecordSourceとしています。

  • Accessデータシートビューの行指定について

    Access 2003でVBAでフォームにサブフォーム(データシートビュー)を組み込んで 一覧表を作成しております。 ・選択されたレコードの行番号のようなものを取得する ・指定行の列の値を取得する 記述方法を探しております。 VB.netなどのDataGridViewのように Rowなどで取得する方法などはないのでしょうか? ご存知の方、ご教授よろしくお願いいたします。

  • ACCESSでのデータ削除について

    XP&ACCESS2003 メインフォーム/サブフォーム形式のフォームで、受注番号で連結しています。 メインフォームが受注、サブフォームが受注明細です。(1対多) サブフォームに削除ボタンをつけて、受注明細のレコードを1件削除するようにしています。以下が削除ボタンのクリック時のプロシージャーです。 DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 クリックした段階で、クエリーで見てみると確かに削除されています。 ただ、フォームを再度開くと空のデータが追加されています。(=削除前とレコード件数は同じ) このサブフォームでは、レコード追加時にフィールド「行」に行ナンバーを入力させるために、隠しで [行NO]テキストボックスを持たせて、自動的に行NOをいれています。 サブフォームの挿入前処理は以下です。 [行NO] = Val(DMax("[行NO]", "Q_受注_工程_明細_行NO") & ".0") + 1 削除してもこの行NOが自動的に別のレコードを追加しているようです。 何か、よい方法をご存知の方、よろしくお願いします。

  • ACCESS フォームでデータシートビューの表示

    いつもお世話になっています。 ACCESSでフォーム上のコマンドをクリックすると、表示するデータを「データシートビュー」に固定するにはどうしたいいのでしょうか? 現在 DoCmd.OpenForm "F_情報", AcFormDatasheetTable としていますが、フォームビューで表示されてしまいます。 どこが間違っているのか分かりません・・・。 よろしくお願いします。

  • [ACCESS]クエリで抽出したレコードをデータシートビューで編集するには?

    ACCESS2003です。 クエリで集計&グループ化したレコードをデータシートビューで編集したいのですが無理なのでしょうか? クエリ内容 フィールド |集計   |並び替え|抽出条件 製品名   |グループ化|    | セイヒンメイ|グループ化|昇順  | 販売元   |最後   |    | 単価    |最後   |    | 在庫    |最後   |    | 残高    |最後   |    | 製品区分  |     |    |<=6 クエリ実行後の「在庫」と「残高」は空なので データシートビューで編集(追加)したいのですが 無理なのでしょうか? 抽出したレコードの一覧で編集、追加を行いたいのです(エクセルのような感じ)が、 クエリではなく他の方法で可能であれば教えてください。

  • AccessVBAデータシートビューの挙動について

    Access2003を用いて、 メインフォームにサブフォーム(データシートビュー:表)を組込み 一覧表を作成しております。 【問題】 プログラムコード上で、実行ボタンを押すと データシートの全行にあるAAAというテキストに一前の行の値をセットする 記述を下記のようにしております。 For i = 1 to 表最大行数 Me.SelTop = i '処理行の指定 aaa.value = strAAA '1行前の「項目:AAA」データをセット strAAA = aaa.value '現在行の「項目:AAA」データをセット保持 Next データシートビューの各行のAAAというテキストに値をセットする度に、 フォーカスがあたる為か、どんどん最後の行のAAAテキストにフォーカスが移動していってしまい 最終的には、フォーカスが自動スクロールで最後の行まで移動してしまいます。 フォーカス自体は、最終的に最初の行には戻す処理は入れたのですが、 見栄えを考えると、ボタンを押すたびに、データシートビューがスクロールするのは あまりよろしくなく、スクロールをさせず(値にフォーカスを当てず)に データをセットする方法を探しています。 --------------------------------------- 初歩的なことだろうとは思いますが、 ご存知の方ご教授願います。

  • ACCESS フォームでの、データシートビューで表示できない

    ACCESS フォームで、 データシートビューで表示させたいのですが、 コマンドボタンから表示させる場合だと 単票形式の表示になってしまいます。 そのフォームを単独で起動させた場合は、指定通りに表示できるのですが・・・ プロパティの「規定のビュー」の項目は「データシート」と入力しております。 どうかご教授願います。

  • ACCESSのデータシートビューでレコード(行)をクリックした時イベントを発生させるには

    ACCESSのフォームにデータシートビューが貼り付けてあります。 ここにはAのテーブルのレコードがいくつか表示されていますが、 この行(レコード)の一部をクリックするとイベントを発生させるということは できるのでしょうか? またこのレコードの特定の値を取得するには? 例:TABLE名 野菜 フィールド:野菜名、値段 レコード1:とまと、100円 レコード2:キャベツ、200円 レコード3:なす、150円 1行で表示されているレコード3のなすか150円またはレコードセレクタをクリックすると イベントを発生させる。 150円という金額を取得する *なす、150円個別でクリックしたときのイベントは受け取れるのですが… フィールドが多い場合にどこをクリックしても同じイベントを発生させたいのです。 以上わかりにくい文章ですみませんが、宜しくお願いします。

  • データシートビューからフォームビューへ切り替えられない。

    こんにちは。 以前、DexMachina様にご教授頂いたのですが 違うフォームを作っていたら データシートビューからフォームビューへ切り替えられないので教えてくださいませ。(アクセス2003) 前回質問:http://okwave.jp/qa4982081.html フォーム上(デザインビュー)にテーブルをドラッグしました。 (サブフォームのデフォルトのビューは、データシートビューになっていますが単票ビューに切り替えました。) 一度保存し、再度フォームを開くと、単票ビューで表示されるので その状態で、 Sub test() Forms("フォーム1").SetFocus Select Case Forms("フォーム1").Form.CurrentView Case 1 'フォームビューの場合 → データシートビューに切替 DoCmd.RunCommand acCmdSubformDatasheetView ' Forms("フォーム1").DefaultView = 2 Case 2 'データシートビューの場合 → ピボットテーブルに切替 DoCmd.RunCommand acCmdSubformPivotTableView End Select End Sub を実行すると、ちゃんとデータシートビューに切り替わります。 そしてデータシートビューからフォームビューへ切り替えようと思い 再度上記のコードを実行しても何も起こりません。 (エラーにもなりません) なぜでしょうか? ちなみに規定のビューをデータシートビューにして上記マクロを実行しても同様何も起こりません。データシートビューのままです。 MsgBox Forms("フォーム1").DefaultView で値を取得してみたら データシートビューでもフォームビューでも0が返って来ます。 何か原因がわかる方いらっしゃいましたら ご教授よろしくお願いします。

  • アクセスでフォームビューがみれません?

    アクセスのデザインビューでは表示があるのに、フォームビューにしたら、表示されなくなってしまいました。どこかをさわったのかもしれないのですが、分かりません。どなたか教えてください。よろしくお願いいたします。