たとえばPC1よりPC2へTXT形式でデータを落としてきて、そのデータの行と列を入れ替え、それをAccessでリンクさせるという一連の作業を自動でできたらと思っているのですが、VBAは現在勉強注なのですが、ほとんどわからないためどうしたものかと思っています。
一度きりならエクセルなどで編集して列と行を入れ替えて使おうと思ったのですが、リンク元のtxtデータには毎日新しいデータを上書きするのでそうもいかないので、どうしたものかとろいろ考えたのですがよい考えが浮かびません。
どなたかよい方法を知っておりましたらぜひ、教えていただけないでしょうか。
よろしくお願いします。

A 回答 (1件)

Accessへリンクは出来ません。


 どしてもリンクしたいとなるといくつかの条件がつきます。
 行と列の数は毎回同じ。
 テキストを編集するプログラムを別途容易できる。
 毎回同じ場所に同じファイル名で保存される。

 上記条件が満たされるとなると、そのファイル名でリンクを作成する。
 後は、PC1の方でデータを作成する段階で、列と行を入換えるプログラムを作成すればOK


 上記条件が一つでも成り立たない場合は、VBAを使用して、テーブルの中にデータを入れ込む必要があります。
 どちらかっていうと、こちらの方が簡単(手間ですけど)
 作業内容は
1)テーブルを作成する。デフォルトは、一列しかないテーブル
2)1行目のTXTデータを読込む。
3)1行目のデータの一項目を読込んで、テーブルに保存する。
4)次の行をデータを読込んで、次のレコードに格納する。
5)4を終了まで繰返す
6)TXTデータの2行目を読込む
7)テーブルに1列使いする
8)追加したテーブルにデータを綱目毎に買い込む
9)8を終了まで繰返す
10)6から順次次のデータを読込んで、終了まで繰返す

って手法で、出来ると思います。
 列と行の数が固定ならもう少し簡単な方法はるのですけどね...。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
1>行と列の数は毎回同じ。
2>テキストを編集するプログラムを別途容易できる。
3>毎回同じ場所に同じファイル名で保存される。
上記の内容ですと3の部分しか当てはまらないのでやはり無理ですね。
なので、確かに手間がかかりそうですが、私にも何とか出来そうですので、後の手順を試してみようと思います。
アドバイス本当にありがとうございました。

お礼日時:2001/05/25 08:43

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

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

関連するカテゴリからQ&Aを探す

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

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

Q【アクセス】クエリで、行と列を入れ替えるには?【access】

こんにちは。
現在アクセスの勉強をしているのですが、
クエリの作り方で質問があります。
現在、営業マンごとの売上を集計しているのですが、
通常だとこのように列ベースで集計されると思います。

A男 100万
B男 200万
C男 300万

これを、以下のように行ベースで集計することは出来るのでしょうか?(エクセルのピボットがイメージです)

A男    B男    C男
100万   200万   300万

お手数お掛けしますがよろしくお願いいたします。

Aベストアンサー

クロス集計クエリでできます。
クエリの新規作成でウィザードが開きますので順次進めていけば出来上がります。
行を売上に列を営業マンに設定して値を合計にすれば出来ます。簡単ですよ。

QACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?

お世話になります。現在大量にデータを前に悩んでいます。

テーブルに以下のようなデータがあります。

| 薬剤名 | 効果 |
-----------------------
| A剤  | 頭痛 |
| A剤  |生理痛 |
| A剤  | 発熱 |
| B剤  | 歯痛 |
| B剤  |生理痛 |
| C剤  | 頭痛 |

これを、薬剤名ごとにまとめ効果を横へ並べる。

| 薬剤名 |効果1|効果2|効果3|効果4|
-------------------------------------------
| A剤  | 頭痛 |生理痛| 発熱 | |
| B剤  | 歯痛 |生理痛|   | |
| C剤  | 頭痛 |   |   | |

ことって出来るのでしょうか?
効果の数はいくつになるか分かりません。現在は最大7つですが、今後それ以上の物が出る可能性もあります。

ACCESSでは無理なことでしょうか?

また、ACCESSのバージョンは2002です。なお、ACCESSについては、使用法を含め初心者に毛が生えたくらいの知識しかありません。申し訳ありませんが「サル」にもわかるくらいの優しさでご指導願えれば幸いです。

よろしくお願いします。

お世話になります。現在大量にデータを前に悩んでいます。

テーブルに以下のようなデータがあります。

| 薬剤名 | 効果 |
-----------------------
| A剤  | 頭痛 |
| A剤  |生理痛 |
| A剤  | 発熱 |
| B剤  | 歯痛 |
| B剤  |生理痛 |
| C剤  | 頭痛 |

これを、薬剤名ごとにまとめ効果を横へ並べる。

| 薬剤名 |効果1|効果2|効果3|効果4|
-------------------------------------------
| A剤  | 頭痛 |生理痛| 発熱 ...続きを読む

Aベストアンサー

こういう場合は、<薬剤別効果一覧>などのテーブルを作成したらどうですか?

・<薬剤別効果一覧>テーブルをクリアする。
・<薬剤別効果情報>を取得する。
・<薬剤別効果一覧>テーブルに追加する。

一種の一時テーブルを作成するということです。
これですと、作成後は、いとも簡単に閲覧したりレポートに出力できます。

*少し、ADO を利用することになります。コードはサワリだけ。

薬剤名 効果総数 効果名_1 効果名_2 効果名_3
A剤   3    頭痛   生理痛  発熱

このように、<薬剤別効果一覧>テーブルにデータを登録するコードは以外と簡単です。

Private Sub コマンド_薬剤別効果一覧追加_Click()
  Dim isOK  As Boolean
  Dim strSQL As String
  
  isOK = CnnExecute("DELETE FROM 薬剤別効果一覧")
  If isOK Then
    strSQL = "INSERT INTO 薬剤別効果一覧 " & _
         "(薬剤名, 効果総数, 効果名_1, 効果名_2, 効果名_3)" & _
         " Values " & _
         "('A剤', 3, '頭痛', '生理痛', '発熱')"
    isOK = CnnExecute(strSQL)
    If isOK Then
      MsgBox "[薬剤別効果一覧] にデータを追加しました。"
    End If
  End If
End Sub

僅かに、CnnExecute()を自作ライブラリに追加するだけで、このように読めば判るコードが書けます。
これならば、質問者にとっても別に難しいことではないと思います。
SQL文は、Accessプロジェクトのそれですので Jetとは違うかも知れませんが基本は同じです。
課題は、strSQL の生成にあります。
ここが一つにハードルです。
まあ、それも含めて書くと、一つのプロシージャ全体を請け負うことになりますのでチョットです。

質問レベルからして、いずれ、この領域に踏み込む必要ありと感じましたので・・・。

Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
   MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & CnnErrors.Description & Chr$(13) & _
      "・Err.Number=" & CnnErrors.Number & Chr$(13) & _
      "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
      "・SQL Text=" & strSQL, _
      vbExclamation, " ADO関数エラーメッセージ"
End Sub

Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
   Dim isOK As Boolean
   Dim cnn As ADODB.Connection
  
   isOK = True
   Set cnn = CurrentProject.Connection
   With cnn
     .Errors.Clear
     .BeginTrans
     .Execute strSQL
     .CommitTrans
   End With
Exit_CnnExecute:
On Error Resume Next
   cnn.Close
   Set cnn = Nothing
   CnnExecute = isOK
   Exit Function
Err_CnnExecute:
   isOK = False
   If cnn.Errors.Count > 0 Then
     ErrMessage cnn.Errors(0), strSQL
     cnn.RollbackTrans
   Else
     MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
        vbExclamation, " 関数エラーメッセージ"
   End If
   Resume Exit_CnnExecute
End Function

こういう場合は、<薬剤別効果一覧>などのテーブルを作成したらどうですか?

・<薬剤別効果一覧>テーブルをクリアする。
・<薬剤別効果情報>を取得する。
・<薬剤別効果一覧>テーブルに追加する。

一種の一時テーブルを作成するということです。
これですと、作成後は、いとも簡単に閲覧したりレポートに出力できます。

*少し、ADO を利用することになります。コードはサワリだけ。

薬剤名 効果総数 効果名_1 効果名_2 効果名_3
A剤   3    頭痛   生理痛  発熱

この...続きを読む

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

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
というふうに変換したいです。
よろしくお願いします。

Aベストアンサー

Accessから直接は難しいと思いますが、Excelでは、次のように作表の行列を入れ替えできます。
1.入れ替えたい作表を選択し、コピー
2.「形式を選択して貼り付け」で「行列を入れ替える」にチェックをつけて任意の場所に貼り付け

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

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

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

Aベストアンサー

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

QAccess 条件に合うレコード数をカウントできません

下のようなクエリ結果を出す方法がわかりません。
Excelのcountif()のような関数はないのでしょうか?

●テーブル
日付 名前  売上
1/1 山口高   0
1/1 浅野   500
1/1 新美  1,000
1/2 山口高   0
1/2 浅野  1,000
1/2 新美  2,000
1/3 山口高 3,000
1/3 浅野  2,000

●クエリ: 1,000円以上売り上げた日数は?
   出勤数 1,000円以上の日数
山口高 3    1
浅野  3    2
新美  2    2

抽出条件: >= 1000
集計: カウント
としても、出勤数と同じ値で出力されてしまいます。
●正しくない現状
   出勤数 1,000円以上の日数
山口高 3    3
浅野  3    3
新美  2    2


1,000円以上の日数だけを抽出するクエリを、別に用意しなければならないのでしょうか?

Aベストアンサー

まず、「名前」の集計欄は「グループ化」、「日付」の集計欄は「カウント」のままでOKとします。
で、「売上」が1000円以上の時に"1"とするフィールドを設けて、内容を下記のようにします。

フィールド: → 「 1000以上日数: IIf([売上]>=1000,1,0) 」
集計: → 「合計」

このフィールドは[売上]が1000以上のときに"1"が立ちますので、それの合計を求めることで日数の合計とします。

こんな感じでしょうか(^^)

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QACCESSでVBAから選択クエリの抽出条件を指定したい

選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか?

DoCmd.RunSQL ではアクションクエリしか実行できないようだし、
DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

Aベストアンサー

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてます(^^)

ちなみに、
Me.
と打ち込んだ時点でオートコンプリート(名称あってるかな~)
機能が働いて参照できるオブジェクトが表示される
はずです。
その中にKojiさんが書いた埋め込みオブジェクトが
きっとあるはず
もしかすると"FormA"とか名前を付けたつもりでも
Visual Basic Editor君が気を利かせて
Form_formA
とかになってる場合があります。
最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫!

追伸
このコードって検索とかで使えますから
覚えておくときっと役に立ちますよ♪

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてま...続きを読む

Qカレントレコードが無い事を判定させる方法

SQLを使ってmdb内のレコードセットを取得し、
無かったらエラーを返す、という処理を作成
する場合、カレントレコードが無い事を
判定するにはどうすれば良いでしょうか?
イメージは下記のような感じです。

レコードセット as DAO.Recordset

'レコードセット取得
 Set レコードセット = db.OpenRecordset(作成したSQL文)

'判定
If カレントレコード無 Then
MsgBox "エラーメッセージ"
Exit Sub
End If

Aベストアンサー

カレントレコード無は"レコードセット.RecordCount = 0"
で行けませんか?

QAccessのフォーム上にレコード数とレコード番号の表示

Accessでクエリを元に表示するフォーム上で、テキストボックス等に関数を使って、レコード数とレコード番号を表示する方法がありましたら教えてください。

フォームの書式設定で「移動ボタン」の表示をすれば目的の事は出来るのですが、表示の大きさが調整できない為、とても見難いのです。

以上よろしくお願いします。

Aベストアンサー

レコード番号のコントロールソースを
=[CurrentRecord]
レコード数のコントロールソースを
=Count("*")-[NewRecord]
としてみてください。


人気Q&Aランキング