こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

横長フィールドを縦にまとめる

いつもお世話になります
エクセルがらアクセスにデーターを落としたのですが
もともとのデーターが
フィールド
品名 CD 品名 CD 品名 CD 品名 CD・・・・・
となっています
エクセルのデーターを加工せず
イベントプロチャジャーで
品名 CD
の縦長データーにするデーターをお教えください宜しくお願い致します

投稿日時 - 2003-06-15 18:42:10

QNo.575868

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

再びstorkです。
追加クエリです。

30列くらいなら列名を手で変えながら30回追加クエリをやったほうが早いでしょう。エクセルをインポートする際に列名を1、2、...と入力しやすい名前を付けておくとやりやすいでしょう。

VBAのループで上記のクエリを実行する手もありますが、手作業でやったほうが早いと思いますよ。

それぞれのクエリを保存しておけばあとで再実行も出来ます。

投稿日時 - 2003-06-21 17:48:14

ANo.4

1回だけのことですよね?
クエリで処理しましょう。

投稿日時 - 2003-06-19 23:00:41

補足

有難うございます
クエリで処理というのは追加クエリのことですよね

投稿日時 - 2003-06-20 21:35:36

ANo.3

#1,2です。
まず、Excelデータのバックアップをとってください。
で、コピーのデータでやってみてください。

まず、見出しの行を削除して、データだけの状態にしてください。

そして、VBEの画面を開いてください。(Excelの画面でAlt+F11キー)
標準モジュールにしたのコードを貼り付け、修正してください。

1. 最大行数は「300行」、最大列数はコード・品名あわせて「30列」で一応設定してありますので、最初の方のConst行に設定してある数値を、実状にあわせて書き換えてください。

また、最大列数は、
品名とコードが対になっているはずですから、
当然ですが、必ず偶数になるようにしてください。

また、最大行数×(最大列数/2)が、
Excelの最大行数65536を越えないようにしてください。


2. シート名は一応Sheet1にもとのデータ、そして加工後のデータがSheet2に出力されるようにしてありますので、これもConst行を実情に応じて書き換えてください。


できあがったデータは、Sheet2に見出しなしの状態で出力されますので、これをアクセスにインポートしてください。


Option Explicit

Sub test()
'lngRow * lngColが,65536を越えないよう注意
Const lngRow As Long = 300 '最大の行数
Const lngCol As Long = 30 '最大の列数(偶数)
Const strSheet1 As String = "Sheet1" 'シート名(もとデータ)
Const strSheet2 As String = "Sheet2" 'シート名(加工データ)
Dim i As Long

'1列につなぐ
For i = 0 To Int(lngCol / 2) - 1
Sheets(strSheet1).Select
ActiveSheet.Range(Cells(1, i * 2 + 1), Cells(lngRow, i * 2 + 2)).Copy
Sheets(strSheet2).Cells(lngRow * i + 1, 1).PasteSpecial
Next i

'ソート
Sheets("Sheet2").Select
Columns("A:B").Select
Selection.Sort _
Key1:=Range("A1"), _
Order1:=xlAscending, _
Header:=xlNo, _
OrderCustom:=1, _
Orientation:=xlTopToBottom

End Sub

投稿日時 - 2003-06-15 23:04:55

お礼

いろいろ有難うございました
何とかできそうです

投稿日時 - 2003-06-16 04:18:28

ANo.2

#1です。
そういうことですか。
基本的にExcelで加工してしまった方が、アクセスでどうにかしようとするより絶対楽だと思いますので、その方向で考えましょうか。

Excelにもマクロ(VBA)がありますので、その機能を使えば手作業の時のようにデータが違うということはないと思いますよ。

また質問になってしまいますが、以下の補足を願えますでしょうか。

1. Excelのデータは1行のデータですか?
2. 列は全部で何列あるのですか?
3. 「CD」はコードのことだと思いますが、数値でしょうか?文字でしょうか?
4. すべての品名に対してCDは入力されていますか?
5. Excelのデータの最初の行に、「品名 CD 品名 CD・・・」といった「見出し」の行はありますか?それとも、1行目から、入力されているのは「データ」だけでしょうか?

投稿日時 - 2003-06-15 19:45:46

補足

いりいろすみません
1.Excelのデータは300行ほどあります
2.データーは最大で30列ほどあります(全てデーターが30列あるわけではありません
3.「CD」はコードのことで数値型です
4.すべての品名に対してCDを入力しています
5.Excelのデータの最初の行に、「品名 CD」の見出しはついています
以上どうか宜しくお願い致します
 

投稿日時 - 2003-06-15 21:44:40

ANo.1

>エクセルのデーターを加工せず

Access上で加工したいのでしょうか?
Excelのデータを加工してから取り込んだ方が簡単かと思いますが。こだわりがあるのでしょうか?


>イベントプロチャジャーで

イベントプロシージャのことでしょうか?
だとしたら何のイベントですか?
それともマクロのことをおっしゃっているのでしょうか?

投稿日時 - 2003-06-15 18:49:55

補足

すみません
説明不足で
エクセルで加工しようとしたのですが
漏れがあったりデーターをかぶせて消したりとやっぱり
加工すると元データーとちっがてしまうのでイベントプロシージャ
で・・とおもったのですが。・・・よく考えたら
マクロですね。すみません
何かいい方法がありましたらお願い致します

投稿日時 - 2003-06-15 19:07:28

あなたにオススメの質問