プロが教える店舗&オフィスのセキュリティ対策術

名前1
住所1
TEL1
名前2
住所2
TEL2
名前3
住所3
TEL3

といった順番で1列に並んだデータがあります。これを

名前1 住所1 TEL1
名前2 住所2 TEL2
名前3 住所3 TEL3

というように3列に属性ごとに整理したいのですが、
やり方がうまく思いつきません。
データの量がかなりあるので手でコピペは厳しいです。
順番は規則正しく、空欄もありません。
簡単だと思って引き受けたのですが…
どうか助けて下さい、よろしくお願いします。

A 回答 (7件)

上記がSheet1のA列として、Sheet2のA1に


=OFFSET(Sheet1!$A$1,(ROW()-1)*3+COLUMN()-1,0)
と入力
B1,C1にコピー後、行方向にコピーしてください。
データが終わった行で再度コピーして、
形式を選択して貼り付けで、値として貼り付ければ終了です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
回答の関数を調べるのに没頭してしまい、お礼が遅くなってしまいました。
とても参考になりました、ありがとうございます。No.4の方の回答と同じようで微妙に違うところにエクセルの奥深さを感じました。

お礼日時:2005/05/24 15:34

色々な案が出ていますが、こんなのはどうでしょうか?


A列をそのままB列、C列にコピーします。そしてA列、B列の先頭にセルを挿入して、その下の情報を下に押し下げて、下記のようにします。
このとき、D列を設けて欲しい行に1をつけます。
3つおきですから、オートフィルで簡単につけれます。
(6つのセル(縦に1xx1xx)を選んで、オートフィルを実行.....xはスペースを意味します)

A---------B-------C--------D
------------------名前1  
---------名前1----住所1
名前1----住所1----TEL1-----1
住所1----TEL1-----名前2
TEL1-----名前2----住所2
名前2----住所2----TEL2-----1
住所2----TEL2
TEL2
(-は無視してください。スペースを入れるときちんと表示されなかったので、やむなく「-」を入れました)
以上を終えた後、D列でソートします。
後は不要な行を削除します。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私が最初にやろうとしていたのに最も近いやり方でした。
D列を使ってオートフィル&後でソートする
っていう発想が私には足りませんでした。ありがとうございました。

お礼日時:2005/05/24 17:47

レスが多いのでやめようと思いましたが、「数千行」ということで、これも役に立つかなって思いました。


シートタブのところを右クリックすると、「コードの表示」というのがありますから、そこで、開いた画面に、以下を貼り付けてください。
一応、オプションが付けてあります。
Opt =1 は、1列右に行くという意味です。
0 なら、上書きしてしまいます。

myTopCell は、一番、上のセルが、どこか、ということです。以下では、A1 になっています。

Sub 配列編集()
 Dim i As Long
 Dim myTopCell As String
 Dim Rng As Range
 Dim myArray As Variant
 Dim Opt As Integer
 'オプション-隣の列 Opt 列目に書き出し上書きしない
 Opt = 1 '0 なら上書き
 '先頭のセル・アドレス
 myTopCell = "A1"
 '
 Set Rng = Range(myTopCell, Range(myTopCell).End(xlDown))
 myArray = Rng.Value
 Application.ScreenUpdating = False
 If Opt = 0 Then Rng.ClearContents
 For i = LBound(myArray, 1) To UBound(myArray, 1)
  Rng.Cells(1, 1).Offset((i - 1) \ 3, _
  Opt + (i + 2) Mod 3).Value = myArray(i, 1)
 Next i
 Application.ScreenUpdating = True
 Set Rng = Nothing
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
VB(VBA?)はさっぱりわからないので、これから勉強しようと思います。いろいろな方法があるんですね。
確認はできていませんが、ありがとうございました。

お礼日時:2005/05/24 15:42

B列にデータがあるとして、A1に「1」、A2に「A1+100」、A3に「A1+10000」(足す数はデータの量に応じて適当に変えてください)と入力し、A1~A3を選択した状態で下にオートフィルすると、1、101、10001、2、102、10002...というふうになると思いますので、そうなったら、A列とB列を選択してソートすれば、名前1、名前2...、住所1、住所2...、TEL1、TEL2...と並ぶはずですので、あとはコピー&ペーストで出来るかと思います。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
データが増えるとA2、A3をすごい数にしなければならないですが、工夫すればなんとかなるいい例ですね。
全く思いつきませんでした、ありがとうございます。

お礼日時:2005/05/24 15:50

「Sheet1」のA列にデータがあるとした場合、別のシートに


[A1]セル
=INDIRECT("Sheet1!A"&ROW()*3-3+COLUMN())
という式を入れて下さい。
これを[B1][C1]にもコピーします。
これで1列目に情報が表示されるはずです。
後は必要な分だけ行(下)方向に式をコピーするだけです。
試してみて下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
回答の関数を調べるのに没頭してしまいお礼が遅くなってしまいました。
とても参考になりました、ありがとうございます。No.3の方の回答と似ているようで微妙に違うところにエクセルの奥深さを感じました。

お礼日時:2005/05/24 15:36

めんどうだったらなかった事にしてください。


  1    2    3   4
A 名前1
B 住所1
C TEL1
だとしたときに
名前1の横のセルA2に=B1、A3に=C1を入力し、
  1    2    3   4
A 名前1 住所1 TEL1
B 住所1
C TEL1
↑状態でA2~C4をコピーして、D2以降のセルにペースト。このままではB.C行が消せないので、A2~?4(最後)までのセルをコピーして、同じ位置に形式を選択して“値”をペースト。あとはB,Cの行を消していく。消していくのが面倒ですかね??
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
私も同様に考え、無駄になった行を消してるんですが
なんせデータが数千件あるもんで…
なんとかがんばってみます。

お礼日時:2005/05/24 14:14

もっと、いいやり方があるかもしれませんが。


まずデータがB列に999行あるとします。そしてA列に1から連番を振ります。(フィル機能を使えば簡単です。)
その状態で、D1セルに1を入れD2に=D1+3と入れそれを縦にコピーします。また、E1セルに2を入れE2に=E1+3としてそれを縦にコピーします。さらに、F1セルに3を入れF2に=F1+3としてそれを縦にコピーします。
そのあと、G1に=vlookup(D1,$A$1:$B$999,2,false)と入れそれをG2セルから縦にコピーします。その後、H1にvlookup(E1,$A$1:$B$999,2,false)としてそれをH2セルから縦にコピーします。さらに、その後、I1にvlookup(F1,$A$1:$B$999,2,false)としてそれをI2セルから縦にコピーします。
すると、GからIの列にご希望のように並びますから、G1からI333までをコピーして、別のシートなどの任意の所に「形式を指定して貼り付け」で「値」を指定して貼り付ければOKです。単なる貼り付けだと、元データを消すとエラーになりますが、「値」で貼り付ければ元のデータは消してもエラーになりません。
参考までに。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。vlookupは思いつきませんでした。
さっそく試してみたいと思います、ありがとうございました。

お礼日時:2005/05/24 14:21

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