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

名前:山田
姓:男


年齢:20才

名前:吉田
姓:女


年齢:30才




このようなデータを次のように並べ替えたいのですが、
簡単に行える方法はないでしょうか?

  A列     B列          F列
名前:山田  姓:男   ・  ・  年齢:20才
名前:吉田  姓:女   ・  ・  年齢:30才


A 回答 (6件)

こんにちは。

maruru01です。

仮にデータがA列にあるとして、とりあえずB~G列に参照します。
B1に、

=INDEX($A:$A,(ROW(A1)-1)*6+COLUMN(A1))

と入力して、G1までコピー、
さらにB1:G1を下の行にコピーします。
そうしたら、コピーしたB1:Gxを選択してコピー、
同じ場所にメニューの[編集]→[形式を選択して貼り付け]の[値]貼り付けします。
あとは、必要に応じて元のA列を削除して1列ずらして下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
うまく行きました。

お礼日時:2005/05/24 13:59

「簡単に」を重視するのであればこれでしょうね。



並び替えをしたいシートを表示して、このマクロ(並び替え)を実行すると、後は勝手にやってくれますよ。
A列に入力なしの行が10行続くと終了するようになります。
あとはこれをベースに多少アレンジを加えるといいと思いますよ。


Option Explicit

Public Sub 並び替え()
Dim iInRow As Integer
Dim iOutRow As Integer
Dim iInterval As Integer

iInRow = 1
iOutRow = 0
iInterval = 0

With ActiveSheet
While iInterval <= 10
If InStr(1, .Cells(iInRow, 1), "名前") <> 0 Then
iOutRow = iOutRow + 1
Call Makelist(iInRow, iOutRow)
iInterval = 0
End If
iInRow = iInRow + 1
iInterval = iInterval + 1
Wend
End With
End Sub

Private Sub Makelist(iInRow As Integer, iOutRow As Integer)
Dim iOutCol As Integer

iOutCol = 1
With ActiveSheet
While Len(Trim(.Cells(iInRow, 1))) <> 0
If iInRow <> iOutRow Then
.Cells(iOutRow, iOutCol) = .Cells(iInRow, 1)
.Cells(iInRow, 1).ClearContents
End If
iInRow = iInRow + 1
iOutCol = iOutCol + 1
Wend
End With
End Sub
    • good
    • 0
この回答へのお礼

わざわざマクロを作っていただき、ありがとうございました。

今回は自分が知らないだけで、エクセルの関数を
駆使するば出来るのかもしれないと思い質問しました。

思ったとおり、関数の工夫でもやれることが分かりました。

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

基本的には他の方が書かれているように、「コピー」→「形式を選択してコピー」→「行列を入れ替える」にチェック。

という手順しかない(自動的にやろうとするとマクロでないと無理かと)。
でも、1レコードずつやるのは大変なので、もうちょっと楽にするテクニックで、

A列に上記のデータがあるとします。
B1セルに
=LEFT(A1,FIND(":",A1,1)-1)
と入力して、データの数だけ下にコピーします。
名前、性別、年齢などの項目が取り出せてると思うので、
A,B列を選んで、メニューバーから「データ」→「フィルタ」→「オートフィルタ」を選びます。

1行目のセルに▼マークがついたと思います。B列のこのマークをクリックすると、選択肢が現れますので、名前を選びます。
すると名前だけのデータが並びます。
ここで、A列の名前だけのデータを範囲指定して、、「コピー」→「形式を選択してコピー」→「行列を入れ替える」をやれば、名前は一度にできます。
で、あとは、B列の選択肢を性別、年齢・・などに変えて同じことやれば、項目の数だけコピーする操作で並び替えができます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

確かに回答の方法で出来ました。

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

基本的には、no1,no2の方の答えられている


方法ですが、件数が多くて大変であれば登録マクロを
使われたらいかがですか?方法は下記を参考に、
1.マクロ登録を2名分行う。
2.マクロ修正にて、1名分の処理をFOR-NEXTで囲む
3.2名目のプログラムを参考にしてFOR増分値、最終値
  FOR内でのセル値の変更等を追記する
4.2名目のプログラム行を削除

あとはマクロを起動すれば、自動的に終了します。
  
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

こんにちは。


「名前:山田」~「年齢:20才」をコピーして、貼り付けたいセルで右クリック→形式を選択して貼り付け→"行列を入れ替える"にチェック→OK
を繰り返せば、地道ですが確実にできます。

ご参考になれば幸いです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

質問の仕方がまずくてすみません。
回答のようにするのが大変なので、
もう少しうまくやれる方法はないかという質問です。

お礼日時:2005/05/24 13:45

対象のデータ行単位になっていれば、次の方法で可能です。



・対象のセル範囲をドラッグし右クリック→コピー
・移動先で右クリック→形式を選択して貼り付け→行列を入れ替えをチェックオン
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2005/05/24 13:43

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