• ベストアンサー

列の値を行に揃えたいのですが

すみませんが教えてください。関数、マクロ、ピポットテーブル等本を読みましたが適したものが見つけられませんでした。うまく記入できなかったのですがデータ数が膨大な為なんとか最良の方法を教えていただきたいのですがよろしくお願いいたします。 A1から順に親I、B2に子(1),子(2)、子(3)とD列まで入力してあり、A2には 1234,1235,1236,1237とD列までそれぞれ電話番号の下4桁が入力されております。 A3には、また同じように親II、B2に子(1),子(2)、子(3)とD列まで入力、A4に電話番号が入力されてあり、このような組み合わせが延々と続きます。 これをA行に親Iの電話番号を頭に1234~1237、B行に親I~子(3)、C行に親Iの1234の電話番号を、子(1)~子(3)までそれぞれ割り振り。 そして、A5から親IIを同じように記入しなおしたいのです。 横に関連づけのあるデーターを縦に挿入し直し、なおかつ次の親から始まるデーターを記入することは可能でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

ANo.2です。構造が良く分からないので、汎用性をこころがけて、コードを書いてみました。XL2000のコードです。ご参考まで。 'm行×n行 → n行×m行に変換 '$F$1:$H$4 → $F$7:$I$9 に、秘密の行列変換の操作を記述(式で行う) '1ブロック分を$F$1:$H$4にコピーし、変換された結果の$F$7:$I$9を出力先にペースト '縦に並んだブロックを、別シートに横に並べる 'シートが2,3になっているのは、1を他で使っていたからで、他意はなし。 Sub test() Dim sourceTopLeftCell As Range '元データの左上セル Dim destTopLeftCell As Range '複写先の左上セル Dim pasteTopLeftCell As Range '変換のため複写する先の左上セル Dim copyTopLeftCell As Range '変換後のデータの左上セル '4行×3列 → 3行×4列の例です Const m As Long = 4 Const n As Long = 3 Set sourceTopLeftCell = Sheets(2).Range("a1") Set destTopLeftCell = Sheets(3).Range("a1") Set pasteTopLeftCell = Sheets(2).Range("f1") Set copyTopLeftCell = Sheets(2).Range("f7") Application.ScreenUpdating = False Do Until sourceTopLeftCell.Value = "" sourceTopLeftCell.Resize(m, n).Copy pasteTopLeftCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False copyTopLeftCell.Resize(n, m).Copy destTopLeftCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Set sourceTopLeftCell = sourceTopLeftCell.Offset(m, 0) Set destTopLeftCell = destTopLeftCell.Offset(0, m) Loop Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

その他の回答 (3)

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

規則性があるので、VBAでやれるでしょう。VBAは経験ありますか。 質問は実例を挙げて説明すべし。読者の負担を軽減せよ。 親+子は4人に決まっているのか?不自然だね。人数が変動すると関数では難しくなる。 色々な条件が質問に書いてないのでは? ーー 例の見本 A列  B列  C列  D列 岡村  茂  邦夫  ハナコ 1234 2345 3123 3423 木村  実  京子  真美 1122 2233 3344 4456  ・・・・・ ↓ A列  B列 C列  D列 1234 岡村 1122  木村 2345 茂  2233 実 3123 邦夫 3344 京子 3423 真美  4456 真美 延々と、と言うが2007ですか。256列の制限大丈夫か。 オーバーしないか。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

表の構造が理解できません。面白い質問があったら、解決しようと手ぐすね引いている回答者の皆さんも、返事のしようがないのでは? >A2には 1234,1235,1236,1237とD列までそれぞれ B2~D2に入っていた、子(1),子(2)、子(3)はどうなるの? >A行に親Iの電話番号を頭に... A行って何? エクセルの話では無いのでしょうか? OKWaveで、表の体裁を表現するのはやっかいですが、それをしないと、話が始まらないと思います。

mirokumaru
質問者

お礼

真意がわからない質問を書いてしまい申し訳ありません。それなのに2度もご回答くださいましてありがとうございました。VBAを現在勉強中なので、参考にさせていただきまして最短で良い仕事になるよう頑張ります。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

表の行列を入れ替える方法です。 一度に全ては無理でしょうが、一つずつコピー貼り付けを行うよりはらくだと思います。 http://www.microsoft.com/japan/users/tips/excel/147.mspx

参考URL:
http://www.microsoft.com/japan/users/tips/excel/147.mspx
mirokumaru
質問者

お礼

早速のご回答ありがとうございます。 データー数が600と多いので、参考にさせていただいて引き続き頑張ってみます。

関連するQ&A

専門家に質問してみよう