• ベストアンサー

アクセスのセルの数え方。

 こんにちは。いつもお世話になっています。今、VBを勉強中なのですが、Datagridを使ったAccessの使い方について質問があります。DatagridをつかってAccessを表示したとき、横(column)の列の数え方としては、 'Adodc1.Recordset.fields.item(index)' になりますよね?しかし、縦(Raw)の列の数え方がどうしても知ることができません。誰か、知っている人がいましたら、教えてください。お願いします。

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

  • ベストアンサー
  • oribeyaki
  • ベストアンサー率45% (18/40)
回答No.2

このような解釈でよろしいでしょうか? 「データ内の横の座標は項目名(FieldName)で指定することができるが、 データの縦の座標はどのように指定したらよいか?」 違っていたら以下の文は読み飛ばしてください・・・^^; 取得したデータは2次元ですから、横の座標だけでは当然、個々のデータを指定できません。 エクセルのシートが一番わかりやすいと思いますが、エクセルも”A1”とか”R1C1”と言う形で、縦横の座標でセルが特定されますよね。 それで、ご質問の件ですが、横の座標の指定はOKですね。 (FieldNameを指定する事) では、縦の座標はどうすればよいのか? 残念ながら、エクセルのシートのように4行目とかいった指定はできません。 じゃあどうするかと言うと、 RecordSetにある「Move」系のメソッドを使用します。 MoveFirst・MoveLast・MoveNext・MovePrevious・Move nn とあります。詳しい使用法はヘルプを見てください。 また、現在縦の座標の焦点がある行をカレントレコードと言います。 注意が必要なのは、このMove系のメソッドはカレントレコードからの移動になると言うことです。 例えば、最初は、カレントレコードは1行目にあるのですが、 そこで、MoveNextすると移動後のカレントレコードは2行目に移ります。 その次に、Move 10 とやると、移動前のカレントレコードから10行進んだ行になりますので、移動後のカレントレコードは11行目になります。 このような形で、横の座標は項目名で設定し、縦の座標はカレントレコードの位置を目的の行に合わせることで設定し、目的のデータセルを特定します。 こんなかんじで、縦の設定はカレントレコードからの相対位置になるので、なれないと頭こんがらがってしまいますが・・・^^; まあ、頭やわらかくしてやりましょう。 ちなみに私が仕事でやるときは、DataGridとかDataコントロールは使いません。 だって、頭こんがらがるから・・・(-△-;)

akumakozou
質問者

お礼

なるほど。これは、わかりやすい。今の時点での私の疑問は、まったく取れました。ありがとうございます。しかし、余談になりますが、VBは面白い反面難しいときはほんと難しいですね。ま、おそらくプログラムすべてに言えることでしょうけど。とにかく、ほんとにありがとうございました。

その他の回答 (1)

  • ykkw_2001
  • ベストアンサー率26% (267/1014)
回答No.1

Adodc1.Recordset にどのようなレコードセットをセットしているのでしょうか? できれば、プログラムを抜粋して聞いたほうがいいと思います。 あと、「数え方」というのは、ある値を参照する方法を知りたいのでしょうか?レコード数を知りたいということでしょうか? >'Adodc1.Recordset.fields.item(index)' になりますよね? う~ん、これが「columnの数え方」なのですか? データベースのレコード(やフィールド)のアクセス方法は、わかっているのでしょうか?VB(Access)での方法だけがわからないのでしょうか? VBに付属しているサンプルを見てもわからないということでしょうか?

akumakozou
質問者

補足

返事ありがとうございます。確かにこれだけじゃわからないかもしれません。最初は、すべてのコード記入しようとしたんですが、なにしろ800字制限なので、できるだけ小さくしようとしてあれだけになってしまいました。ところで、数え方というより示し方かもしれませんが、とにかく、adoc1.recordset.fields.item(index)もしくは、adoc1.recordset.fields(fieldname)をすることによって、横のフィールドの名前を指定してコードを書くことができるのは確かだとおもうのですが(例えば、Nameというフィールドに何かを記入したいときadoc1.recordset.Addnew のあとにadoc1.recordset.fields(Name) = txtName などとすると、txtName の中の文字がNameというフィールドに記入される。)はたして、ひとつのセルを対象にそういった記入とか削除とかできるのかという疑問です。ひとつのセルを対象にするには、field名だけでなく縦を示す名前が必要だとおもうのです。

関連するQ&A

  • データベースへのinfoの入力

     こんにちは、いつもお世話になっています。早速ですが、いま、VBの練習で、Microsoft Access のデーターベースを使ったプログラムを作っています。  ひとつのフォームにADODC と DataGrid を使って、アクセスのデーターを表示させ、下のFrameの中にVB作成のテキストボックスを作り、そこのテキストボックスに何かインフォメーションをいれ、”Add"コマンド(cmdAdd)をクリックするとそれらインフォメーションが新しいレコードとしてアクセスのデーターベースに記録されるようにしたいと思っています。 いまのところ、それらインフォメーションがアクセスのデーターベースに表示されるところまでは、できたのですが、上書き表示になってしまい、新しいレコードとしては、表示されません。もし、どなたか、解決方法を知っている方がいらっしゃいましたら、おしえてください。  一応、下に対象フォームのソースコードの一部を記入しておきます。まったく違っていたらどうか気になさらずにずばっと言ってくれたら幸いです。 Private Sub cmdAdd_Click() Dim intID As Integer, strFName As String, strLName As String, vntAddress As Variant, intID = Val(txtCustomerID.Text) strFName = txtFname.Text strLName = txtLname.Text vntAddress = txtAddress.Text adoCustomer.Recordset.Fields.Item(0).Value = intID adoCustomer.Recordset.Fields.Item(1).Value = strFName adoCustomer.Recordset.Fields.Item(2).Value = strLName adoCustomer.Recordset.Fields.Item(3).Value = vntAddress End Sub

  • AccessのDataGridコントロールについて

    初心者です。宜しくお願いします。 VB6.0でDataGridコントロールを使用する場合は、DataSourceプロパティにRecordsetオブジェクトを代入することによりDataGridコントロールに取得したレコードセットを表示しますが、 例) Set DataGrid1.DataSource = rs Access 2000ではDataGridコントロールにDataSourceプロパティが見当たりません。 どのようにしてレコードセットを表示するのでしょうか? Google等で検索しましたがVBの情報ばかりでAccessのDataGridコントロールに関して取り上げているページが見つかりません。 宜しくお願いします。

  • ADODCを使ったアクセスへの検索の仕方

     こんにちは。いつもお世話になっています。早速ですが、今、VBを勉強中なのですが、  ADODC(adoFind)を使って  datagrid(dgdFind)に  Microsoft Accessのデータを表示し、  テキストボックス(txtFind)と  コマンドボタン( cmdFind)を  それぞれ一つずつ用意し、そのテキストボックスに入力したものをアクセスデータの中から検索して出したいと思っています。(つまりは検索ボタンを作りたいのです。)  検索後のフォーカスは、アクセスのセル内で結構です。  また、何か違うコントロールや、オブジェクトを使っても一向に構わないと思っています。  ちなみにアクセスの表示の方法や、その他コントロールの作り方などはわかっています。ただ、上の検索ボタン(cmdFind)のコード(ここが一番重要なのに。)の書き方がわかりません。  どなたか書き方のわかる方いらっしゃいましたら、どうか教えてください。お願いします。

  • DataGridにテキストファイルの内容の表示方法

    VB2010 DataGridにテキストファイルの内容を表示 テキストファイルから任意の列(2列目)のデータを読み込み、Form1に配置したDataGridに読み込むにはどうしたらよいでしょうか? 下記のようなテキストファイルのデータがありまして、0.1などこの列のデータをDataGridに読み込みたいと考えています。 もし宜しければ、構文を教えて頂けないでしょうか。 VB2010の勉強を初めて1週間しか経っておらず、まだまだ勉強足らずです。 宜しくお願いします。 <テキストファイルのデータの内容> 1 0.1 *** 2 0.3 *** 3 0.5 *** ・ ・ ・

  • 別シートに任意のセルを転記する方法について

    縦に6行ずつのデータがあり、これを横1行の別シートに転記する際に、 以前こちらで回答頂いた方法を応用したいと考えています。 =IF(INDEX(Sheet1!$Z:$Z,(ROW(A1)-1)*6+COLUMN(A1))=0,"",INDEX(Sheet1!$Z:$Z,(ROW(A1)-1)*6+COLUMN(A1))) アドバイスのとおり、上記の数式で見事に横にデータが転記できました。社員1人につき6行ずつのデータが縦にならんでおり、これを別の社員1人あたり1行で横に並んだデータにしたいというものでした。 1人目のデータは1行目を1列目に、2行目を2列目に・・・2人目のデータである7行目を1列目に、8行目を2列目に・・・3人目は13行目を1列目に・・・となります。 しかし、順次並べるのではなく、転記の必要にないデータを含むシートの任意のセルを選び、別シートの任意のセルへ転記する必要が生じたため、悩んで路頭に迷っております。。。 例えば、6行ずつのデータのうち、いつも3行目を別シートの5列目に。4行目は転記せずに、5行目を6列目に。また、6行目を7列目に転記せずに10列目に転記する。(8・9列目は、別データを入力するため空白にしたい) そして、社員2人目である7行目からは、上記と同じ規則で転記したい。 などというように、選んで転記する方法は何かありますでしょうか?? =INDEX(Sheet1!$Z:$Z,(ROW(B2)-ROW($B$2))*6+IF(COLUMN()=4,MOD(COLUMN(B2)-1,6)+1,MOD(COLUMN(B2)-1,7))) のようにしても上手くいきません。 何卒宜しく御願いいたします。

  • テキストボックスにACCESSから取り出した値を入れたい

    VB6.0 ACCESS2000で開発しています。 テキストボックスにACCESSから取り出した値を入れたいのですが 作業員マスタというテーブルがあり そこには作業員IDと作業員名があります。 1つ目のテキストボックスの隣にコマンドボタン(▼)を作り そのボタンを押すとDataGridが出てきて 作業員IDと作業員名が表示されます。 そしてその中の該当する列をクリックすると 作業員IDは一つ目のテキストボックスへ 作業員名は二つ目のテキストボックスへ書かれます。 ここまで出来たのですが DataGridの表示を奇数列は白、偶数列は青にしたいのですが 何処をどうすればいいのかわかりません。 もしDataGridでは出来ないのであれば 他に良い方法を教えてください。 お願いします。

  • DataGridで特定行に対する背景色の設定

    お世話になります。 vb6で開発中なのですが、DataGridの行単位での背景色設定について質問させて下さい。 DataGridにはOracleで生成したViewをレコードソースに設定し、それを表示しているのですが、あるカラムの値が指定文字列を含む場合は、その行の背景色を変更して表示したいと考えております。 こういった事は可能でしょうか? 可能であれば、どのような方法が取れるかご教授願いたいです。 よろしくお願いいたします。

  • Access2007について教えてください。

    VB.NETを独学で勉強している者です。(知識はあまりありません) 学生時代にプログラムを勉強してた時、Accessのテーブル(試験の点数データ)をVB.NETのDavtaGridViewから表示するようなプログラムを作っていました。 テーブルのカラム構成としては、 ・テスト日時(8桁数値型、主キー) ・科目A(数値型、点数を入力) ・科目B(数値型、点数を入力) ・科目C(数値型、点数を入力) となっていて、これを画面上にそのまま表示する仕組みです。 今勉強で色々やっていて、これを以下のようなカラム構成にして画面に表示するように変更したいです。 ・テスト日時(6数値型、主キー) ・科目名(科目A、B、C、主キー) ・点数(数値) テーブルそのものはそのままで、Accessでクエリを作成してその結果を表示するか、VB.NETのプログラム上でテーブルのデータを操作するかで方法をネットなどで探してるのですがよい方法が見当たりません。 特に悩んでいるところが、上のように1行のレコードを複数の列に分けることはAccessかVBでどうやったら可能なのか、また「科目名」列の内容をどうやって前の表から紐付けるかということです。 詳しい方にお聞きしたいのですが上記の方法を実現するにはどういった方法が考えられますか? こういった技術が応用できるとか、ヒントになることを教えていただければと思います。

  • VB初心者ですAccessを更新したいのですが

    VB初心者です、よろしくお願いします。 VBでAccessのレコードの一項目を更新したいのですが出来ません。 抽出条件からAccessのデータを持ってきた後、更新したいのですがどうすればいいのでしょうか? 因みに抽出条件までは変更できません、AddNew以降でお願いします。 VB6でAccess2003です。 エラーは現在のRecordsetは更新をサポートしておりませ。プロダイバーかロックタイプの限界の可能性があります。 Set rst = New ADODB.Recordset '処理をするテーブル指定 rst.Open "[**]", db, adOpenStatic, adLockOptimistic With rst .MoveFirst .Filter = "" criteria1 = "" criteria1 = "**= '" & Module1.** & "'" .Filter = criteria1 If .RecordCount = 0 Then MsgBox "は登録されていません" Else .Filter = "" criteria2 = "" criteria2 = "**= '" & Module1.** & "' " .Filter = criteria2 If .RecordCount = 0 Then MsgBox "登録されていません" Else .Filter = "" criteria3 = "" criteria3 = "**'" & Module1.** & "' " .Filter = criteria2 If .RecordCount = 0 Then MsgBox "登録されていません" Else Module1.** = rst.Fields("**") .AddNew .Fields("***") = Module1.** .Update End If End If End If End With

  • accessレポート 列数印刷のタイトル

    accessレポートで横3列、縦3行に印刷していますが、 タイトルは、3列にする必要はなく一つのタイトルを 出したい場合はどうすればよいですか? よろしくお願いいたします