条件を付けてランダム~エクセルVBA

以前に、参加者の俳句一覧表にし、ランダムに並べるVBAを作成した。ところが15人ほどのメンバーで一人が2句ずつ投句し、それを一覧にする。一覧にするときには一人が投句した2句を続けてエクセルに書いていく。そうやってできた一覧表をVBAをつかってランダムに並び替えてみると、何か所かで同一の人の句が並んでしまう。5回くらいマクロを実行して誰も並ばない状態にすることもしばしばであった。

そういう状況を解決しようといろいろ考えてみて、次のように考えてみた。

1.2句ずつだからAグループとBグループのように分ける。

2.AグループとBグループに分けると、これだけで同一人物の句が並ぶことは亡くなる。でも人が同じ順に出てくるというのも面白みがない。

3.そこで、グループごとにランダムに並び替える。もちろんこの場合はAとBとの分かれ目のところで同一人物が並ぶ可能性もないことはない。その時は2回目のマクロを実行することにする。

4.AとBのグループ分けは、エクセルの関数を利用して、同一人物の何番目かをカウントする。(これも句を入力するときに1,2・・・と入力しておいてもいいのだが、手間は少しでも省きたい)そこで空いている欄を利用して、エクセル関数 ‘=IF(A15=””,””,COUNTIF($A15:A15,A15)) ‘
を必要以上にコピーする。
・・・’ =IF(O15=””,””,COUNTIF($A15:O15,O15)) ・・・’。
O15に入力がなかったら空白、そうでなかったら、A15からO15までの間にO15(人物名)の数を数える、という関数である。こうしておけば1人が何句投句しても自在となる。 他の使用法もありそうだ。こうして、1,2・・というグループ分けが可能になる。

マクロについては

エクセルVBA8「並び替える」の「

6 表の列を昇順とランダムの2条件で並び替える

グループ分けとランダム

こちらの方が、確実にバラツキができていい。

セル内の漢字を書き出し、必要なところにルビを打つ~エクセル・マクロ・VBA

セル内の文章の中でいくつかの漢字にルビを振ろうとしてセルをルビ表示にすると、すべての漢字が入力したときのルビが表示されてしまう。2,3の漢字だけでよいのに、不必要な漢字のルビを編集で削除するのは細かい作業となり、大変です。またどこかからコピーしてセルに貼り付けた文章であれば、ルビ表示にしてもルビが表示されない。そこでそのような必要がある時に、セルの中の漢字を取得

し、セルに一つ一つ書き出し、必要なところだけルビとしての文字を入力しておけばよい。ここでは漢字を抜き出すマクロを書き留めておく。[々][〃]も取得するとしたが、「二」のくずしのユニコード「U+303B」は取得できない。

その記述は私のHP「エクセルVBA5「検索・抽出・表示」の「7 漢字を取得しセルに書き出す」

にアップした。またそのファイルは次のような形のものです。3,4行目は文字が入力されると背景色がつくように条件s付き書式設定をしています。

複数漢字取得ルビつけ

複数漢字取得ルビつけ

3行目に6行目の文章の漢字を抜き出し、4行目に必要な漢字の下にルビを振るように設定しています。サンプルファイルはリンク先ページにおいています。