Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13304 / 76733 ←次へ | 前へ→

【68935】Re:グループ分け後、枠囲み
発言  kanabun  - 11/4/29(金) 15:10 -

引用なし
パスワード
   ▼ひろし さん:

>以前ここでお世話になったものです。また皆様のお力を貸してください。
>いま、下記のような表があるとします。
>
>
>   A       B     C   …
>1 バスケ部 相島 康介
>2 バレー部 山本 太郎
>3 テニス部 川本龍三郎 
>4 バレー部 山波  博
>5 テニス部 中井度 武
>6 野 球部 鈴木 健一
>7 バスケ部 中村 太一
>8  .     .
>   .     .
>上のように200人くらいの部活動と生徒の名前を打ち込んでいって、『自動で』このデータを部活ごとにグループ分けして、
>
> 以下のようにグループごとに
>枠線(線の種類は何でもよいです)で囲み、縦に並べたいのです。
>  --------------------
>  |バスケ部 相島 康介|
>  |バスケ部 中村 太一|
>  --------------------   ← グループとグループの間は一行あける。
>  --------------------     以下、野球部、バレー部等、部活動の
>  |テニス部 川本龍三郎|    グループが縦に同じように続きます。
>  |テニス部 中井度 武|   
>  --------------------
>できるならば、並べる部活動のグループの並べる順番までもコントロールしたいのですが。 
>
> 4月からVBAを勉強し始めましたが、まだまだど素人のレベルで、他の人の書かれた
>コードを見て、理解・感心するので精一杯です。どうぞよろしく御願いいたします。
>
>--------------------------------------------------------------------------------
こんにちは〜
まず、ソートですね。

下のコードは(コメントがいっさい付してありませんが)
C列を作業列にして、そこに グループ番号を書き出しておき、
C列でソートするものです。
C列にグループ番号を書き出すとき、データ行の次の行以下に
ひとつづつ、余計にグループ番号を書き出しておくと、ソートしたとき
各グループの下に スペース行が挿入された格好になりますので、
データブロック単位で 罫線で囲っています。
Sub Try1()
  Dim dic As Object
  Dim i As Long, k As Long, n As Long
  Dim v, vv, sp
  Dim ss As String
  
  Set dic = CreateObject("Scripting.Dictionary")
  With Cells(1).CurrentRegion
    v = .Value
    n = UBound(v)
    ReDim vv(1 To n)
    ReDim sp(1 To n)
    For i = 1 To n
      ss = v(i, 1)
      If Not dic.Exists(ss) Then
        k = k + 1
        vv(i) = k
        sp(k) = k
        dic(ss) = k
      Else
        vv(i) = dic(ss)
      End If
    Next
  End With
  With Range("C1")
    .Resize(n).Value = Application.Transpose(vv)
    .Offset(n).Resize(k).Value = Application.Transpose(sp)
  End With
    
  Dim a As Range
  With Cells(1).CurrentRegion
    .Sort Key1:=.Columns(3), Header:=xlNo
    .Columns(3).Clear
    For Each a In .Resize(, 2).SpecialCells(xlConstants).Areas
      a.BorderAround xlContinuous
    Next
  End With
  
End Sub

ダミーのシートに簡単な表を作成し、シートを見ながら
上のコードを ステップ実行([F8]) して、
あるコードが何をしているのか? ご自分でコメントをつけてみてください。

1 hits

【68934】グループ分け後、枠囲み ひろし 11/4/29(金) 13:02 質問
【68935】Re:グループ分け後、枠囲み kanabun 11/4/29(金) 15:10 発言
【68936】Re:グループ分け後、枠囲み oyoyo 11/4/29(金) 18:36 発言
【68937】Re:グループ分け後、枠囲み UO3 11/4/29(金) 18:46 回答
【68940】Re:グループ分け後、枠囲み kanabun 11/4/29(金) 20:54 発言
【68941】Re:グループ分け後、枠囲み UO3 11/4/29(金) 22:26 発言
【68942】Re:グループ分け後、枠囲み UO3 11/4/29(金) 23:08 発言
【68938】Re:グループ分け後、枠囲み kanabun 11/4/29(金) 20:19 発言
【68939】Re:グループ分け後、枠囲み kanabun 11/4/29(金) 20:42 発言
【68943】Re:グループ分け後、枠囲み ひろし 11/4/30(土) 17:50 お礼
【68947】Re:グループ分け後、枠囲み UO3 11/5/1(日) 20:49 回答
【68977】Re:グループ分け後、枠囲み ひろし 11/5/5(木) 12:08 お礼

13304 / 76733 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free