人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル上にある
1 2 3
A値 値 値
B値 値 値
C値 値 値

というピポットではないクロステーブルを

A 1 値
A 2 値
A 3 値
B 1 値

という単純なテーブルに簡単に置き換えるにはどの様な方法があるでしょうか?
Access、SQL等でも構いません。

小生はマクロにて縦横総当りにて、並べ替えて出力する方法しか、今のところ、思い当たりません。しかしコレでは、ちょっと処理が遅いです。

コピペで手作業が加わる回答等はご遠慮ください。

●質問者: iojoy
●カテゴリ:コンピュータ 学習・教育
✍キーワード:access SQL エクセル クロス コピペ
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● EddyYamanaka
●10ポイント

http://www.hatena.ne.jp/1101633378#

人力検索はてな - エクセル上にある 1 2 3 A値 値 値 B値 値 値 C値 値 値 というピポットではないクロステーブルを A 1 値 A 2 値 A 3 値 B 1 値 : という単純なテーブルに簡..

マクロってそんなに時間がかかりますか?

以下の単純なマクロでもあっという間ですけど?

マトリックス(要素)のサイズはどれくらいなのでしょう?

Private Sub CommandButton2_Click()

Dim rr, cc, r2

r2 = 1

rr = 2

While Len(Cells(rr, 1))

cc = 2

While Len(Cells(1, cc))

Sheet2.Cells(r2, 1) = Cells(rr, 1)

Sheet2.Cells(r2, 2) = Cells(1, cc)

Sheet2.Cells(r2, 3) = Cells(rr, cc)

r2 = r2 + 1

cc = cc + 1

Wend

rr = rr + 1

Wend

End Sub

◎質問者からの返答

5000行×50列です、やはり、こういう方法しかないかな。。。


2 ● きゃづみぃ
●10ポイント

http://www.hatena.ne.jp/awindow?

For a = 1 To 5000

ActiveWindow.LargeScroll ToRight:=1

Range(”A” & a & ”:AX” & a).Select

Range(”AX” & a).Activate

Selection.Copy

b = ((a - 1) * 50 + 1)

Range(”AZ” & b).Select

ActiveWindow.SmallScroll Down:=3

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=True

Next a

AZの列に 作成するようにしてみました。

一行をまとめてコピペしてるので、ひとつひとつのセルよりは、速いと思います。

>5000行×50列

これは エクセルの制限上、無理ではないのでしょうか?

つまり、5000×50=250000行 できるということですよね?

エクセルは 65536行までなので 1311行目でエラーになります。

◎質問者からの返答

そうなのです、ですので基本的にCSVに出力してアクセス等で使用するイメージでした。


3 ● EddyYamanaka
●0ポイント

http://www.hatena.ne.jp/

はてな

先程のコメントです。

5000行×50列だと変換後が65535行を越えるのでEXCELでは扱えませんね。

◎質問者からの返答

そうです、外部のCSVに出力するイメージでした、基本的にEddyYamanakaさんと同様の方法しかないかな・・・と思ってます。それでも、SQL文等を使って簡単に出来る方法が他にあるのでは?と思って質問したのであります。


4 ● tsukudanian
●40ポイント

http://www.livedoor.co.jp/

livedoor

urlはダミー。

アクセスで、ユニオンクエリーというSQLを発行すれば一発です。

1.列名のフィールドを作ります。(フィールド名:F)

F 1 2 3

A 値 値 値

B 値 値 値

C 値 値 値

2.上記をアクセスにインポートします。

3.アクセスで下記のクエリーを作成して開けばOK。(テーブル名:テーブル1)

SELECT テーブル1.[F]&’1’ AS id,テーブル1.[1]

FROM テーブル1

UNION ALL

SELECT テーブル1.[F]&’2’ AS id,テーブル1.[2]

FROM テーブル1;

UNION ALL

SELECT テーブル1.[F]&’3’ AS id,テーブル1.[3]

FROM テーブル1;

◎質問者からの返答

なるほど、ひとつのテーブルにて項目毎にユニオンをかけるのですね!目からウロコです!。ありがとうございます。


5 ● stealthinu
●20ポイント

http://www.perl.com/

Perl.com: The Source for Perl -- perl development, conferences

URLはダミーです。

行数的にExcelでは不可能なサイズのようですので、TXT形式で吐き出しておいて、後でperlで加工するというのではダメでしょうか。

ちなみにこんな感じで出来ます。

while(<>) {

chomp;

@col=split(”¥t”);

$name=shift(@col);

$count = 1;

foreach (@col) {

print ”$name¥t$count¥t$_¥n”;

$count++;

}

}

◎質問者からの返答

ありがとう御座います、確かにperlの方がコードが一番スマートに組めますね。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ