[[20110701194825]] 『多量の複数行・列データーの並び替え方法』(爺さん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『多量の複数行・列データーの並び替え方法』(爺さん)Excel20003 WindowsXP
 母の俳句を次のように1行目が季語、2行目が俳句で24行目まで入力しました。約2000句ありますが、これを季語別に並べ替えたいのですが、エクセルは初心者です。詳しく御教示お願いします。

   A  B  C D E………→IV

  1  季  秋  花 初
   語    火 夏
  2
    俳   秋 夕 そ
    句   深 空 よ
  ・      し に 風
  ・
  ↓
  23 季   梅 白 藪
    語    菊  椿  
 
 24 俳   つ  亡 山
    句   ぼ 夫 合
      み   い 

 並べ替えた形が連想できません。
 どのような形にしたいのでしょう?
 (seiya)

 横方向(列方向)には256列しかないので行方向に並び替えます。
 24行×256列の範囲を指定「コピー」A31を指定、「形式を選択して貼り付け」「行列を入れ替える」にチェックOK。
 貼り付け結果を確認、元のデータを削除。30行を削除します。
 貼り付け後のデータがA1:X256にあるとして、
 A257:=C1  A2500まで下へコピー。A257:A2500をV列までフィルコピー。
 A1:B2500を指定、コピー、値貼り付け。すべてのデータはA:B列に集中されます。B列以降を削除。
 A:B列をA列をキーに並び替えます。

 想像だけど、最終的にまとめる形としては、あくまで横方向に A1からIV1まで、次の項目からは A3からIV4まで、次はA5からIV6まで・・・・ 
 これを季語順に並べたいということなんだろうと。

 上で(名前なし)さんがいっているようにエクセルの列数には限界があるので、やるとすれば
 ・別シートのA列、B列に(名前なし)さんのコメントにあるような縦横入れ替えの転記をする。
   (めんどうだけどね。)転記先、最初は1行目、次が257行目・・・・
 ・で並べ替え
 ・こうしてできた別シートから、今度はもとのシートに、縦横逆の転記を行っていく。

 自分なら、ちゃっちゃっちゃとVBA書いて処理するな。

 10:07 並べかえを追加

 ぶらっと立ち寄り

 まずA列に季語、B列に季節、C列に俳句というシートを2000 行まで作ります。
 (この形式なら他の列に作成日やメモなどいろいろと書くこともできます。)

 それを別シートに今の形で表示するようにしたらどうでしょうか。
 上記の形が Sheet1にある場合、
 Sheet2 で
 A1=INDIRECT(ADDRESS(COLUMN()+INT(ROW()/22)*256,1,,,"Sheet1"))
 A2=INDIRECT(ADDRESS(COLUMN()+INT(ROW()/22)*256,3,,,"Sheet1"))
 として A1:IV2 にコピー、同じくA23:IV24 にコピー で今の形が出ると思います。

 2行目の高さを長くして、3行おきくらいに書いた方が楽な気もしますが。
 (Mook)

 沢山の方から早速回答を頂き有り難うございました。質問内容が不明で申し訳ありませが、同じ季語の俳句が何句もありますので、それを1かたまりにして五十音順に並べ替えたいのです。次に俳句を作る際に同種の俳句を作らないように参考にしたいのです。
 教示頂いた方法でチャレンジします。有り難うございました。(爺さん)

 とりあえず解決?ということで、蛇足。
 Mookさんのコメントのように、データは別形式で持っておいて、今のような形が必要な場合は作表するという
 運用がベストだと思いますね。

 ただ、現在は今の形でデータがあり、当面、これに追加していくことになるんだろうと思う。
 上で自分も含めてアップした方法は、作業も大変かもしれないし、そのあと追加した俳句をまた並び替えるにも
 作業が必要になってくるので、面倒? ということなら、今の形のままで、並び替えをするVBAを。
 保険(?)としてアップ。充分なテストはしていないので不具合あったらごめん。

 Sub Sample()
    Dim n As Variant
    Dim i As Long, j As Long, k As Long
    Dim y As Long, x As Long, z As Long
    Dim v() As Variant, w() As Variant
    Dim vv As Variant
    Dim sh As Worksheet

    Application.ScreenUpdating = False

    Set sh = Sheets("Sheet1")
    x = sh.Columns("IV").Column  ' sh.Columns.Count が妥当だけど、今2010で作業しているので。
    y = sh.Range("A" & sh.Rows.Count).End(xlUp).Row
    z = y / 2 * (x - 1)
    ReDim v(1 To z, 1 To 2)
    For i = 1 To y Step 2
        For j = 2 To x
            k = k + 1
            v(k, 1) = sh.Cells(i, j).Value
            v(k, 2) = sh.Cells(i + 1, j).Value
        Next
    Next

    Sheets.Add
    Range("A1").Resize(UBound(v, 1), 2).Value = v
    Columns("A:B").Select
    Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        SortMethod:=xlPinYin, DataOption1:=xlSortNormal
    vv = Range("A1").CurrentRegion.Value
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True

    ReDim w(1 To y, 1 To x - 1)

    i = 1
    j = 1
    For k = 1 To UBound(vv, 1)
        If k <> 1 And (k - 1) Mod (x - 1) = 0 Then
            i = i + 2
            j = 1
        End If
        w(i, j) = vv(k, 1)
        w(i + 1, j) = vv(k, 2)
        j = j + 1
    Next

    sh.Range("B1").Resize(UBound(w, 1), UBound(w, 2)).Value = w
    Set sh = Nothing
    Application.ScreenUpdating = True
    MsgBox "並べ替え完了です"

 End Sub

 ぶらっと立ち寄り

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.