• ベストアンサー

エクセル表の並び替えに関して

エクセル2002です。 --- K1|K2|K3|K4| ---------------- 9/2|A |- |B |- | 9/3|- |A |A |B | 9/4|B |- |A |B | 9/5|- |- |- |A | を A|K1|9/2|---|---| A|K2|9/3|---|---| A|K3|9/3|9/4|---| A|K4|9/5|---|---| B|K1|9/4|---|---| B|K2|---|---|---| B|K3|9/2|---|---| B|K4|9/3|9/4|---| と別の場所あるいはべつのシートに並び替える方法はあるでしょうか?--の部分は空白です。 元表の列も行も増える可能性があります。 すみませんがぜひよろしくお願いいたします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Public Sub convert() Dim r As Range Dim base As Range Set r = ActiveCell.CurrentRegion 'アクティブセルのある範囲 'Set r = Selection '範囲を指定 SYMBOLS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" SYMLEN = Len(SYMBOLS) Set base = Range("sheet2!A1") '書き込みの基準位置 ActiveWorkbook.Sheets("sheet2").Range("1:65536").ClearContents '書き込み先の消去 xMax = r.Columns.Count yMax = r.Rows.Count dataC = 0 valueC = 0 For i = 1 To SYMLEN code = Mid$(SYMBOLS, i, 1) For x = 2 To xMax For y = 2 To yMax If r.Cells(y, x) = code Then If valueC = 0 Then base.Offset(dataC, 0).Value = code base.Offset(dataC, 1).Value = r.Cells(1, x) base.Offset(dataC, 2).Value = r.Cells(y, 1) base.Offset(dataC, 2).NumberFormatLocal = "m/d" '書式の設定 valueC = 3 Else If base.Offset(dataC, 0) = code And base.Offset(dataC, 1) = r.Cells(1, x) Then base.Offset(dataC, valueC).Value = r.Cells(y, 1) base.Offset(dataC, valueC).NumberFormatLocal = "m/d" '書式の設定 valueC = valueC + 1 Else dataC = dataC + 1 base.Offset(dataC, 0).Value = code base.Offset(dataC, 1).Value = r.Cells(1, x) base.Offset(dataC, 2).Value = r.Cells(y, 1) base.Offset(dataC, 2).NumberFormatLocal = "m/d" '書式の設定 valueC = 3 End If End If End If Next y Next x Next i End Sub とりあえず、作ってみました。 B|K2は、データなしで表示(処理)しないようになっています。 該当の表の中のセルをセレクトしておいてマクロを呼び出します。 結果は、"sheet2"へ書き出します

takashiro
質問者

お礼

ありがとうございます。参考にさせていただき、勉強させていただきたいと思います。 もっと簡単なものと考えていたのですが、自分の未熟さを痛感しています。 ありがとうございました。

その他の回答 (1)

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

関数による解答を期待しておられるかもしれませんが、 難しいと思います。Sheet2のあるセルを考えた時、そこにくるべきSheet1のセルがどこかを式で割り出すことは、非常に複雑になると思われ、事実上不可能でしょう。 するとVBAを使うことになりますが、VBAでも少し経験がないと、ロジックが難しい。取りあえず近いところまでやって見ましたた。 Sheet1のB2:E5を範囲指定して実行します。 Sub test01() Dim sh1, sh2 As Worksheet Dim cl As Range Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") j = 1 For Each cl In Selection If cl <> "-" Then sh2.Cells(j, "A") = cl sh2.Cells(j, "B") = sh1.Cells(1, cl.Column) sh2.Cells(j, "C") = sh1.Cells(cl.Row, 1) j = j + 1 End If Next '------ sh2.Range(sh2.Cells(1, "A"), sh2.Cells(j, "C")).Sort Key1:=sh2.Range("A1"), _ Order1:=xlAscending, Key2:=sh2.Range("B1"), Order2:=xlAscending '------ For i = 1 To j ' (略) Next i End Sub これで A K1 2004/9/2 A K2 2004/9/3 A K3 2004/9/3 A K3 2004/9/4 A K4 2004/9/5 B K1 2004/9/4 B K3 2004/9/2 B K4 2004/9/3 B K4 2004/9/4 になりますが、同一日を1行にまとめるのに更にプログラムコードの追加が必要です(略)。 それでも該当のないBのK2行を空白にすることが出来ていません。 K1からK4が4つとか少ないなら、むしろ違うロジックでプログラムを組む方がよいかも知れない。 それと、Sheet1で追加したら、即座にSheet2に反映するのもあきらめてください。 上記は、Sheet1のデータ入力の区切りの良いところで毎回プログラムを手動実行するものです。

takashiro
質問者

お礼

早速ありがとうございます。ちょっと自分にはレベルが高すぎる回答でした。参考にさしていただいて、勉強したいと思います。 補足ですが、A,B,K1-K4のところは手打ちしたいと思っております。 回答ありがとうございました。

関連するQ&A

  • エクセルの表引き?

    こんにちは いつもお世話になっています エクセルの表引きについて教えてください。 実は表引きといえるかどうかわからないので、できるか、できないかだけでも知りたいです。 sheet1に次のデータがあります。 A     B     C 1     秋田    a 2     愛知    a 3     石川    a 4     愛媛    b 5     大分    b 6     鹿児島   b 7     香川    c 8     熊本    c A列は連番とは限りません、重複データはありません。 C列でグループ分けしてあり、第一条件でソートしてあります。 sheet2ではA列に10行ごとに黒枠罫線がひいてあるだけで、ほかにデータはありません。 この枠線の中にsheet1のC列のグループごとにA列のデータを振り分けたいのです。 sheet1のC列は昇順でソートしてありますのでsheet2へも、その順番で各枠線内の上から入力させたいです。 sheet2のA列へはC列のa,b,cの各データの個数より余分に枠罫線がひかれてあるので、入りきらないことはありません。 つまり、 sheet2に A 1 2 3 7行分空白(ここまで枠罫線) 4 5 6 7行分空白(ここまで枠罫線) 7 8 8行分空白(ここまで枠罫線) と入力させたいのです。 関数とか表引きではできないとすると、他の方法はあるでしょうか。 条件付書式でもできるでしょうか。 わかりづらい表現で申し訳ないですが、よろしくお願いします。

  • エクセルのマクロを知りたい

    エクセルで,たくさんのデータが入力された【シートa】があります。 新しく【シートb】を作成して,そこに空白の表(1)~(10)までを作成します。 (ちなみに表(1)は1行から始まり100行まで,表(2)は101行から始まり200行まで・・・・といった感じです) 【シートb】の表(1)には,【シートa】でA列に「1」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。同様に,表(2)には,【シートa】でA列に「2」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。・・・というのを表(10)まで続けます。 上記のような命令をボタン一つで操作できるようなマクロを教えて欲しいのです。 お願いします。

  • エクセル 表のフォーマットを変えずに貼りたい

    office2010です。 シートAに、例えば4行×5列の表があります。 この表は、行や列の幅を適切な大きさに調整してあります。 この表をシートBに貼ると、表の行と列の幅は、シートBの幅になってしまいます。 シートAの票の形を崩さずに、シートBに貼るにはどうすれば良いのでしょうか?

  • エクセルの表で

    エクセルの表で行と列を入れ替えて、今までA列にあったものを1行目にB列にあったものを2列目に表示させる方法があったとおもいますが、どうやりますか?

  • 空白セルのあるエクセル表の並び替え

    空白セルのあるエクセル表の並び替え エクセル2002を使用しています。 エクセルの表で空白セルがたくさんあるのですが、 並び替えをしようとすると、行全体ではなく、行の一部しか並び変わってくれません。 空白行も含めて、行全体を並び替えるようにする方法はありますでしょうか? 宜しくお願い致します。

  • データの並び替え

    以下の表(処理前のもの)があります A列 B列 を比較し、 一致すれば次の行へ、一致しなければ空白セルを挿入し (処理後の表の様にしたい)次の行へ進むという処理をマクロで行えるように したいと思っています。 どのようなマクロを組めばよいのでしょうか?ご存知の方いらっしゃいましたら ご教授お願い致します。 <処理前> A列 B列 ああ ああ いい いい うう ええ おお おお きき かか きき くく けけ けけ <処理後> A列 B列 ああ ああ いい いい うう      (B列に空白セルを入れる)     ええ  (A列に空白セルを入れる) おお おお     かか  (A列に空白セルを入れる) きき      (B列に空白セルを入れる) きき      (B列に空白セルを入れる)     くく  (A列に空白セルを入れる) けけ けけ エクセル2003を使用しています。

  • 同じ様式の表の複数シートから行ごと抽出

    A2:K12の範囲に表がある全く同じ様式のシートが複数あります。 特定の条件が満たされた行を全て別シートに抽出したいです。 1列目と2列目とX列目(これは集計のA1セルに入った値を参照)が空白でない行を全て抽出したいです。1列目と2列目は1行目から順番に埋まっているのですが、X列目は空白になっているものと空白でないものが混在しています。 たとえば、Xが10列目のときは、Aさん、Bさん、Cさん、Dさん、Eさんの行が抽出されるようにしたいです。 VBAのコードを自力で書けないので、よろしくお願いします。

  • EXCELの列の並び替え

    EXCELでA列、B列にA~Zまでそれぞれアルファベットのデータが入っています。 ここで、A列、B列両方にあるデータは同じ行に、 A列にあってB列にないものは、B列に空白を。 B列にあってA列にないものはA列に空白を。 このようにA~Zまで並び替えるにはどうしたらよいのでしょうか? セルの中の文字も左からABC..順に並び替えます。

  • エクセルで関数を使って自動処理出来ないでしょうか?

    シート1に、Aさんのデータがk1.k2.k3.k4.k6.k7にあります。Bさんk10.k11.k12.k13.k15.k16、Cさんk19.k20.k21.k22.k24.k25という様に、約100名分あります。 そのk列のデータをシート3に 1行目 k1.k2.k3.k4.k6.k7 2行目 k10.k11.k12.k13.k15.k16 3行目 k19.k20.k21.k22.k24.k25 ↓続く 100行目   上記のように行を詰めて表示させたいのですが、何か良い方法はありますでしょうか? よろしくお願いします。

  • エクセル 表のなかから条件に合うものを詰めて一覧にする

    ある表のなかから条件に合うものリストを 詰めて一覧にするにはどういった関数などを つかってどういう風に組めばよいでしょうか? ・VB等プログラム使用不可 ・手動でのソートや抽出はしない ・「詰めて」が最も大きなポイント 例 シート1   |  A   B   C   D  --------------------------------- 01 |  あ  ○      58 02 |  あ  ×   u   4 03 |  あ  ☆   o   2 04 |     ×      87 05 |  う      j   7 06 |  あ  ○   k 07 |  い      n   9 08 |  い  ×   d  223 09 |  あ  ○  yua   0 10 |            66 11 |  い  ☆   j  12 |  う  ×   o   2 13 |  う      t   2 14 |  あ  ○  ykd  651 15 |  い  ☆   h   6 16 | 17 | 18 | 19 | 20 | 上記の中から  A列が「あ」かつ B列が「○」かつ D列が空白でないものを 詰めて別シートで下記のような リストに自動的にしたい。 自動的・・・ ・シート1の16以降の行に追加しても  自動的にシート2に詰めて反映される。 ・シート1いずれかの行を削除しても  条件にあったリストがシート2に  反映される。   シート2  (完成)   |  A   B   C   D  --------------------------------- 01 |  あ  ○      58 02 |  あ  ○  yua   0 03 |  あ  ○  ykd  651 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | もちろん、計算のための隠し列や隠しシートを儲けるなどは可。 エクセルの関数の駆使だけではムリなのでしょうか? どうかご教授くださいませ。

専門家に質問してみよう