may the VBA be with you

Excel VBAとか業務自動化とか

衝撃のラスト系の映画に思うこと

Life Is Strange にはまっているからというわけでもないのですが、昔から時間軸が戻ったり*1ごちゃごちゃしている*2映画が好きで、このたび、「メメント」という映画(DVD)を観ました。

メメント [Blu-ray]

とても面白かったです。


まあ、いわゆる「衝撃のラスト」とか「どんでん返し」的な映画です。
そういうのが好きなんです。

ただ、それ系の映画を見つける時に「驚愕のラスト」とか「どんでん返し」とかいう枕詞がどうしても目に入ってしまい、観ている時も「どうせ驚愕のラストなんだろ」とか「どんでん返しとすると、ラストはどうなるのかな」とか考えてしまう。

ユージュアル・サスペクツみたいな映画を観たいと思って同じような衝撃が得られないかなと映画を調べると、どうしても「どうせあれだろ?」みたいな感じになってしまうというジレンマ。



で、「驚愕のラスト」というのを意識して観ていたとしたら、「何も起こらない」というのが本当の驚愕のラストなのではないかと思ったりもするわけです。
ただ、想像したところ、それってやっぱり消化不良感があるんですよね。


どんでん返ししても「あ、なるほどね」みたいな感じになってしまい、その裏をかくと「そうじゃねえんだよ」と言われてしまうという、とても苦しい状況。
みんなが納得する「どんでん返し」というのを見せるというのはなかなか大変だろうな、と思います。




まあ、そんなわけで、メメントは、おすすめです。

何の先入観もなく観るのがいいと思います。

*1:バックトゥザフューチャーとか

*2:パルプフィクションとか

思いつき連載 VBA王子 ニューヨークへ行く #12

前回

vba-belle-equipe.hatenablog.com

登場人物

赤羽健太

主人公

王子友哉

赤羽の同期。営業のエース候補

川口瑞穂

赤羽の同期。広報課。

浮間船子

赤羽の先輩。

  • 甘いものが好き
  • 辛いものも好き
  • 食べ物は大体好き
北浦和

おかっぱ頭。

#12

 赤羽が通常業務の合間を縫って地下の資料管理室に通うようになってから、一週間が経とうとしていた。
 長机の上が少し整理され、二人いても息苦しさをそれほど感じなくなった室内に、カタカタとキーボード音が響いている。
「ワックスかける、ハッ!」
「ふきとる、ハッ!」
「ワックスかける、ハッ!」
「ふきとる、ハッ!」
 背後の声を無視して、赤羽は目の前の画面と指先に神経を集中していた。
 kiokunigozaimasenn・・・「どうだ?」
 しばらくして、結果が画面に表示される。
 赤羽は、安堵のため息をついた。横で北浦は目を閉じ、腕を組んでうなずいている。
「よくやった、若者よ。しかしこれで終わりではないぞ。タイピングの道に終わりは―」 
「そのキャラなんなんですか。てゆうかさっきのかけ声もなんですか」
「まあ、修業っぽいかなと思いまして」
「・・・そうですか」
「とりあえず最低限打てるようになったみたいだけど、これからも練習しろよ。ほんと最低限だから。マジで」
「わかりましたから、そんなに言わないでください」
 北浦は細かくうなずいた後、大きくあくびをした。赤羽はつられないようにこらえた。
「タイピングの練習くらい大学でやってこいよな、まったく。パソコン使う職場でブラインドタッチできないなんて、あれだぞ? あれみたいなもんだぞ?」
「どれですか?」
「・・・なんかない?」
「ないです」
「じゃ、そういうことで、次はVBAの成果を見せてもらおう。見せてもらおうか、VBAの成果とやらの性能とやらを」
「今日、テンションおかしいですね」
 疲れてんだよ、と北浦は力無く笑った。

「おお、ちゃんと動いてるな。どれどれ、コードを見せていただけますかな? ふむふむなるほどね」
 何度もテストして、何度も見直したから、おそらく問題ない、はず。
 赤羽はドキドキしながら、北浦が操作するのを見守る。
「なるほどなるほど」北浦はにこやかに、発表した。「50点」
 
 赤羽が首をひねりながら一階に上がると、玄関に王子の姿が見えた。外回りから戻ったのだろう。
 王子は赤羽に気づくと、喫茶室の方向を指さした。赤羽はうなずいて返事をする。
 いくつかの自販機の近くに机、椅子が置かれただけのスペース。それが一階喫茶室だ。
 室ではないのではないか、という意見もありつつ人気スポットであり、社内で赤羽が落ち着ける数少ない場所の一つでもある。難点は、いつ行っても大体誰かしら知らない人がいて緊張する、ということだ。
 幸い、今は誰もいなかった。
「いやあ、暑かった」
 王子はスポーツドリンクをごきゅごきゅやった後、言った。
「大変だね」赤羽は無料の薄いウーロン茶が入った紙コップを傾ける。「今日は新規?」
「まあ、いろいろかな」
「そっか」
 赤羽は王子が、というより営業がどんな仕事をしているのか、あまりよく知らない。二人で酒を飲むときも、王子は自分の仕事について積極的には話さず、赤羽の話を聞きたがる。
「どうなんだ? VBAのほうは」
「うん、まあ、結構難しい、かな」
「そうか、順調か」王子はにやりと笑う。
「言ってないけど」赤羽は頬を膨らます。「あ、そういえば、王子はブラインドタッチできるんだっけ?」
「ま、人並みには」
「あ、そうすか」
「報告書とか、打つなら早いほうがいいしな。どうせどんな職場でもパソコン使うんだから、作業効率を上げるためには必要だと思った」
「で、大学時代に練習した?」
「ゾンビを倒すやつでな」
「意外だ」
「時々俺は思うんだ。何体ものゾンビの屍の上に、今の俺がある。なんて罪深い男だろう、ってな」
「ゾンビって、もともと屍じゃないすか?」




- つづく -



Excelで画像をドット絵にしてみる

はじめに

vba-belle-equipe.hatenablog.com

Excelでドット絵作成ツールを作ったりしていると、

「画像を読み込んでそのままドット絵として表示できないかな」

ということを自然と思ってしまうわけです。

で、調べてみました。

参照ページ

stackoverflow.com

マウスが示しているポイントの色を(APIを使って)ゲットする方法について、こちらに情報がありました。

作ってみる

f:id:vba-belle-equipe:20160527163118j:plain

こんな感じにして、矢印の右下をクリックした時にそこから右下の範囲を1ピクセルずつ、色を取得して別シートに転記するようにしてみました。

コード

Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function GetPixel Lib "gdi32" (ByVal hdc As LongPtr, ByVal x As Long, ByVal y As Long) As Long
    Private Declare PtrSafe Function GetCursorPos Lib "user32" (ByRef lpPoint As POINT) As LongPtr
    Private Declare PtrSafe Function GetWindowDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
#Else
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINT) As Long
    Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
#End If
Private Type POINT
    x As Long
    y As Long
End Type

Sub drawPic()
  Dim pLocation As POINT
  Dim lColour As Long
  Dim i As Long, j As Long
  Dim lDC As Variant
  Dim tate As Long, yoko As Long
  Dim tateGeta As Long, yokoGeta As Long
  
  Application.ScreenUpdating = False
  tate = Range("B1")
  yoko = Range("B2")
  lDC = GetWindowDC(0)
  Call GetCursorPos(pLocation)
  tateGeta = pLocation.y
  yokoGeta = pLocation.x
  With Sheets("ドット絵")
    .Cells.Clear
    For i = 1 To tate
      For j = 1 To yoko
        lColour = GetPixel(lDC, j + yokoGeta, i + tateGeta)
        .Cells(i, j).Interior.Color = lColour
      Next
    Next
  End With
  Application.ScreenUpdating = True
End Sub

こんな感じです。

結果

f:id:vba-belle-equipe:20160527163337j:plain

こんな感じです。*1

課題

  • 遅い
  • 画像の範囲をぴったり指定できない

どっちも、わりと痛いです。

*1:謎のキャラクターは、Life Is Strange のある場所の落書きからご登場いただきました

VBAは初心者におすすめのプログラミング言語なのか

programming-study.com

こちらの記事に、初心者におすすめのプログラミング言語10選として、我らがVBAが仲間入りしていました。

錚々たるメンバーの中にラインナップされたのは喜ばしいことだと思います。*1

VBAのメリットとして

  1. 実務で使える
  2. 環境構築が簡単
  3. 情報の充実

あたりが挙げられていて、そのとおりだと思いますが、他の言語と比べた時に自分がいいところだと思うのは


作ったものがすぐに見える


というところです。


Web系の言語の勉強をしていた時*2に、DBとのデータやりとり、データの処理とは別に「表示させる部品を作る」ということで苦労した思い出があります。

そして、初心者だから、表示できなくてもどこが悪いのかわからない。*3


それに比べると「ここのセルの値をこれにする」とか、「ここの範囲をこの色に塗る」とか、「シート」や「セル」という馴染みのある部品を操作することができるのはかなりお得な感じです。



で、VBAがプログラミング初心者におすすめといえるかというと、まあ、人によるかなと。

VBAのレッスンをしている自分からすればもちろん、「え? プログラミングをやってみたい? VBAおすすめですよげっへっへ」と言いたいところなんですが、正直、Web系とかゲーム系をやりたいなら最初からそっちをやったほうがいいと思います。

VBAを先にやるメリットというのは特に思いつきません。


自分の感覚としてはあくまでも
「事務系の仕事でExcelを使ってるんだけど、同じ処理ばっかりでうんざりする。
VBAとかいうのがあるって聞いたけどそれを使えば楽にできるの?
あーでもプログラミングなんでしょ難しいんでしょ」
という人におすすめ、という感じです。*4


基本的にプログラミングの勉強というのは目的がないと続かないので、ExcelVBAは「Excelのこのめんどくさいこの作業を楽にしたい」という崇高な目的がある人にはとてもおすすめです。

*1:個人的にはHTMLとCSSJavaScriptに編入されてもいいかなと思いますが

*2:そんなにしてないけど

*3:だからこそ、単純に「Hello World!」が表示されるだけでも嬉しいわけですが

*4:そんな人は是非ご連絡ください

Excelでドット絵作成ツールを作る v1.0.0 配布の巻

  • ツールの説明
  • 動作環境
  • 操作方法
    • 通常モード
      • 元に戻す&やりなおす
    • 手動モード
  • 設定
    • 描画色、置換色
    • キャンバスのサイズ
    • 画像ファイル種別
  • ファイルのダウンロード
  • はじめの準備
    • 編集を有効にする
    • コンテンツの有効化
  • 諸注意とか
  • 参考ページ
  • 質問、ご意見等
  • コード

ツールの説明

f:id:vba-belle-equipe:20160525123516p:plain

Excelのセルをドットに見立ててドット絵を作成するツールです

動作環境

Excel2016 で動作確認済です。

Excel2007以降であれば大丈夫なのではと思いますが、動作報告いただければ助かります。

操作方法

モード切替で、モードが切り替わります

通常モード

キャンバス内のセルをクリックやドラッグで選択すると、「描画色」に塗ることができます

元に戻す&やりなおす

通常モードでの描画操作は、それぞれのボタンで「元に戻す」「やりなおす」ことができます
(描画の履歴を残して再現しているだけなので、標準のものとは動きが異なります)

手動モード

選択しただけで色が変わったりしないので、標準のコピーやペースト機能が使えます

設定

描画色、置換色

「通常モード」の時にセルをクリックすると、Excel標準の色選択画面が開きます。

f:id:vba-belle-equipe:20160525125624p:plain


キャンバスのサイズ

たて、よこのサイズを個別に指定できます。

あまり大きいと重くなるのと、操作画面が見にくくなるので、とりあえずたて、よこ共に上限を100としています。
(下にも記載しましたが、VBAの改変は自由なので、解除可能です)

画像ファイル種別

PNG,JPG,GIF,BMPが出力できます。(透過には対応していません)


ファイルのダウンロード

Excelドット絵作成_v1_0_0.xlsm - Google ドライブ

上記リンク先からダウンロードしてください。

できなかったらゴメンナサイ。

はじめの準備

ファイルを開いたときになんだかメッセージが出てきたら、以下を実行してください

編集を有効にする

f:id:vba-belle-equipe:20160525131327p:plain

保護ビューで開いた場合、「編集を有効にする」をクリック

コンテンツの有効化

f:id:vba-belle-equipe:20160525131348p:plain

セキュリティの警告が出たら、「コンテンツの有効化」をクリック


諸注意とか

  • ファイルの改変、再配布は自由です(特に断りもいりません)
  • ファイルをダウンロード、開いたことによるいかなる損害も当サイトは責任は負えません

参考ページ

パレットウィンドウ(カラーピッカー)の実装に関して、下記のページを参考にさせていただきました。
(ほとんどそのままです)

Excel VBA 背景色をパレットウィンドウから指定する PCまなぶ


質問、ご意見等

コメントに残していただくか、ホームページの問い合わせからお願いします。

続きを読む