FC2ブログ

スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

今日中に完成無理ッ!

2010年07月31日 23:38

「vs Adobe Premiere Elements7.0 ドロップシャドウ色変更マクロ」、ようやくエクセルのシートに設定されてるフォントを読み込んで表示するところまできました。あくまでテストプログラムですけど。

100724.jpg

ただし、標準設定のファイルが13MBくらいあるんですけど、その読み込み処理だけで30分以上かかってるので、全く実用に耐えませんね。マクロ組んでる十一号機がクアッドコアだったので、Excelが占有してる1つのコア以外はオールフリーなんで、他のこともサクサクできるんですけど、Excelが占有してるコアはずっと100%近い稼働率でした(笑)

とりあえず、標準設定では121個のテキストスタイルが設定されてるんですが、そのほとんどが白か黒。青なんかは1つずつ位しかなかったかなあ。緑なんかなかったし。

設定テキストを12に減らしたファイルでも5分くらい読み込みにかかるんですよね。

一度「Tag」シートに全部読み込んで、そこから必要な項目を「Main」シートに表示させてるんで、「Tag」シートに読み込む時間が相当かかるみたいですね。これを全部メモリ上の配列を使ってやってしまえばもっと早くなるんでしょうけど。後処理の楽さを考えてシート読み込みにしたんですが、これはメモリ処理に変えた方がいいかも知れませんね~。少なくても実用には耐えないし、一般公開はできない(^^;)

100724_2.jpg

↑ドロップシャドウの色情報をタグから拾って変換しているところ。
Worksheetsプロパティで「Tag」シートにアクセスしてるところが遅くなる最大の原因です(^^;)

あと一番上のシートのRGBを書き直せば表示色を変更するマクロと、書き換えた色情報を元の位置に戻してファイルに書き込むマクロが残ってます。

もう今日無理!!

明日もラジオ体操なので、今日も寝ま~す!


コメント

  1. P太郎 | URL | -

    すっごい楽しそうwww

    P太郎です。
    すっかりご無沙汰してます。

    忙しさにかまけて完全に幽霊部員なんですが、久しぶりにVBAのコードを見て思わず指が疼きました(苦笑)。
    正直、VBAからどのようにPremiere Elementsをいじるのか興味津々でした。
    しかし処理フローをよく理解していないので、いまだに全体像がつかめておらず。。。OTZ

    コードを拝見させていただいた範囲で、ちょっとばかり処理を速く終わらせるアイディアが浮かんだので僭越ですが少し書かせていただきます(汗)。

    その1:
    まずTagシートについてですが、オブジェクトの参照回数が多いので、Worksheet型の変数を作成して、そこにTagシートの参照をセットするとだいぶ速くなると思います。

    その2:
    ついでに申し上げますと、For m=1 to 5625 以下のIfにおいて同じセルの値で複数回の条件分岐をしているので、ここをSelect caseに置き換えるとより高速化できるハズです。

    その3:
    同じセル、というかRangeオブジェクトから値の読みだしを複数回しているので、その部分をプリミティブ型への代入に置き換えて代入した値を比較処理に使用すると速くなります。
    ああ、でも文中じゃString型だから参照型でした(汗)。

    その1と2と3を組み合わせでサンプルなぞを。。。
    途中のコードをちょっと端折ってます。


    '勝手に足した変数・・・val1、val2って、間違いやすいよくない変数名の付け方ですね(汗)
    Dim val1 As String
    Dim val2 As String
    Dim sh As Worksheet

    ~最初の3行くらい省略

    '以下の代入で、参照するシート名が変わってもFor以下の変更は不要になります
    Set sh = Worksheets("Tag")

    For l = 3 To j -2
    For m = 1 To 5625
    val1 = sh.Cells(m, l).Value

    Select Case val1
    Case "<font>"
    fontnam = sh.Cells(m + 5, l).Value
    Case "</style>"
    fontstl = sh.Cells(m - 1 ,l).Value
    Case "</size>"
    fontsiz = sh.Cells(m - 1 ,l).Value
    Case "<shadow>"
    n = m
    '下記の文はrd、gn、blがString型であることが前提です
    val2 = sh.Cells(n, l).Value

    Do While (val2 <> "</shadow>")

    Select Case val2
    Case rd
    cr = Int(sh.Cells(n + 1, l).Value * 255)
    Case gn
    cg = Int(sh.Cells(n + 1, l).Value * 255)
    Case bl
    cb = Int(sh.Cells(n + 1, l).Value * 255)
    End Select

    n = n + 1
    ~その後の処理いろいろ
    Loop
    ~その後の処理いろいろ
    End Select
    ~その後の処理いろいろ
    End Select
    ~その後の処理いろいろ
    Next m
    ~その後の処理いろいろ
    Next l

  2. P太郎 | URL | -

    インデントが・・・

    P太郎です。
    連投すみません。。。

    インデントつけて書いたのに見事に全部吹っ飛んでてビックリしました。
    でも久しぶりにちょこっとコード書いたので楽しかったですwww

    Tagシートにデータを読み込む部分も気になりますー。
    文字通りタグが付いているところを見るとXML形式のファイルを読み込んでいるんですかね?

    しかし、たかやさん、多才です。。。
    マシン作ってコード書いて、、、まさに何でもアリですね!

  3. たかや@管理人 | URL | MAkumj2k

    Re: 今日中に完成無理ッ!

    P太郎さん、こんばんは!
    VBAは全くの独学で、HELPとそれまでのVCじゃないC言語の知識だけで作ってるので、未だに訳わかんないことだらけです。プロージャーってなに!? プロパティとメソッドってどう違うの!? とかそんなレベルです(^^;)

    ファイルはXML形式なんですけど、全く改行されておらず、最初から最後までを1行で書いてるんですよね、元ファイル(^^;) しかもXML読めるソフトで編集したら、元にはもう戻せないと言う極悪な仕様(インデントや改行コードが悪さをするようで)なんで、プログラム自作するしかありませんでした…。

    VBA使うようになってからSELECT~CASEなんてすっかり忘れてました(笑) C言語じゃこっちが主流だったのに…。worksheet型の変数とか知らない知識を教えていただけたのですっごく助かります! 書いていただいたコードで高速化を図ってみますね!

    …これより上のコードはひどすぎて見せられません(笑)
    ていうか、似たような事してますよ~。1行なんでString型の変数に全部読み込んで一文字ずつバラしていって、コードを生成できたらTagシートのセルに放り込む…。この繰り返しです(笑) 1つのテキストスタイルあたりタグと値で5600セル程度あるんで、ちょっと洒落になってないプログラムなんですけど(^^;)

    ホント、VBやVC使ってメモリ上で全部賄うプログラムが書ければもっと高速化できるんでしょうけど、V系のプログラムは、専門学校を卒業して、プログラマも辞めた後に主流になっただけに、知識が全くないに等しいんですよね(^^;) VBAもプログラマ辞めた後に事務職やってたとき、派遣の子から教えてもらったくらいなんで(^^;)

    多才…と言うより興味を持ったら何でも手を出してみたくなるんで、結局器用貧乏でなんでも中途半端なだけですよ~(笑)

  4. 蓮-hasu- | URL | 1m.x47P6

    Re: 今日中に完成無理ッ!

    P太郎さんとたかやさんの会話が
    宇宙語に見えます・・・ww

  5. たかや@管理人 | URL | MAkumj2k

    Re: 今日中に完成無理ッ!

    >蓮-hasu-さんこんばんは~!

    宇宙語(笑)

    この辺のプログラム言語やマクロ言語はまだ英語が基調なので、手を出しやすいんですよ。

    ロボットや機械の制御のプログラムで使う俗に「マシン語」と呼ばれてるのは、ほんとに宇宙語に近いです(笑) でも情報処理の国家資格取ろうと思ったら、このマシン語の内「CASTLE(だったっけ?)」を覚えないといけないんですよね~(^^;)

    仕事でも15年ほど前に別のマシン語使ってましたけど、もう忘れちゃいましたね~(笑)

  6. 蓮-hasu- | URL | 1m.x47P6

    Re: 今日中に完成無理ッ!

    いやはや・・・凄い世界ですね(^^;

コメントの投稿

(コメント編集・削除に必要)
(管理者にだけ表示を許可する)

トラックバック

この記事のトラックバックURL
http://minatozaka.blog118.fc2.com/tb.php/580-4f8a4944
この記事へのトラックバック


最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。