はじめに
先日の記事の姉妹版です。
Excel のセルの選択範囲__セル範囲自体も、その上に描画されている図形なども__を画像ファイルとして出力します。Excel の「カメラ」機能で切り出した図をファイルにする感じですね。
これもネットで調べると、同じような方法が見つかりますが、先日のマクロと同じく、A1 セルにパスを入力しておく形で実現します。
続きを読むVBA を書いていると、処理対象の Selection オブジェクトが、想定しているものであるかどうか調べたいことがあります。
図形が選択されているか判定する-VarType関数・ShapeRangeプロパティ:エクセルマクロ・Excel VBAの使い方/DrawingObjectsオブジェクト
セル範囲が選択状態にあるかどうかを判定するものは見つかりませんでした。「図形が選択されていなければ」という判定では不十分の可能性があります。グラフオブジェクトかもしれませんしね。
ということで「セルまたはセル範囲が選択されている状態であるかどうか」を
サポンテは Excel で簡単な図を書くことがあります。
なぜ Excel を使うか?普及率が群を抜いて高いためです。サポンテは色々な会社で仕事しましたが、いまのところ 100% の会社でインストールされています。アプリのインストールを制限されている環境でも、これだけは確実にインストールされています。Visio などのドローソフトを導入する費用がなかったり、自分で勝手にソフトをインストールできない環境に置かれても、Excel が導入されていない企業はありませんでした。
書いた図を、PNG などに出力したいことが、しばしば発生します。
続きを読むソースコードとデータは切り離して管理すべきですが、それでもコード中にデータを埋め込みたいケースはしばしば発生します。テストコードとか。
そのようなデータの元ネタとして、Excel や Numbers や Google Spreadsheet などの表計算ソフトや、ObjectBrowser などの RDBMS クライアントを用いたいという要件はあるかと思います。
そのようなデータ元ネタは「コピー」すると、TSV 文字列としてクリップボードに格納されます。その TSV を「ペースト」してコードを生成してくれるジェネレータを JSFiddle で作りました。
左の入力欄に、サンプルのように TSV 文字列をコピペして、convert ボタンをクリックしてください。右側の入力欄に生成したコードが書き出されます。
サンプル文字列がすでに入力されているので、convert ボタンをクリックするだけで動作を確認できます。
以下のようなコードが出力されます。
var dataSrc = new[]{ @"1 Apple 200", @"2 Banana 150", @"3 Citrus 300", }; var data = dataSrc .Select(e => e.Split(' ')) .Select(e => new { Id = e[0], Name = e[1], Price = e[2], }); foreach (var item in data) { Console.WriteLine(item.ToString()); }
念のため、ソースコードも載っけておきます。JSFiddle がサービス終了しちゃうかもしれませんからね。
それに、オフラインで使いたいという要件もあるかもしれません(その場合、CDN のところは修正してください)。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> @media (prefers-color-scheme: dark) { body { background-color: #333; color: #fff; } textarea { background-color: #444; color: #fff; } } </style> </head> <body> <div id="app"> <textarea name="" id="src" cols="30" rows="10" v-model="src" placeholder="Excel などからコピペしてください"></textarea> <button v-on:click="convert">convert</button> <textarea name="" id="result" cols="30" rows="10" v-model="result"></textarea> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> <script> var app = new Vue({ el: "#app", data: { src: "Id\tName\tPrice\n1\tApple\t200\n2\tBanana\t150\n3\tCitrus\t300", result: "", }, methods: { convert: function (e) { var lines = this.src.split("\n"); var ret = "var dataSrc = new []{\n"; for (let i = 1; i < lines.length; i++) { ret += " @\""; ret += lines[i]; ret += "\",\n"; } ret += "};\n\n"; ret += "var data = dataSrc\n"; ret += " .Select(e => e.Split('\t'))\n"; ret += " .Select(e => new {\n"; var colnames = lines[0].split("\t"); for (let j = 0; j < colnames.length; j++) { ret += " " + colnames[j] + " = e[" + j + "],\n"; } ret += " });\n\n"; ret += "foreach (var item in data)\n"; ret += "{\n"; ret += " Console.WriteLine(item.ToString());\n"; ret += "}\n"; this.result = ret; } } }); </script> </body> </html>
以前なら、このようなコードは Excel の VBA で作成していました。
でも Excel の無い環境もあるでしょうし、VBA だと共有したい時に配布しないといけないんですよね。共有したいツールが増えると、手間も増えます。
そのような点から、JavaScript を使った Web サービスの方が、作り手の視点からも、使う側の視点からも嬉しい気がしてきました。Web サービスになっていれば URL をメールやチャットで送るだけですからね。JSFiddle や CodePen のような便利なサービスもありますし。
Git で差分比較を行う際に、外部ツールを使う方法です。
基本的にどんなツールも、すでに誰かが書いていることが多いので、リンクの紹介が主です。
下記にない場合は 「git diff <ツール名>
」 で検索すれば、何かしら情報が出てくるでしょう。
Mac の場合は以下がいろいろ詳しいですね。
参考:Mac で使える git mergetool をいろいろ試してみる - 準備編 | そんなこと覚えてない
Merge のことはあんまり考えていません。個人開発が多いためか、あんまりコンフリクトしないので。
続きを読むExcel を使っていて、編集中のファイル(アクティブワークブック)のフォルダを開きたいと思うことが、しばしばあります。
サポンテは、作業環境をシンプルに保ちたく、今すぐに使わないウィンドウをずっと開いておくのに抵抗を感じます。エクスプローラのウィンドウも、必要なければすぐに閉じてしまいます。
それは、後でまた開きたくなった時にすぐ開くことができれば問題ありません。
そういうことでサポンテは、アクティブブックのフォルダを開くマクロをリボンに登録して使っています。このマクロ自体は、たいへん短いコード(実質一行)なので、記事を書いて公開するほどのものでもありませんでした。
ところが最近、SharePoint 上のファイルを直接開いて編集するということを頻繁にするようになりました。この場合も、ブラウザで SharePoint を開いてほしい。
続きを読む