パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

名鉄の駅に掲示されている時刻表はExcel製?」記事へのコメント

  • by Anonymous Coward on 2019年03月23日 7時27分 (#3585773)

    俺もiTextやApache PDFBoxでゴチャゴチャとpdfを扱った経験はいくつもあるけど
    Excelのマクロだって、使ってみりゃいい具合に強力なんよな。
    VBAはちょっと慣れないけど。
    セル結合もセルの幅も背景色も、ロジックで調整し放題だし。
    DBにも普通に繋げられるし。他のドキュメントも開けるし。

    • by Anonymous Coward on 2019年03月23日 7時44分 (#3585775)

      相手が事務方なら、エンドユーザ自身に所望のモック作らせて
      それをテンプレに自動生成するのが手っ取り早いですからね。
      用途に応じて適切な工具があるのに、イメージだけで毛嫌いするのは勿体ない。

      親コメント
      • by Anonymous Coward

        何かの記事で読んだけど
        最も有効活用されているシステムは担当者が自作したExcelマクロだ

        ってのがあったがExcelかどうかは本筋ではないとして、
        顧客が本当に欲しかったもの、が最も実現しやすいよな

        • by Anonymous Coward

          欲しくないものが作られはしないってだけで、
          こういうこともしたいけど(APIや言語の制限やスキル不足で)
          出来ないので妥協したって物も数多く存在するかと……

          • by Anonymous Coward

            そんなのExcelマクロに限った話じゃないだろ

            • by Anonymous Coward

              限った話じゃないと書いてあるのに

    • 最大の問題はVBAは遅いってことだ。

      親コメント
    • by Anonymous Coward

      マクロは自分一人で管理する分にはいいと思うよ。VBA環境はいい所もある。

      ExcelVBAの地獄なところは、
      ・テキストがxlsmに埋め込まれてソース管理できない(工夫すればできるが労力が無駄)
      ・テストが書けない(工夫(ry
      ・エラー行が特定できない事がある
      ・謎のリソース不足で落ちる(VBAで不足するほどリソースを大量に使う発想がそもそもおかしいのだが)
      ・TryCatchがない
      ・動的配列が無い(正確にはそういったものは皆無ではないがReDimとかいつの時代のアレだ)
      ・辞書(連想配列)が使い辛い
      ・当然ラムダとかない、というか関数参照が碌に扱えないのでちょっと本腰入れてプログラム書こうとか

      • by Anonymous Coward

        動的配列はReDimでどうにかするしかないですね。初期化してないVariantでも安全に使えるUBound作ったり色々対象してます。
        連想配列はDictionary使ってますけど、言語標準機能じゃないのは確かに気持ち悪いですね。

        • by Anonymous Coward

          3行以上読めないやつ向けに要点だけを引用して貼っておこう
          > 工夫すればできるが労力が無駄

          • by Anonymous Coward

            3行以上読めない、じゃなくて3行以上読まない、じゃないかな。
            何故書いた文章を漏れなく隅々まで読んでくれると思っているのだろうか。
            暇人ならではの発想?

            • by Anonymous Coward

              読むだけならばともかく、議論に参加しながら読まないのはダメでしょう。

              • by Anonymous Coward

                こんな場末の掲示板サイトで、議論に参加するって意識なんか端から無いんじゃ

              • by Anonymous Coward

                ここは議論する場所じゃなくて雑談する場所だからな。

              • by Anonymous Coward

                コンパクトに要点をまとめられない奴は議論に参加する資格なし、ってことじゃない?

              • by Anonymous Coward

                楽しくおしゃべりしていただけなのに、議論好きのレッテルを貼られるぞ?

              • by Anonymous Coward

                書いてあるのを読んでないだろおまえ、と言われたら、必死になって「だって雑談だし」って顔真っ赤にして三連投しちゃうような人は、議論どころか雑談にも向いてないと思う。

          • by Anonymous Coward

            3行以上読めないやつ向けに要点だけを引用して貼っておこう
            > 工夫すればできるが労力が無駄

            自分の環境しか見えてないバカ発見。
            こうですか?

      • by Anonymous Coward

        ReDimはPreserveつけるととんでもなく重いから、基本的に動的配列を使いたいときはCollectionを使うなー。
        んで、本当に「配列」にしたいときは、要素数が確定してから静的配列を宣言して値を代入してます。

      • by Anonymous Coward

        Excel内部にはマクロを持たせず、PowerShell等、外部からExcelを操作したらどうかと検討したこともあったけど
        利用する側の利便性も考慮したベストな方法が見つからない。

        • by Anonymous Coward

          外部からだと、1変数参照に「ExcelOpen→参照→ExcelClose」とかなるから
          のろさダイナマイトになるでしょう。
          #外部からシートをなめるのと、検索条件をシートの空きに書いて
          #一気にVLookupするのとの時間差がそれ。

          • by Anonymous Coward

            うーん、dde操作イメージかな?

            普通は、COM操作になるので、参照毎にOpen,Closeする必要なんてないと思いますよ。

            • by Anonymous Coward

              >参照毎にOpen,Closeする必要なんてない

              たしかにOpen,Closeというのは言い過ぎだったかも知れませんが、
              内部からCells(,)を呼ぶのと、外部から呼ぶのでは速度が段違いです。

              1000行位なめると、その差は歴然でした。Open,Closeはうそかも知れませんが、
              なんらかのオーバーヘッド(内部なら保持可能な参照を、外部からでは持ち切れず、
              一々、参照を取り直しとか)が有るのは事実です。

              内部(COMインターフェースも不要)と外部(COM操作、Excel.Applicationへの
              参照を変数に入れ、それに対する操作)での比較です。
              それはご指摘の通りです。

              • by Anonymous Coward

                それがなきゃWSH/HTA(JScript)+polyfillでそこそこ快適なんだけどねぇ……
                簡単なデータ読むだけなら全選択コピーからのクリップボード読みでまぁまぁ行ける。
                メタ文字対策するならCSVとかでファイルに吐かんと駄目だろうけど。
                書式とかも読むならどうしようもない。

                遅くなる原因はExcel由来オブジェクトの実体が全部Excelプロセス内に居て、
                配列アクセス含めた全操作が全部リモートプロシージャコールかなんかになってるんじゃないかと。
                COM経由でマクロ叩いてデータ変換掛けてプリミティブでデータ貰えれば良いんだが、
                COMから楽に叩けるのはクソ古いExcel互換マクロでWin32API呼ぶ位しか用途の無いやつだったり。

              • by Anonymous Coward

                マーシャルが遅いので1000回取ったら遅い
                rangeだったかで一気にどかっと取ればだいぶ速いよ

              • by Anonymous Coward

                識者に教えていただきたいのですが、VBAでCells(,)とやるのと、外部のプログラムから相当の処理をやるのと
                速度に違いがでるのでしょうか?

                VBAのプログラムはExcelファイルの中に組み込みという違いがありますが、技術的にはどっちもCOMで通信してるのであって
                そこの性能は変わらないとおもってます。

              • by Anonymous Coward

                アウトプロセス(OLEサーバ)とインプロセスの差では無いでしょうか?

                後者ならポインタを保持すれば参照になるでしょうけれど、前者は
                先方のプロセスのポインタは無意味です。意味のある様に一々、解釈
                しなおさないといけないのでしょう。そして、Excelはその再解釈が
                とくに重い(accdbなどと比べて)データ構造だからではないかと
                想像します。

              • by Anonymous Coward

                それならxlsxをXMLデータとして直接扱った方が速いでしょ

              • by Anonymous Coward

                すごい! 有難うございます。

                Book1\xl\worksheets\sheet1.xmlを7zで解凍:

                <?xml version="1.0" encoding="UTF-8" standalone="true"?>
                <worksheet xr:uid="{C1B9B2EA-E173-4F57-A2EB-92CA6B3B9CD1}" xmlns:xr3=略 >
                <dimension ref="E20:F20"/>

                <sheetViews>

                <sheetView workbookViewId="0" tabSelected="1">
                <selection sqref="F21" activeCell="F21"/>
                </sheetView>
                </sheetViews>
                <sheetFormatPr x14ac:dyDescent="0.4" defaultRowHeight="18.75"/>

                <sheetData>

                <row r="20" x14ac:dyDescent

              • by Anonymous Coward

                そんな原始的な事しなくても、OpenXML(MS謹製)やEPPlus(サードパーティー)などを使えば簡単に参照、編集できますよ。

                特に後者はデータ構造がExcleオブジェクトに似た構成になっているので直感的に触れますし。

        • by Anonymous Coward

          COMアドインにしてしまうのが、簡単だと思いますよ。

          配布もclickonceで簡単にできますし。

      • by Anonymous Coward

        OfficeアプリのOLEオートメーションは本当に便利なんだけど
        それを頑なに「VBAで」扱おうとするIT土方がこういう風評ばらまいてるんだよな

        • by Anonymous Coward

          VariantもOptionalもVBAが先鞭だし、別に言語に大した瑕疵が有る訳でも無し、
          なんでVBAが悪いのか?
          まぁ、32ビットDOS上でなら、どんな言語もぼろぼろだったのは事実でしょうが。

          • by Anonymous Coward

            当時の話なんかしてないし、VBAの短所は元コメがさんざん書き散らしてるだろ
            何に反論してるんだ?

            • by Anonymous Coward

              だから、たかがそれだけじゃないか、と言っている。
              短所の無い言語なんか無いのに、永久失格的に言うことも
              無いじゃないか、と反論している。

        • by Anonymous Coward

          「本当に便利」か、再考するべき。
          そのシステム、本当にOfficeベースで構築するのが適切なのか。
          一見手軽と思われるが、工数は本当に削減されているのか?顧客の幸福は?

          Officeから脱却する選択肢を持たないエンジニアこそ典型的な「IT土方」であろう。

          • by Anonymous Coward

            お前の言う「そのシステム」がどういう条件なのかは曖昧すぎるけど
            「OLEオートメーションが本当に便利」なことに特に間違いは無いだろ

            とにかく否定したいために否定できる土俵を漠然と定義して語るのは自己満足でしかないぞ

            • by Anonymous Coward

              「OLEオートメーションが本当に便利」って、「ライブラリは本当に便利」って言われてるのと大差ない。
              便利なのはOfficeでなく、OLEオートメーションというインターフェースの方だと言いたかったという事かい?
              それが便利というのは否定はしないけど、そういう仕組みのものがそう動くのが便利だという発想はちょっと無かった。

              外から制御できるとしてもOfficeを使うことはOfficeに縛られること。
              Officeを従えるでなく、Officeに使われるようなシステム開発思想はいかにもIT土方らしいよね、と言ってるだけだよ。
              君は違うんだね。それならいい。

              • by Anonymous Coward

                なんだかもう言ってることがヴィーガンみたいだな
                憎むのが目的化してて、ある意味こいつもOfficeに縛られてる

              • by Anonymous Coward

                RPAソフトのスクリプト書いてる人の意見が待たれる。

            • by Anonymous Coward

              便利だけど、ファイルサーバーの共有フォルダのあるフォルダに
              全部ある、xlsxファイル200個から、特定のセルの値10個をもって
              来るのに2時間以上かかる。
              データ参照は、RDBのリモートインターフェースが、やはり有利
              なので、ぞうさんも好きだが、きりんさんも好きなのがいいし、
              最近ならクラウドもいい。

              • by Anonymous Coward

                「自動車は便利だけど、東京から大阪まで行くなら新幹線が、やはり有利」

                何にでもサジ加減と得手不得手があるわな

      • by Anonymous Coward

        >テキストがxlsmに埋め込まれてソース管理できない(工夫すればできるが労力が無駄)
        >編集環境がVisual Basic Editorに縛られる

        Exportすれば良い。
        去年の後半から初めてVBAを触りだし、今は数万行のマクロを組んでいるけれど、テキストエディタ上で編集して、VBEに貼り付けてます。
        完成したらExport。
        VBEからテキストエディタにコピペしないのはコピペの方向を一方通行に限定することで完成品にミスが紛れ込むのを防ぐ目的がある。

        • by Anonymous Coward

          ActiveWorkbook.VBProject.VBComponents(n).Export(出力パス)?

          後、Formもテキスト化した方がいい。(Functionの唯一の参照先がFormの
          プロパティで、VBAから使っていないから消して、わーーーとなったり
          しない様に)
          ただし、AccdbではFormのテキストがUnicode(16ビット)で出ますので
          注意。(ADODBにコード変換機能有(ただしFile To File))

          • by Anonymous Coward

            Exportを自動化したいなら、xlmやxlsmに含まれるvbaproject.binをデコードするツールを使った方が良いと思う。

            • by Anonymous Coward

              おまえら元コメの「(工夫すればできるが労力が無駄)」を無視しすぎ

              • by Anonymous Coward

                そこに突っ込む人は「労力が無駄」を無視しすぎ

              • by Anonymous Coward

                他のプログラミング言語や環境における、もろもろの習得コストや構築コストや導入コストを無視し過ぎ。
                例えば動作環境が事務方のPC前提なら、何が最適だと思う?

      • by Anonymous Coward

        割合最近Officeオートメーションを触るようになりましたが、採用されている技術の古さが致命傷レベルだと思いますが
        それを忘れればElectronとそう変わらないと思います。

        さて、JavaScriptの地獄なところ、合ってるかわかりませんが…

        ・テキストがhtmlに埋め込まれてソース管理できない(工夫すればできるが労力が無駄)
        ・テストがconsole.log(工夫(ry
        ・エラー行が特定できない事がある(JScript)
        ・謎のリソース不足で落ちる(npmでlocal-chromiumを大量に使う発想がそもそもおかしいのだが)
        ・TryCatchはcatchが分岐を持たない
        ・動的配列が無い(プロパティへの特殊なアクセスである)

        • by Anonymous Coward

          面白くもないし間違いだらけで突っ込むのも面倒臭い。
          ネタにする言語のチョイスからして下手くそ。

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

処理中...