• 締切済み

複数エクセルのデータを行列入れ替えて一つにまとめたい

会社で使用している磁気カードの管理がしたくて、エクセルに所属や性別やカード番号などを書いてもらったものをもっています。 カード番号|・・・・・・・ 所属   |・・・・・・ 名前   |・・・・・・ フリガナ   |・・・・・・ 上のような感じのデータが300個くらいあります。それを、 カード番号|所属  |名前  |フリガナ  |・・・ 1・・・ |・・・・|・・・・|・・・・・|・・ 2・・・ |・・・・|・・・・|・・・・・|・・ 3・・・ |・・・・|・・・・|・・・・・|・・ 上のようにまとめたいのです。一つずつコピーして行列を入れ替えてペーストとなると、結構の数で、なんとか自動で入力できないかと考えています。 当方初心者のため、VBAなど自力で作ることができないので困っています。よい方法がありましたら教えてください。  

みんなの回答

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

元の300個あるデータがどのような形で入っているのか書かれてないので、外しているかもしれませんが、「カード番号」「所属」「名前」「フリガナ」などの文字がA列に繰り返し入っていて、B列にそれぞれのデータが入っている、と仮定した場合のマクロを作成してみました。 Sheet1に元のデータがあって、Sheet2に並べ替えた表を作成します。 Alt+F11でVBAの画面を表示し、「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 マクロ中に出てくる"Sheet1"、"Sheet2"が実際のシート名と違ったら書き換えてください。 それから、  Const Items As Integer = 4 '1データの項目数 の行の数字も、実際の項目数に書き換えてください。 (質問文の例では「カード番号」~「フリガナ」の4つに見えますが、最初の文に「性別」と入っているので、1人分の実際の項目数はもっとたくさんあるのですよね) Sub データ整列()  Dim WS1 As Worksheet, WS2 As Worksheet  Dim FromRow As Integer  Dim ToRow As Integer  Const Items As Integer = 4 '1データの項目数  Set WS1 = Worksheets("Sheet1") '元のデータがあるシート  Set WS2 = Worksheets("Sheet2") 'データを並べ替えて転記するシート    Application.ScreenUpdating = False  WS2.Cells.ClearContents  ToRow = 1    'タイトルをコピー  WS1.Cells(1, 1).Resize(Items, 1).Copy  WS2.Cells(1, 1).PasteSpecial Transpose:=True    'データをコピー  For FromRow = 1 To WS1.Cells(Rows.Count, 1).End(xlUp).Row Step Items    ToRow = ToRow + 1    WS1.Cells(FromRow, 2).Resize(Items, 1).Copy    WS2.Cells(ToRow, 1).PasteSpecial Transpose:=True  Next  Application.CutCopyMode = False  Application.ScreenUpdating = True End Sub その画面でF5キーを押すか、F11でExcelの画面に戻ってAlt+F8からマクロを実行してみてください。まとめられた表がSheet2に転記されているはずです。 うまく動かない、あるいは意図したのと異なる動作をする場合は補足をお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

上の例が1例しか載ってなくて判りにくい。300個のかく1個は同数の行数で正確に構成されているなら、複雑では有るが1個1行に直せます。ばらばらだとお手上げ。 A1:A12に a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 c4 ・・・ とする。4組1個とする。 D1に =INDIRECT("A"&(ROW()-1)*4+COLUMN()-3) と入れてG1まで式を複写。 D1:G1をD3:G3まで式を複写。 結果 a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 c4 下方向に複写しすぎても0を出さない方策を組み入れる必要があるが 略。D1に入れる式を =IF(COUNTA($A$1:$A$100)<=(ROW()-1)*4,"",INDIRECT("A"&(ROW()-1)*4+COLUMN()-3))のように修正。

noname#95859
noname#95859
回答No.3

「1列のデータを3列に」が参考になると思います。 http://oshiete1.goo.ne.jp/qa1406757.html

  • bintyan
  • ベストアンサー率67% (19/28)
回答No.2

まずその表をコピーし、別のシート上で、メニューの“編集”から“形式を選択して貼り付け”を選ぶ。 ボックスの下のほうの“行列を入れ替える”にチェックを入れて“OK”。 これで出来ると思うのですが、どうでしょう。

回答No.1

ご質問の内容が今ひとつ把握できないのですが エクセルのワークシートが300あるのですか? それともワークシートの中の表の中にランダムにデータが入力されているのですか? 後者なら 「並べ替え」を利用するとあっという間ですよね。 前者だと厄介ですね。 どういう表が作成されて、どういう入力がなされているかを まずお書きになるとよろしいのでは?

関連するQ&A