- 締切済み
横長フィールドを縦にまとめる
いつもお世話になります エクセルがらアクセスにデーターを落としたのですが もともとのデーターが フィールド 品名 CD 品名 CD 品名 CD 品名 CD・・・・・ となっています エクセルのデーターを加工せず イベントプロチャジャーで 品名 CD の縦長データーにするデーターをお教えください宜しくお願い致します
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- stork
- ベストアンサー率34% (97/285)
再びstorkです。 追加クエリです。 30列くらいなら列名を手で変えながら30回追加クエリをやったほうが早いでしょう。エクセルをインポートする際に列名を1、2、...と入力しやすい名前を付けておくとやりやすいでしょう。 VBAのループで上記のクエリを実行する手もありますが、手作業でやったほうが早いと思いますよ。 それぞれのクエリを保存しておけばあとで再実行も出来ます。
- stork
- ベストアンサー率34% (97/285)
1回だけのことですよね? クエリで処理しましょう。
- happypoint
- ベストアンサー率36% (521/1422)
#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
お礼
いろいろ有難うございました 何とかできそうです
- happypoint
- ベストアンサー率36% (521/1422)
#1です。 そういうことですか。 基本的にExcelで加工してしまった方が、アクセスでどうにかしようとするより絶対楽だと思いますので、その方向で考えましょうか。 Excelにもマクロ(VBA)がありますので、その機能を使えば手作業の時のようにデータが違うということはないと思いますよ。 また質問になってしまいますが、以下の補足を願えますでしょうか。 1. Excelのデータは1行のデータですか? 2. 列は全部で何列あるのですか? 3. 「CD」はコードのことだと思いますが、数値でしょうか?文字でしょうか? 4. すべての品名に対してCDは入力されていますか? 5. Excelのデータの最初の行に、「品名 CD 品名 CD・・・」といった「見出し」の行はありますか?それとも、1行目から、入力されているのは「データ」だけでしょうか?
補足
いりいろすみません 1.Excelのデータは300行ほどあります 2.データーは最大で30列ほどあります(全てデーターが30列あるわけではありません 3.「CD」はコードのことで数値型です 4.すべての品名に対してCDを入力しています 5.Excelのデータの最初の行に、「品名 CD」の見出しはついています 以上どうか宜しくお願い致します
- happypoint
- ベストアンサー率36% (521/1422)
>エクセルのデーターを加工せず Access上で加工したいのでしょうか? Excelのデータを加工してから取り込んだ方が簡単かと思いますが。こだわりがあるのでしょうか? >イベントプロチャジャーで イベントプロシージャのことでしょうか? だとしたら何のイベントですか? それともマクロのことをおっしゃっているのでしょうか?
補足
すみません 説明不足で エクセルで加工しようとしたのですが 漏れがあったりデーターをかぶせて消したりとやっぱり 加工すると元データーとちっがてしまうのでイベントプロシージャ で・・とおもったのですが。・・・よく考えたら マクロですね。すみません 何かいい方法がありましたらお願い致します
補足
有難うございます クエリで処理というのは追加クエリのことですよね