• ベストアンサー

Excel表を一列にしたい

7列の表を一列に直したいのです。 A1,A2,A3・・B1,B2とあるものを別のシートに A1→A1,B1→A2,C1→A3・・・と、すべてを一列にするにはどうしたらいいでしょうか? Offsetを使うことも考えましたが、あまり効率がいいとも思えず、 マクロもどうすればいいかがわかりません。 表には数値だけでなく文字列もあるので、抽出はいらないのですが、 作業で一列になっていないと不便なのです。 いい方法はありませんか? Excelは2003です。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

マクロの例です。 Sub test1()   Dim rng As Range   Dim i As Long      Set rng = Sheets("Sheet1").Range("A1:G10")   For i = 1 To rng.Count     Sheets("Sheet2").Cells(i, "A").Value = rng(i).Value   Next i   Set rng = Nothing End Sub Sub test2()   Dim rng As Range   Dim n As Long   Dim i As Long      Set rng = Sheets("Sheet1").Range("A1:G10")   n = rng.Columns.Count   Application.ScreenUpdating = False   For i = 1 To rng.Rows.Count     rng.Rows(i).Copy     Sheets("Sheet2").Cells(i, "A").Offset((i - 1) * (n - 1)).PasteSpecial _       Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True   Next i   Application.ScreenUpdating = True   Set rng = Nothing End Sub

kelis741
質問者

お礼

訂正をいただいたもので実行して成功しました。 助かりました! ありがとうございました。 これで仕事がだいぶ楽になります。

その他の回答 (5)

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.6

再び Cupperです 解決しているようですが、他の方法を追加アドバイスです 回答番号:No.1の補足から >それだと20行くらいになったときに面倒になりませんか? 行数が増えたときに面倒とかいうのであればしかたがないですね それでも、一回きりの作業であればマクロやら関数やら使わないで行うほうが効率が良いので それらを使わない方法を紹介しました 1行目のセルを選択して ShiftキーとCtrlキーを同時に押しながら下矢印キーを押すなどの “ショートカットキー”を使うと効率いいんですけど… 慣れるとマクロや関数を作る(教えてもらってコピーする)よりも早くできます とりあえずマクロが紹介されていますので次に関数を紹介してみましょう INT(ROW(A1)/COUNTA(1:1)) これで列の位置、MOD(ROW(A1),COUNTA(1:1)) これで行の位置を 示せますので OFFSET関数やINDIRECT関数を使って一度に参照することができます ただし1行目にデータがひとつも無い場合、列方向を決める関数内でエラーになるので注意が必要です  =OFFSET(INT((ROW(A1)-1)/COUNTA($1:$1)),MOD(ROW(A1)-1,COUNTA($1:$1)),1,1) これを必要なだけ下にコピーすればOK 余計にコピーすると、そこには "0" が表示されます 場合によってはこの関数の結果をコピーして「形式を選択して貼り付け」で「値」を選んで貼り付けることも検討してください  ※ OFFSET、INT、ROW、COUNTA、MOD の各関数の詳細は Excelのヘルプを参照してください    行列を入れ替えるため、OFFSET関数では行と列を逆にしていることに注意してください

kelis741
質問者

お礼

ありがとうございました。 時々作るなら便利ですね。 関数はとても参考になりました。 ただ、一日に10回は行う作業なので、 やはりマクロの方が私にはいい様です。 (行数もまちまちです) 今後の参考にしたいと思います。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

回答番号:No.3で、誤記がありました。 I列までとしましたが間違いです。 7列ということですからG列までに訂正してください。 失礼しました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

表のあるシート名をSheet1と仮定します。 ≪例1≫ Sheet1A列データを、別シートA列A1以下にコピー 貼り付けたデータセル先頭B列セルに、1と入力 1と入力したセルのフィルハンドルをダブルクリックで連番入力 Sheet1B列データを、別シートA列データセルの下にコピー 貼り付けたデータセル先頭B列セルに、1と入力 1と入力したセルのフィルハンドルをダブルクリックで連番入力 といった操作をSheet1のI列データまで繰り返す すべてコピペし連番が入力されたら、B列を主キーにして「昇順」で「並べ替え」 B列の連番は不要になるので消去 ≪例2≫ まず、別シートのA列にSheet1のA列からI列までの1行目のセル参照式を入力 =Sheet1!A1 =Sheet1!B1 =Sheet1!C1 ・ ・ ・ =Sheet1!I1 上記参照式入力セル範囲を選択 編集メニューの「置換」で = を # に「すべて置換」 セル範囲選択枠の右下角の■(フィルハンドル)を下方にドラッグ&ドロップ #Sheet1!A1 #Sheet1!B1 #Sheet1!C1 ・ ・ ・ #Sheet1!I1 #Sheet1!A2 #Sheet1!B2 #Sheet1!C2 ・ ・ ・ #Sheet1!I2 #Sheet1!A3 #Sheet1!B3 #Sheet1!C3 ・ ・ ・ #Sheet1!I3 ・ ・ セル範囲選択状態のまま、編集メニューの「置換」で # を = に「すべて置換」 参照式が不要なら、A列をコピー、その場で「形式を選択して貼り付け」の「値」で貼り付け

kelis741
質問者

お礼

裏技という感じで、参考になりました。 そういう方法があったんですね。 関数でいっぺんに解決というのを考えてましたが、 大穴でした。 それがあったか!と目からうろこでした。 Excelの奥の深さを感じました。 ありがとうございました。 どれが自分にとって使いやすいか、覚えやすいか、 それは人それぞれってことなんですね。

回答No.2

状態がうまく把握できないのですが・・・ A1,A2,A3,・・・B1,B2,B3,・・・G1,G2,G3,・・・ と、7列あるデータを A1→A1,B1→A2,C1→A3・・・ と、1列に並べたい? では、もともとA2やA3に入っていたデータはどこへ?

kelis741
質問者

補足

もともと入っていたデータはその下に入れたいのです。 A2にあったものは、つまり、A8にしたいんです。 別シートに移してやりたいのですが、できませんか?

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

並べたい範囲をコピーして「行列を入れ替えて貼り付け」 そのあと、列単位で縦に並ぶように整形する …と言うのはダメ?

kelis741
質問者

補足

それだと20行くらいになったときに面倒になりませんか?

関連するQ&A