• ベストアンサー

AccessのDataTableの行を列にしたい

SRL311の回答

  • SRL311
  • ベストアンサー率100% (2/2)
回答No.2

元データテーブル(氏名コード 項目1 項目2 項目3  1/1 1/2 1/3)を「テーブル1」とし、 生成するテーブル(氏名コード  列1 列2)を「テーブル2」と仮定し、以下のロジックで可能だと思います。 テーブル2の全フィールドのデータ型はテキスト型で作成してあります。 お試し下さい。 Function MakeTable() Dim SQL As String Dim RS1 As Recordset Dim i As Long SQL = "SELECT テーブル1.* FROM テーブル1;" Set RS1 = CurrentDb.OpenRecordset(SQL, dbOpenSnapshot) With RS1 Do Until .EOF For i = 1 To RS1.Fields.Count - 1 SQL = "insert into テーブル2 (" SQL = SQL & " 氏名コード" SQL = SQL & ", 列1" SQL = SQL & ", 列2" SQL = SQL & " ) Values (" SQL = SQL & " '" & RS1.Fields(0) & "'" SQL = SQL & ", '" & RS1.Fields(i).Name & "'" SQL = SQL & ", '" & RS1.Fields(i) & "'" SQL = SQL & " )" CurrentDb.Execute SQL Next i .MoveNext Loop .Close End With End Function

nanacyanyo
質問者

お礼

こんにちは、回答ありがとうございます。 教えていただいたコードで試そうと思ったのですが、 このコードはVBAになるのでしょうか? 現在、プログラミング初挑戦でVB2005を勉強中のため わからないところがあったので聞いてみました。 .Netでもコードの読み替え等で使えると思って良いのでしょうか?

関連するQ&A

  • DataGridViewで行選択して、対応するDataTableの行を得るには?

    いつもお世話になっております。VB2005環境です。 DataGridViewの行を選択したときに、そのソースであるDataTableの同じ行のデータを参照するには、どうしたらいいでしょうか。DataTableのデータをまるごとDataGridViewに表示しているわけではないので、必要に応じて直接DataTableから取得したいです。とても初歩的な質問だと思うのですが・・・。 DataGridView1.DataSource = DataTable  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Dim r As Integer = DataGridView1.CurrentCell.RowIndex Dim str As String str = DataTable.Rows(r)("項目名") MsgBox(str)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ このように行インデックスを取得してやってみたのですが、これだとDataGridView上でソートすると行番号が変わってしまい、DataTable側の対応する行のデータが得られません。 もう少し詳しく現状を書くと、まずCSVファイルからデータをロードして、DataTableに渡しています。そして、その内容をDataGridViewに表示しているのですが、表示する内容はデータテーブル通りの構造ではなく、表示する必要がある項目だけを選んで、1つずつカラムを追加してバインドいます。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ’自動で列を追加しないようにする DataGridView1.AutoGenerateColumns = False ’データソースを指定する DataGridView1.DataSource = DataTable ’1つ1つ順番などを変えながら列を追加していく Dim column1 As New DataGridViewTextBoxColumn() DataGridView1.Columns.Add(column1) column1.Name = "Date" column1.HeaderText = "日付" column1.DataPropertyName = "F4" Dim column2 As New DataGridViewTextBoxColumn() DataGridView1.Columns.Add(column1) column1.Name = "Locatoin" column1.HeaderText = "場所" column2.DataPropertyName = "F1" ・ ・ ・  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こんな感じでなので、表示されていない列のデータについては、必要に応じて直接DataTableから取得したいと思います。アドバイスよろしくお願いいたします<(_ _)>

  • DataTableの使い方についてアドバイス

    VB2008、SQLServer2008で開発しています。 フォームにリストボックス、ボタンを追加します。 リストにはテーブルから全データを表示します。 選択後、ボタンを押すと選択されたデータのコードを テーブルに書込みにいきます。 こういうものを作る場合、DataTableはフォームクラスでパブリックで作り 書込みで使うコードもDataTableから取得し フォームが終わるときに解放するのでしょうか? DataTableがオブジェクトとしてある間はDBにつなぎっぱなしでしょうか?

  • DataTableから条件を満たした行を別のDatatableへコピーしたい

    VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。 データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。 そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。 ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。 DataTableにはカラムが3列あり、その中の1列をグループIDとしています。 条件としてはグループIDが同じであるということです。 やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。 どなたかご存知の方いらっしゃれば教えてください。 よろしくお願いします。

  • VB2005からAccessに接続したい

    AccessのDBの列にDatetime型の列があって、日付と時間が入っています。 VB2005から年月日を指定して、その日付と合う行をすべて拾ってくるというプログラムを書いています。 ですが、日付と、日時を比較しているせいか、エラーが出てしまってうまく出来ません。 (データ型が合わないとか、パラメータが不足しているとかのエラーが出ます。) まずはそのまま比較してみたり、Likeを使ったり、Formatを使ったり、データ型をそれぞれ変更して色々とテストしてみたのですが、どうにもうまく出来なくて質問させていただきました。 VB2005からAccessのデータベースへ接続で、日時型のデータから日付が合うものを抽出するにはどうすればいいのでしょうか。 お分かりの方いらっしゃいましたら教えてください。 よろしくお願いいたします。

  • ACCESSのテーブルの行と列を入れ替えたい

    Access2000を使っているのですが、テーブルの行と列を入れ替えて、Excelへエクスポートを試みています。 しかし、Excelへのエクスポートのやり方は解るのですが、テーブルの行と列を入れ替えるやり方が解りません。 具体的には ID| 年月 |用件 01|2005/03|aaaa 02|2005/04|bbbb 03|2005/05|cccc とあるのもを ID  01 02 03 年月 2005/03 2005/04 2005/05 用件 aaaa bbbb cccc というふうに変換したいです。 よろしくお願いします。

  • VB2005 DataGridViewでの非バインド文字列のこと

    VB2005でDataGridViewを使ってプログラムをしているのですが。  DataTableとBiding(リンク?)しているDataGridViewで。 DataTableとバインドしてない項目X(非バインド列)をDataGridViewに新たに追加して。 例えば、DataTableの項目Yが1だと項目Xも1という風に表示させたいのですが。 一度目はうまく表示されるのですが。その画面を閉じてまた開いたら表示されないのですが。 どうしたら良いでしょうか?アドバイスをお願いします。 開発環境: XinXP Pro SQL Server2005 Express VS2005 Pro VB2005

  • アクセス テーブル 列を行にしたいのですが・・・・

    アクセス初心者ですが、ご教授頂けませんでしょうか?<abab123> ・2つのテーブルがあります。 ・入力者の都合上、どうしても行入力にできず、列入力になってしまった為、 テーブルを作り直す必要があります。 < 数量 テーブル > 機器| 商品1|商品2|・・ |商品100 ----------------------------------- 1 | 10 | 20 |・・| 30 2 | 40 | 50 |・・| 60 ・ ・ 10000| 70 | 80 |・・| 90 < 単価 テーブル > 機器 |商品1 |商品 2|・・|商品100 -------------------------------------- 1 |1,000 | 2,000 |・・| 3,000 2 | 4,000 | 5,000 |・・| 6,000 ・ ・ 10000| 7,000| 8,000 |・・| 9,000 ・こんなテーブルにしたいのですが。 < 結合 テーブル > 機器 |  商品 | 数量 | 単価 ---------------------------------------- 1 | 1 | 10 | 1,000 1 | 2 | 20 | 2,000 1 | ・ | ・ |  ・ 1 | 100 | 30 | 3,000 ・ | ・ | ・ | ・ ・ | ・ | ・ | ・ 10000 | 100 | 90 | 9,000 □ EXCELで、行列を入れ替えようと思ったのですが 機器(10,000) X 商品(100)= 1,000,000 行となり、 65,536行 の EXCEL2003では、断念しました。 VBAも考えましたが、16回(=1,000,000/65,536)、 EXCEL を ACCESSテーブルに貼り付けるのも??? Webで、アクセスSQL・・ユニオン・・・などがヒットするのですが、 良く解らなくて。。。です。 結合テーブルを効率的に作成する方法を、ご教授頂けませんでしょか?   宜しくお願い申し上げます。 □ アクセスはデーター処理で毎日使用しておりますが、 難しい処理をする訳ではなく、 テーブル作成、クロス集計等から、EXCELへ書き出し、 EXCELの資料を作成したりしています。

  • VB.NET DataTableについて

    質問失礼します。 VB.Netで、テーブルに格納されたデータをDataTableを利用し、SQLを実行、抽出してきました。 その結果から、さらに抽出したいのですが、方法がわかりません。 dataに格納したものは、問題なく抽出できています。(データセットビジュアライザーで確認済み) 以下、 番号 名前 合計 1 りんご 10 2 ぶどう 20 3 りんご 30 の、ように3行結果が取れました。 そこから、名前が重複していル値があるかどうか、またその数を確認したいです。 (りんごが、2行ある) この方法がどうしてもわからず、 Dim rows As DataRow() から rows = data.Select("名前 = りんご") とすれば、りんごが2行あると数がわかりますが、 これが、りんごとは、限らないため、 重複している名前があるか、どうかを調べたいところです。 勉強して、まだ浅く、わかりづらい説明で申し訳ありませんが、ご回答のよろしくお願いします。

  • ACCESSでの文字列の比較

    はじめまして、こんにちは。ACCESSについて教えてください。あるテーブルに列が1、2とあったとします行は全部で80万行です。1の列にあるデータを一つづつ取り出して、2の列にあるデータと比較し、一致していれば真を返して、一致していなければ偽を返すプログラム(つまり80万×80万の計算になるとおもいます。)を組みたいのですがどうすればいいのでしょうか?エクセルだと簡単にVLOOKUP関数でできると思うのですが、アクセスでのやり方がわかりません。データも80万件もあるのでエクセルが使えません。何かヒントとなるホームページやキーワードを教えていただけないでしょうか。よろしくお願いします。

  • VB.NETでDataTableにデータ追加したい

    VisualStugio.Net2003でソースコードを記述しており、コード内でSQLのSELECT文を実行して、実行結果をDataTableに格納する処理をしています。 今回、とあるテーブルに対し2パターンのSQLを実行し、それぞれの実行結果を1つのDataTableに格納したいのですが、どのようにすれば良いでしょうか? 自分で調べたところ、先に実行したSQL結果に、後から実行したSQL結果を1行ずつ追加するといった方法は見つかりましたが、1行ずつではなく、一括で追加する方法が知りたいです。 前提として、2回のSQL実行では、同じテーブルの同じ項目をSELECTしております。 下記に簡単ですがコード記述の概要を補足しておきます。 ・コード記述概要 【変数宣言】 Dim DB1 As DataTable Dim DB2 As DataTable 【SQL文1】 SELECT A,B,C FROM テーブル1 WHERE 条件文1 DB1 = SQL文1の実行結果 【SQL文2】 SELECT A,B,C FROM テーブル1 WHERE 条件文2 DB2 = SQL文2の実行結果 【DB1にDB2のデータを追加】←ここのやり方を知りたいです DB1 = DB1 + DB2 よろしくお願いいたします。