玄齋詩歌日誌

アメーバブログを退会しました。ヤフーブログだけ続けます。よろしくお願いいたします。

過去の投稿日別表示

[ リスト | 詳細 ]

全1ページ

[1]

先週の終わりから今日まで、「隠岐後鳥羽院和歌大賞」に投稿するための
短歌を作っていました。
 
その短歌を作る際に一つの参考とするために、
万葉集の月の短歌をまとめて読んでみようと思いました。

僕はそういうものをまとめて読むために、Excel で表を作ってから、
その表をプリントアウトしてから読む習慣があります。
その方がいつも読みやすいと思っています。

そこでまず次のサイトから、短歌の部分だけを、
Excel のシートにコピー&ペーストしました。
 
 
 たのしい万葉集: 月(つき)を詠んだ歌
 
http://www6.airnet.ne.jp/manyo/main/nature/tsuki.html
 
 
 
Excel のシートにコピー&ペーストしたら、次のようになりました。
 
 
 
イメージ 1
 
 
これを見ると、その歌の番号と短歌の本文が一つのセルに
まとまってしまっており、
しかも一行一行の間に空白行があるので、
手動で表を作るには時間がかかりそうだと思いました。
 

各行のデータを見てみると、次のようになっています。
 
 0008: 熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな
 
四桁の数字(指定した桁数以下の数値にはゼロを付けた数字)と
コロンと半角スペース、そして短歌の本文という形になっています。
 

このデータの構造は同じなので、
これは Excel の操作を自動化するためのマクロというプログラムに
出来るのではないかと思いました。
 
少なくともマウスで一つ一つ、数百件も処理するよりは
楽だろうと思いました。
 
そこで次のようなマクロのプログラムを書いてみました。
 
 
' ここからがマクロのコードになります。
' この緑色の行はコメント行です。
 
' エラー防止のためのお約束です。
Option Explicit
 
' 短歌と番号を別々のセルに入れて整理するマクロのプログラムです。
Sub 短歌と番号の抜き出し()
 
  ' 変数の宣言です。
  
  ' セルの範囲を示す変数です。
  Dim r As Range
  Dim r2 As Range

  ' セルの文字列の値を格納します。
  Dim sr As String
  
  ' セルの文字列の値を番号と本文に分けて取得する変数です。
  Dim sg() As String
  
  
  ' マウスで選択したセルの範囲の一個一個のセルで、
  ' 処理を行わせるためのループです。
  For Each r In Selection
 
    bLabel:
      
    ' セルの値を変数 sr に代入します。
    sr = r.Value
    
    ' もしセルが空白であれば、
    If sr = "" Then
    
      ' さらにもしその下のセルも空白であれば、
      If r.Offset(1, 0).Value = "" Then
        
        ' ループを抜けます(無限ループを回避するためです)。
        Exit For
       
      End If
     
      ' 現在のセルが空白で、下のセルが空白ではない場合は、
      ' 以下のような処理をします。
     
      ' 現在のセルのすぐ下のセルの範囲を取得します。
      Set r2 = r.Offset(1, 0)
     
      ' 現在のセルを削除します。
      r.Delete Shift:=xlUp
     
      ' すぐ下のセルと現在のセルを入れ換えて、
      '  "bLabel: " とあるマクロの行まで移動します。
      Set r = Nothing
      Set r = r2
      Set r2 = Nothing
      GoTo bLabel
     
     
    ' 普通にデータが入っている場合、
    ElseIf Len(sr) > 7 Then
     
      ' データをコロンと半角スペースを区切りとして、
      ' 番号と短歌の本文に分けます。
      sg = Split(sr, ": ")
     
      ' 右隣のセルに番号を代入します。
      ' セルの書式を四桁の数字にして、
      ' セルの配置を「中央揃え」にします。
      With r.Offset(0, 1)
        .NumberFormat = "0000"
        .HorizontalAlignment = xlCenter
        .Value = sg(0)
      End With
     
      ' 更に右隣のセルに、短歌の本文を代入します。
      r.Offset(0, 2).Value = sg(1)
     
      ' 更に二つ右のセルに、もとのデータを代入します。
      ' もとのデータをなくさないための保険です。
      r.Offset(0, 4).Value = sr
     
      ' 現在のセルのデータを消します。
      r.ClearContents
   
    End If
    Set r = Nothing
 
  Next
 
  ' 列の幅を文字列の長さに揃える処理です。
  Columns(2).EntireColumn.AutoFit
  Columns(3).EntireColumn.AutoFit
  Columns(5).EntireColumn.AutoFit
 
End Sub
' ここまででマクロのコードは終了です。
 
 
このマクロのコードを実行してみます。
 
まず、次の画像のように、マウスで範囲を指定します。
 
イメージ 2
 
 
そしてマクロを実行すると、以下のようになります。
 
 
イメージ 3
 
 
B 列に番号、C 列に短歌の本文が来て、
A 列のもとのデータが消えて、E 列に移動しています。
そして B C E 列のセルの横幅も調整されています。
 
この形に出来るとあとは表作りが楽です。
少し手動で処理をして、仕上がりは以下のようになりました。
 
 
イメージ 4
 
 
こういう作業の間にプログラミングをするのは楽しいです。
 
プログラミングをする間は、漢詩を作っているときと同じように思います。
 
他の Web ページなどでプログラミングの参考になる資料を見つけても
そのまま自分のプログラムに組み込めるわけではないので、
そこで自分で考えて自分のプログラムに使えるように
資料の中身を加工しなければなりません。
 
それが昔の漢詩を参考にして、自分の漢詩を作るときも
同じではないかなと、そう思っています。
 
案外プログラミングが得意な人は漢詩もすぐ作れるのではないかと、
そんな風にも思います。
 
 
いろんな事を学んで実行してみるのは楽しいなといつも思います。
検査入院が終わったあとも、いろんな事を学んでいきたいなと思います。

全1ページ

[1]


.

ブログバナー

白川 玄齋
白川 玄齋
男性 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について
検索 検索

詩歌関連

写真・画像関連

文学・語学・その他

殿堂入り

自由律俳句

登録されていません

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

よしもとブログランキング

もっと見る

[PR]お得情報

ふるさと納税サイト≪さとふる≫
実質2000円で好きなお礼品を選べる
毎日人気ランキング更新中!
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事