• 締切済み

エクセルの使い方についてお教えください。

エクセルの使い方についてお教えください。 例えば、 a | b | f c | g | j d | h | k | m e | i | l | n | o | のように、右肩下がりになっている列を、 a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | のように一列にまとめる方法は無いでしょうか? 何卒よろしくお願いいたします。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2・3です! No.2の説明で少し抜けているところがありました。 Sheet2のSheet見出し上で右クリック → コードの表示  これで白い画面が出ますのでその画面に前回のコードをそのままコピー&ペーストして マクロを実行です。 どうも何度もごめんなさいね。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 前回の方法はちょっと強引でしたので VBAで考えてみました。 前回の表そのまま(作業用の列は削除して)↓のコードを 張り付けてマクロを実行してみてください。 Sheet2のSheet見出し上で右クリック → 白い画面が出ますので、 コードをこの画面から直接コピー&ペーストし 当方使用のExcel2003の場合は メニュー → ツール → マクロ から マクロを実行 Excel2007の場合はメニュー → 「開発」 → マクロ からマクロを実行 Sub test() Dim i, j, k As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") i = ws1.UsedRange.Rows.Count j = 1 Do While j <= ws1.UsedRange.Columns.Count ws1.Range(Cells(2, j), Cells(i, j)).Copy ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) j = j + 1 Loop For k = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If ws2.Cells(k, 1) = "" Then ws2.Cells(k, 1).Delete (xlUp) End If Next k End Sub 考え方として、Sheet1の1列目から順番にSheet2のA列にコピー(空白もそのままコピー)し 後から空白セルを削除するようにしてみました。 以上、参考になれば幸いです。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 参考になるかどうか判りませんが・・・ VBAでの方法はすでに紹介されていますので、 無理やり関数でやってみました。 ↓の画像のように元データ分だけ作業用の列が必要になってしまいます。 Sheet1のデータをSheet2のA列に表示するようにしてみました。 Sheet1の作業列F2セルに =IF(A2="","",ROW(A1)+COLUMN(A1)*1000) という数式を入れオートフィルで列方向と行方向にずぃ~~~!っとコピーします。 そして、Sheet2のA2セルに =IF(COUNT(Sheet1!$F$2:$J$1000)<ROW(A1),"",INDEX(Sheet1!$A$2:$E$1000,MOD(SMALL(Sheet1!$F$2:$J$1000,ROW(A1)),1000),INT(SMALL(Sheet1!$F$2:$J$1000,ROW(A1))/1000))) という数式を入れ、オートフィルで下へコピーすると 画像のような感じになります。 尚、数式はSheet1の1000行目まで対応できるようにしています。 以上、かなり強引な方法ですが 参考にならなかったら読み流してくださいね。m(__)m

q3Ti5y8E
質問者

お礼

ありがとうございました。 そういう方法もあるんですね。私は全く思いつきませんでした。 やっぱりいろんなところ適当にクリックしてるだけじゃ使いこなせないんですね。 勉強になりました。ありがとうございました。

noname#192382
noname#192382
回答No.1

次のマクロで実現できます。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2010/7/26 ユーザー名 : ' Dim igyo As Integer, iretu As Integer, value As Variant, igyo2 As Integer, gyostrt As Integer igyo2 = 1 gyostrt = 1 For iretu = 1 To 5 For igyo = gyostrt To 5 Sheets("Sheet1").Select value = Cells(igyo, iretu) Sheets("Sheet2").Select Cells(igyo2, 1) = value igyo2 = igyo2 + 1 Next gyostrt = gyostrt + 1 Next End Sub

q3Ti5y8E
質問者

お礼

ありがとうございました。 実は私はエクセルは全く初心者で、マクロというものを今はじめて知ったのですが、便利なんですね。 ちなみに、頂いたプログラム(?)を参考にはできませんでしたが、実際に手を動かした操作を模倣させることは簡単に出来ました。 勉強します。

関連するQ&A