1 2 3
A値 値 値
B値 値 値
C値 値 値
というピポットではないクロステーブルを
A 1 値
A 2 値
A 3 値
B 1 値
:
という単純なテーブルに簡単に置き換えるにはどの様な方法があるでしょうか?
Access、SQL等でも構いません。
小生はマクロにて縦横総当りにて、並べ替えて出力する方法しか、今のところ、思い当たりません。しかしコレでは、ちょっと処理が遅いです。
コピペで手作業が加わる回答等はご遠慮ください。
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
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に出力してアクセス等で使用するイメージでした。
先程のコメントです。
5000行×50列だと変換後が65535行を越えるのでEXCELでは扱えませんね。
そうです、外部のCSVに出力するイメージでした、基本的にEddyYamanakaさんと同様の方法しかないかな・・・と思ってます。それでも、SQL文等を使って簡単に出来る方法が他にあるのでは?と思って質問したのであります。
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;
なるほど、ひとつのテーブルにて項目毎にユニオンをかけるのですね!目からウロコです!。ありがとうございます。
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の方がコードが一番スマートに組めますね。
http://www.hatena.ne.jp/1101633378
人力検索はてな - エクセル上にある 1 2 3 A値 値 値 B値 値 値 C値 値 値 というピポットではないクロステーブルを A 1 値 A 2 値 A 3 値 B 1 値 : という単純なテーブルに簡..
URLはダミーです。
めんどいのでマクロを使わない方法。かな?
A,B,Cとか1,2,3とかは存在しない、値だけのテーブルと仮定しても良いですか?(ダメならポイントは0にして下さい。)
置き換え機能のあるエディタorワープロを使います。
まず、csv形式で保存します。
それをエディタ等で読み込み、カンマを改行に置き換え、保存します。
それをエクセルで読み直す。
(・・・・・これでできるだろうけど・・・前提条件でダメだろうな、きっと。)
その作業をコード化したのが、上記のPerlスクリプトになると思います。皆さん、ありがとうございました。
5000行×50列です、やはり、こういう方法しかないかな。。。