• ベストアンサー

エクセルで

エクセル97でA列に あ い う え お か き ・ ・ と縦に長い表を A列  B列 あ    か い    き う    ・ え    ・ お    ・ と5行ごとに列をかえて横に長い表にする事ってできますか。 600行くらいあるのでコピペでは面倒で; よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 B1に、 =OFFSET($A$1,(COLUMN(B1)-1)*5+(ROW(B1)-1),0,1,1) と入力して、B5までコピーします。 するとB1~B5にA6~A10までの値が表示されます。 さらに、B1~B5を、C列以降にコピーします。 フィルハンドルを掴んで一気にコピーすればいいでしょう。 600行なら120列分でしょうか。 ちなみに列数には限度がある(Excel2000だと256列)ので気をつけて下さい。 それから、表示された値は、あくまでA列を参照しているだけなので、全コピーして値のみ貼り付けるなどして下さい。

aqui
質問者

お礼

早速の回答ありがとうございます! あまりに簡単に出来たのでちょっと感動してしまいました。 応用がききそうなのでついでにお聞きしたいのですが 1列でなく、3列に長い表でも同じように出来るでしょうか。 自分でも試したのですがうまくいかなくて;;

その他の回答 (3)

回答No.4

初めまして。#3さんのご回答だとあ~おがA列とB列に表示されると思います。"か"から下を動かしたいのであれば、下記の様に操作してみて下さい。 1.データの入っているブックを開き、ALT+F11キーを押してVBE画面を表示させ、画面左上のVABProjectと書かれているところにマウスポインターをあわせて右クリック後、挿入→標準モジュールを選択する。 2.出てきた画面の右側の白い部分に下記のコードをこぴー&ペーストする。 3.ALT+F11キーを押してエクセルの画面にもどり、ファイルメニュー→マクロ→マクロと順にクリックする。 4.出てきたマクロダイアログボックスの右側にある実行ボタンをクリックする。 これでマクロが走り、貴方様のおやりになりたいことが実行されていると思います。 もし、ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。 Sub Proguram() Dim i As Integer Dim j As Integer Dim k As Integer i = 1: j = 1 For k = 6 To Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row Worksheets(1).Cells(i, j + 1).Value = Worksheets(1).Cells(k, 1).Value If (k Mod 5) = 0 Then j = j + 1 i = 1 Else i = i + 1 End If Next k End Sub

aqui
質問者

お礼

はじめまして。丁寧な回答ありがとうございます。 仰る通りに進めていったらうまくいきました。 プログラムが実行される様はなかなか気持ち良かったです(^-^) VBAは覚えたほうが便利そうですね・・・勉強してみようか、という気になりました。 ありがとうございました。

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

この問題はVBAがお勧めです。 Sub test01() i = 1: j = 1 d = Worksheets("sheet1").Range _("a1").CurrentRegion.Rows.Count For k = 1 To d Worksheets("sheet1").Cells(i, j + 1) = _ Worksheets("sheet1").Cells(k, 1) If (k Mod 5) = 0 Then j = j + 1 i = 1 Else i = i + 1 End If Next k End Sub 興味がおありならやり方等説明します。

aqui
質問者

お礼

VBAですか。私にはちょっと高度ですね(^-^;) 時間のある時にでも勉強したいと思います。 回答ありがとうございました。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

>1列でなく、3列に長い表でも同じように出来るでしょうか。 ABC列の長い表を、5行ずつ、DEF、GHI、JKLに入れるということでしょうか。 その場合は、少し工夫が要ります。 D1に、 =OFFSET($A$1,(COLUMN(D1)-1)/3*5+ROW(D1)-1,0,1,1) E1に、 =OFFSET($A$1,(COLUMN(E1)-2)/3*5+ROW(E1)-1,1,1,1) F1に、 =OFFSET($A$1,(COLUMN(F1)-3)/3*5+ROW(F1)-1,2,1,1) として、D1~F1を5行目までフィルハンドルでコピーします。 そしたら、D1~F5まで(3×5の範囲)を選択しておいて、フィルハンドルで、右へコピーしていきます。 要は、OFFSET関数の使い方ですね。

aqui
質問者

お礼

度々ありがとうございます! そうです、これがやりたかったんです。 関数って知らないと何も出来ないけど 知ってればなんでも出来そうな気がしますね。 少しずつ覚えていきたいと思います。ありがとうございました。