Wordのアウトラインをテキストへ

色々あってはてなへの書き込みペースが極端に落ちてしまいました。
久しぶりにマクロを公開したいと思います。


Wordで考えや各種整理ついていない項目をアウトラインで作ることがあります。しかし、不便なことに、これをそのままExcelへ持っていくことができないのです。
例えば、課題項目をアウトラインで思いつくままに作成し、それをカテゴリ毎に整理分類して頭を整理。その後、その項目をExcelへ持っていってToDoや工程の元にしたりするということをしたいのです。

ググってみたのですが、そのものずばりはない模様。似たものはありましたが、、、


結果、作ったのが次のちょんマクロです(word)。
固定名称のファイル(OutLinefile.txt)に階層構造に応じたタブをつけて出力します。
このファイルをExcelで取り込めばOK。
途中で改行があった場合も"でencodeして対応。→この場合は「アプリケーションから開く」でExcelを指定するという裏技が必要です。
Wordファイルの開き方によって、ファイルがMy Documentsにできたり、起動ディレクトリにできたりとしますが、、、 そこはまあ堅いことなしでということで。
見出し1〜9で記載することを前提に作ってあります。レベルがないものは、タブなしで出力されます。

Sub アウトラインのテキスト化()
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Const TristateFalse = 0
    Dim fs, f, i, j, para
    Dim sNo As String, sSep As String, sStr As String
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile("OutLinefile.txt", ForAppending, True, TristateFalse)
    For Each para In ActiveDocument.Sections(1).Range.Paragraphs
        j = para.Style.ListLevelNumber
        ' 箇条書き番号は、別なプロパティで取り出し
        sNo = para.Range.ListFormat.ListString

        ' かっこ付きなら文章はそのままつなげる
        If StrConv(Right(sNo, 1), vbNarrow) = ")" Then
            sSep = ""
        Else
            sSep = " "
        End If

        ' レベル分のタブを前に付ける → 階層にしないときは、vbtabを" "に変更
        sStr = CleanChr(sNo & sSep & para.Range)
        If j >= 2 Then
            sStr = String(j - 1, vbTab) & sStr
        End If
        f.write sStr
    Next
    f.Close
End Sub

Function CleanChr(s As String)
    
    ' 改行(Shift-Enter)は、文字列上VerticalTabで入っているので、それを改行にする
    If InStr(1, s, vbVerticalTab, vbBinaryCompare) <> 0 Then
        s = """" & Replace(s, vbVerticalTab, vbCr, 1, -1, vbBinaryCompare)
        s = Left(s, Len(s) - 1) & """" & vbCrLf
    End If
    CleanChr = s

End Function

今年はばっちりとホタル鑑賞

 昨年に続き野生のホタルを見てきました。今年は結構な数いました。近くに降りてきて子供がしばらく追いかけしていました。お勧めです。
 温暖化の影響でしょうか、昨年と同じ時期に行ったのですが、それほど寒くなかった。

データ

  • 日時: 2008/6/14(土)20:00
  • 場所: こども自然公園
  • 住所: 横浜市旭区大池町65-1(二俣川駅近く。車では横浜新道 川上ICからすぐ)
  • 駐車場: 300台(24時間)。今回はそれほど駐車数は多くない。半分くらい。
  • 電話: 045-311-2016(ただし、三ツ沢にある事務所。公園とは別な場所なので、ナビでは住所か施設名で設定)

気をつけたいこと

  • 長袖必須
     昼は30度近くあっても、この時期夜は冷える。今回は、ウィンドブレーカーにて防備。
  • 懐中電灯持参
     道は暗くてほとんど見えず足元が不安。蛍生息地までは、ライトが必要。ただし、近くに行ったらすぐにライトは消しましょう。
  • くつ
     昨年はサンダルで失敗したので、今回はくつで快適でした。
  • 公園内場所事前確認
     昨年は遠回りで何とかたどり着いたのだが、今年はあっという間に到着。
    公園内の場所はこちらの18番

ショートカットキーが遅い!

 昨日から急にショートカットキーがものすごく遅くなる現象が出ています。

現象

電卓にCtrl+Alt+C, エディタにCtrl+Alt+Hを割り当ててているのだが、押してから何と5秒くらい経ってはじめて起動される。

原因と対処

Windowsテーマを保存したものにしておくと、なぜかショートカットの反応が遅くなる模様(仕様か?)。
テーマを「Windowsクラシック(変更済)」に戻したらさくさく動き出した。

詳細

以前のデスクトップの「テーマ」は、「Windowsクラシック(変更済)」だったが、一時的にテーマを変えるために保存した。別テーマで作業後、元のテーマを呼び出して使っていたのだが、、、
どうも自作のテーマを使うとショートカットキーが鬼のように遅くなるようです。

アルゴリズムではないですが・・・フィボナッチ数列

あなたが一番好きなアルゴリズムを教えてください。 また、その理由やどんな点が好きなのかも教えてください。
アルゴリズムではないですが、フィボナッチ数列はすごいですねぇ。
まあ、広い意味で再帰系のアルゴリズムになるかも知れませんが、畳の敷き詰め問題などでお世話になりました。
迷路のパターン数とかもそうですね。
黄金比になるので、自然界にたくさんこのフィボナッチ数列で示される事象があると言うのにも驚きがあります。

PIO病はあなどってはいけない

以前、PIO病のことを書きましたが、やはりディスクというものはある程度寿命があり、PIO病を発病した後は、非常に不安定になりました。


PIO病を治したと思ったのもつかの間、なんと一週間後には使っている最中にブルースクリーンになり、core(メモリダンプ)を吐き出しに・・・
吐き出しにあまりに時間がかかったので、途中で強制的に電源ボタンを押したところ、二度と立ち上がらなくなりました。
→ どうもブート辺りが壊れたようです。


近くのPCショップへ走り、内蔵ディスクを買ってきてひたすらリカバリをした週末でした。
フルバックアップは取っていなかったため、ツール類は一つずつネットからダウンロードして入れるはめになりました。
フルバックアップは大事ですね。

【教訓】バックアップは常日頃取る、PIO病が出たらそろそろディスクが危ない

PIO病

しばらく前に書いたパソコンが遅くなる件は、PIO病でした。


ハードディスクでエラーやタイムアウトが6回起きると、DMAモードからPIOモードという非常に遅いモードに勝手に変えられてしまうという病気。
勝手に変えられるのは少し困り物です。何か一言でいいからメッセージを出してくれればいいのに。たぶん、スタンバイモードでずっと使い続けていたせいと思われます。


Windows UPDATEを元に戻したら直ったのは、単にカウンタが元に戻っていたためと思われます。←未確認ですが。Windows UPDATEを元に戻した後でも遅くなってしまっていた。


結局、ドライバを削除するとともに、レジストリの一部(ResetErrorCountersOnSuccess)を書き換えて復旧しました。


PIO病は、結構ポピュラーな話みたいで、ググると結構たくさん出ますね。

google:PIO病


中でも、下記が参考になると思います。
http://densen-sakana.at.webry.info/200511/article_25.html
http://hail2u.net/blog/software/transfer_modes_trouble.html
http://www.zechs-web.net/2005/10/07_130924.php


マイクロソフト公式
http://support.microsoft.com/default.aspx?scid=kb;ja;817472

PIO病判断のための具体的な表示

(2009/8/2追記)
PIO病を発病したときには、デバイスマネージャでドライバの状態を見るとディスクへのアクセスが、DMAモードからPIOモードに変わっています。
●Step1.コントロールパネル→システム→「ハードウェア」タブ→デバイスマネージャ→ディスクのプライマリIDEチャネルを見る

●Step2.詳細設定タブの「デバイス0」の「現在の転送モード」を見る
(下記は正常な場合)

●Step3.「現在の転送モード」に「DMA」という文字が入っていれば一先ず安心。もしPIOという文字があったならPIO病。
(画面のハードコピーが取れなかったので、無理にPIOにしてみた画面のハードコピーを添付)

(2009/8/2追記終了)


ちなみに今回のPIOが出るきっかけになったエラーは、次のもの。

ソース(S): atapi  分類(R):なし
種類(E):エラー   イベントID(I):9
バイス \Device\Ide\IdePort0 はタイムアウト期間内に応答しませんでした。

ディスクも少し調子悪くなっているかも。ちょっと様子見です。
もし、本当にディスクがまずいなら交換しなくては。。。


ディスクドライバの変遷(WindowsXP SP2、デバイスマネージャ上)
C:\Windows\system32\drivers\atapi.sys

モード 日付 version
PIO時 2001/7/1 5.1.2600.1106
ドライバ削除後のDMA時 2001/7/1 5.1.2600.2180

どうもドライバの実態は変わっていないのに、バージョンの最後の文字だけが変わっている雰囲気です。


●教訓

  • 異様に遅くなったときは、イベントビューアでエラーないか見てみる
  • バイスマネージャでIDEのモードを確認する
  • バックアップは忘れずに取っておく