ぼくLog

子持ち、車持ち、マンション持ちの僕の日常を綴ります。車と、ラクをしたい一心で覚えたエクセルVBAを中心になりそうです。

配列?構造体?いやレコードセットでしょ!エクセルVBA

f:id:yt4u:20181204225012j:plain

二次元データの処理するとき、レコードセット使ってますよね??


え!?使ってない!!?


もし使ってなかったら、
今日から使い始めましょう!!



なんでレコードセットがいいの?

レコードセットってそもそもがデータベースから取得したデータの塊を格納するためのもの。 だからデータの扱いなら任せとけっていうオブジェクトなワケです。

じゃあ具体的にどんなメリットがあるのか配列と構造体配列と比較していきましょー。


だって列(フィールド)ごとにデータの型を決められる

二次元のデータで全ての列(フィールド)が同じデータ型になることってあまりないですよね。

例えばエクセルに株価のヒストリカルデータを表示させる場合でも、一番左の列が日付(Date)、次の列が株価で整数(Long)か小数点(Double)、さらにメモ用の列があったり(String)。

f:id:yt4u:20181123212411j:plain


レコードセットの場合、列(フィールド)ごとに型を決めることが出来ます(というか決める必要があります)。

Private Sub makeRecordset()

  Dim adoRS             As ADODB.Recordset
    
  Set adoRS = New ADODB.Recordset
  
  With adoRS
  
    With .Fields
    
      .Append "blDate", adDate
      .Append "blPrice", adDouble
      .Append "blMemo", adVarChar, 32, adFldIsNullable
    
    End With
  
    .Open
  
  End With
  
End Sub

レコードセットオブジェクトにフィールドを追加(Append)するときに、そのフィールドの名前と型を指定します。
Appendの後に続く引数で最初に来るのがフィールド名。ここでは日付、株価、メモの3つのフィールドが必要なので、それに相応するフィールドを用意しています(フィールド名頭のblはbokulogってことです^^)。

次の引数がそのフィールドの型。日付型、浮動小数点型、可変長文字列型を指定しています。
可変長文字列型は最大32文字。メモを書かない日もあることからNullもOK。
一方、営業日のみのデータを前提とした場合は日付と株価は必ず存在するためNullはNG。

ちょっと煩わしいコードに見えますが、慣れらたなんてことはねーっス



一方、配列の場合、指定できる型は一つだけ。
だから、いくつもの型が入り混じっているときはVariantにするしかないんです。

コレ、キッチリ型を決めたいぼくには屈辱でしかないッス


次なる策は構造体配列。 これであれば列ごとに型を決めることが出来ます。

f:id:yt4u:20181123213149j:plain

複数の型が一堂に会するデータの塊を扱うときは構造体配列を使うのもひとつの手です。


だってデータの追加が超絶ラク


AddNew からの Update

この呪文を唱えるだけでOKです。

  With adoRS
  
    .AddNew
    
    !blDate = #11/23/2018#
    !blPrice = 21800
    !blMemo = "さらに上昇!"
    
    .Update
  
  End With

こんなカンジ。
至極簡単すわ~。



配列だとこんなにサクっとは出来ない。
Redim Preserve ってのはあるけど二次元配列の場合、行の追加って感じにはならずに、横方向、つまり列の追加ってことになってしまうのが悲しい現実。
だから配列の場合は、Preserve使って都度都度データを追加するというよりは、最初に格納するデータの範囲を確認して、それにフィットするサイズの配列を作ってからデータを入れていくって流れにならざるを得ない。


構造体配列の場合は、Redim Preserve でイケます。


いつもの作業を自動化したい人の Excel VBA 1冊目の本

いつもの作業を自動化したい人の Excel VBA 1冊目の本


だってデータを一気に吐き出せて幸せ


CopyFromRecordset

この呪文を唱えるだけでOKなんです。


例えばCodeNameがwsRecordsetのワークシートのセル(1, 1)を起点にデータを吐き出す場合は、こう書くだけでOK.

  With wsRecordset
  
    .Cells(1, 1).CopyFromRecordset adoRS
    
  End With

データの行数・列数を気にせずCopyFromRecordsetするだけで、レコードセットがすべてバコっと吐き出されます。



一方、配列の場合は、データを吐き出す前に行数・列数を把握してデータが吐き出されるセル範囲を指定する必要があります。

例えばこうです。

  With wsRecordset
  
    .Cells(1, 1).Resize(UBound(varData), UBound(varData, 2)).Value = varData
  
  End With

なんかクドイっすよね。


それでも配列の場合はデータを一気に吐き出せるだけまだマシ。

構造体配列の場合は、一気に吐き出す術がありません。
1つ1つ丁寧に出していくしかないんです。



だってデータにフィルタを掛けるのも楽勝


エクセルのオートフィルタってやつ。
レコードセットでも出来ます。しかもシンプルに。

先ほどの株価の表で22,000円未満の日だけ抽出したい。
こんな時はこれだけです。

  adoRS.Filter = "blPrice < 22000"

何やってるかすぐ分かりますよね。


さらに例えばいついつ以降のデータから抽出 でってのも簡単に加えられます。

  adoRS.Filter = "blPrice < 22000 AND blDate >= #2018/11/20#"

分かりやすっ!


さらに並び替え。

  adoRS.Filter = "blDate DESC"



コレ、配列あるいは構造体配列でやろうとするとここまで簡単には出来ない。

For~Next と If を組み合なんでわせて該当するデータ行を別の配列に入れたり、あるいはシートに吐き出していくしかありません。
ちょっとタラタラ長いコードが出来上がることになります。


たった1秒で仕事が片づく Excel自動化の教科書

たった1秒で仕事が片づく Excel自動化の教科書


データを加工するときはレコードセット一択


どう考えてもシート上のデータの扱いにおいてレコードセットに勝るものはなし。

巷にレコードセットを推奨する話があまりないのが不思議で仕方ないです。

とはいえぼくもレコードセットの存在を知ったのはデータベースを弄るようになってから。
それはまでは配列、あるいは構造体配列でFor~Nextでゴリゴリっとしたコード書きまくってました。

そんな中、レコードセットとの出会いはぼくに革命を齎しました(言い過ぎ)。
だってそれまでコードをグリグリ書いてやったことを、たった1行で出来ちゃうんだもの。
この感動、みなさんにも味わっていただきたいです。

IIJ mio を使い始めて7年が経ちました

ぼく、そこそこ長いこと格安SIMの王道、IIJ mio を使ってます。

IIJ mio 以前はドコモを10年以上使っていましたが、IIJ mio に切り替えて彼是7年。

IIJ mio 歴も長くなりましたが後悔は一切ありません


何よりも一番のメリットは安さ! * IIJ mio 導入後の月あたり平均コストは1,800円 * それまで月7,000円だったので5,200円のコストダウン!


しかもこれはひとり分です。

ぼくはずっとヨメの分も支払っています。なのでドコモ時代は月14,000円。
それが IIJ mio にしたことで月3,600円。ドコモ時代比10,000円のコストダウンになっています。

月10,000円。これはかなり大きい。
ちょっと美味しいもの食べに行けちゃいますよね。


IIJ mio のコスト内訳は?

まず IIJ mio の料金体系の中で、ぼくは音声SIMのミニマムスタートプランを使っています。
つまり月あたりのコストは基本料1,600円+通話料。

通話は基本LINEを利用。そのためほとんどの場合、通話料は掛かりません。 それでも通常の電話が必要な時は楽天でんわを利用しています。
ここはOCNでんわを使っても、みおふぉんダイアルを使っても通話料はほとんど変わらないので、どれを使っても何も問題ありません。


ドコモとのコストの違い

ドコモを利用していた時は、ぼく+ヨメ=月14,000円でした。
それが3,600円なので約1万円のコストダウン。

とはいえ、それは7年前との比較だから今とは料金体系とはちょっと違います。
これも問題ですよね。コロコロ料金体系が変わって基本的に従来からの契約者が割を食うのがメガキャリアの常。

一方、格安SIMは料金プランが至極シンプル。
ときどき新規契約獲得のためのキャンペーンが打たれて期間限定で異なる料金プラン(というか割引)が適用される時はありますが、ベースの料金プランは変わりません。
これって当たり前のようで当たり前ではないのが日本の携帯電話事情ですので、格安SIM料金の分かり易さは非常にありがたいものです。


格安SIMのメリット

改めて言うまでもありまえんが料金の安がが一番のメリット。

あとスマホ端末の選択肢が広いのもメリットです。
最新のiPhoneじゃなきゃゼッタイだめ!という人は格安SIMが最適解とはならないと思いますが、そうでなければ安くて必要十分のスペックを備えた端末がいくつもありますので、端末選びで困ることはないと思います。


格安SIMのデメリット

これは回線の細さだと思います。

格安SIMを提供するMVNOは大手キャリアの回線を間借りしている状態で、安さを確保するために回線の太さを犠牲にしています。

多くの人が集まってる場所、人が溢れる電車のホームや満員電車の中ではWebサイトの表示が遅くなりがちです。
そうした状況でなければ回線の細さを実感する場面はないのですが、ひとたびそうした状況に出くわすと自分が格安SIMを使っていることを再認識させられます。

防水カメラ『OLYMPUS Tough TG-5』はレンズの明るさが際立ってるよ!

まずはコレ。

f:id:yt4u:20180804095947j:plain
OLYMPUS デジタルカメラ Tough TG-5 渡嘉敷島

これは沖縄 渡嘉敷島の阿波連ビーチで撮影したものですが、
空の青さ、海の透明感、波打ち際の躍動感、どれを見ても最高じゃないですか!!

やっぱり渡嘉敷島サイコー!
っていう話はコチラのエントリーですが、 yt4u.hatenablog.com



今回はこの写真を撮ったカメラの話です。


それがコイツ。

高画質タフカメラの決定版。
撮影の軌跡を記録して臨場感を再現できるTG-5

謳い文句に偽りなし。



実写サンプル

f:id:yt4u:20180803221624j:plain
OLYMPUS Tough TG-5 渡嘉敷島 カクレクマノミ

f:id:yt4u:20180803222045j:plain
OLYMPUS Tough TG-5 渡嘉敷島

水中の撮影もバッチリ。



f:id:yt4u:20180811091813j:plain
OLYMPUS Tough TG-5 渡嘉敷島 無人

陸上でも当然、鮮やかな景色を切り取ってくれます。



f:id:yt4u:20180811092548j:plain
OLYMPUS Tough TG-5 ホテル日航アリビラ


f:id:yt4u:20180811092509j:plain
OLYMPUS Tough TG-5 シギラビーチ 花火

夜景や、特にブレやすい花火の撮影でもTG-5は力を発揮してくれます。



強みはF値2.0の明るいレンズ

綺麗に撮影できるポイントはなんと言っても明るいレンズ。

f:id:yt4u:20180811093024j:plain 進化した高画質/タフ性能 TG-5 | 防水デジタルカメラ T(Tough) シリーズ | オリンパス

だから色鮮やかな撮影が可能になるし、動きのある被写体、暗い場所でも使えます。



もちろん防水・防塵

f:id:yt4u:20180811093609j:plain

f:id:yt4u:20180811093620j:plain


海での撮影では防水・防塵は必須。

またカメラを片手に海で遊んでいれば、落としてしまう、ぶつけてしまう、そうした事態は容易に想像できます。
品名に「Tough 」を冠しているとおり、ちょとやそっとの衝撃ではビクともしません(実際、そんな衝撃を食らわせたことないんですけど、、、)。




過信は禁物!

防水・防塵、耐衝撃を兼ね備えてはいますが、過信は禁物です。
海の中は、カメラという精密機器にとって過酷な環境であることは間違いないです。
ちょっとした操作ミスなどで少しでも海水が入ればあっという間にダメになります。


なので、ぼくは海に入る前の移動時間などに、カメラからスマホ(ビーチに持ち込まないもの)にWifiで写真を送ってバックアップを取ってました。
Wifiで飛ばすためには事前にスマホアプリを入れておく必要がありますが、その準備さえすれば後は簡単操作でバックアップができるのもありがたいところです。



アクセサリーパーツも充実

レンズ、ホルダー、ストラップ、フラッシュなどのアクセサリーも充実しています。
使用環境に合わせた機能拡張がやりやすいのもTG-5の強み。

TG-5はそれ単体で防水性能を持ってますが、規定深度以上に潜れるように防水プロテクター(ハウジング)も用意されています。

OLYMPUS TG-5用 防水プロテクター PT-058

OLYMPUS TG-5用 防水プロテクター PT-058

深く潜らずともプロテクターがあれば安心感は格段に高まりますね!



TG-5はレンタルできるよ

ぼくは沖縄旅行に備えてTG-5をレンタルで用意していきました。

レンタルしたのはコチラ

www.rentio.jp

Rentioはカメラの充実、問い合わせ対応、梱包の丁寧さ、どれを見ても良いです。
配送の手間も極限まで省けるよう工夫してくれています。

普段、ほとんどの時間を陸上で生活しているので防水カメラを常備しておく必要はない場合は、こうしたレンタルサービスで充分かもしれませんね。

ですが、TG-5。その性能の高さや普段使いできるスタイルを兼ね備えていることから、一回レンタルでも使ってみると購入意欲がモリモリっと沸いてきちゃいますのでご注意を。

試す価値アリ!! Anker SoundBuds Slim Bluetooth ワイヤレスイヤホン

f:id:yt4u:20180810221001j:plain

イケてます、コレ。コスパ最高。


何がいいの?

  1. 2,000円台前半で買えるお手軽さ
  2. 安いけどシッカリと音を鳴らしてくれる
  3. 軽い



デメリットは?

  1. イヤーピースがイマイチしっくりこない
  2. ワイヤレスイヤホン(AirPodsなど)してる人を見ると羨ましくなる
  3. コードの長さが完全おひとりさま用。トップ画像のような裏山シチュエーションには向いてない



買いなのか?

買いです。


メリットに挙げた点でも十分購入に値すると思います。


デメリット1で挙げたイヤーピースの問題。これはAmazonレビューでもちょいちょい書かれています。


これは気持ちの持ちようかな、というのがぼくの所感。


イヤーピースが耳穴を完全に塞げてないので周囲の音が入ってきます。
これは音楽を堪能したい人には不満なポイントになるのでしょうが、ぼくは逆に危険回避の観点から周囲の音が入ってくることを良しとしています。
Appleのイヤホン設計の思想に共感する点でね。ぼく、Apple信者というワケではありませんが。



とりあえず使ってみるしかない

イヤホンは、レビューをいくら見ていったところで結局の各人の個人的感想の域を出ず、各人の感じ方次第。
そのため、実機で試聴せずでポチっとするのはギャンブル同然。

その点、値ごろ感もあってお試しで購入しやすいものかと思います。


ギャンブルだと思ってもとりあえず買って使ってみてください。
すぐにギャンブルではなかったことを理解できると思います。

渡嘉敷島でウミガメに出会うのは難しくなってる?でもケラマブルーに出会えるだけで最高!

f:id:yt4u:20180804095947j:plain

毎年行っちゃってます、沖縄。

昨年は宮古島シュノーケリング三昧。

今年は基本的に沖縄本島。 だけど一日だけ日帰りで行ってきたんです、渡嘉敷島


もうね。yes, ケラマブルー


渡嘉敷島の一日はあっという間


ぼく、初めての慶良間諸島なので、他の島・海域は知らないのですが、少なくとも沖縄本島の海とは段違いの透明感&ブルー。鮮やかな彩りで視界をいっぱいにしてくれる魚たち。すべてが感動です。


例えばコレ f:id:yt4u:20180803221128j:plain


近っ!!!



f:id:yt4u:20180803221624j:plain


カクレクマノミでかっ!



f:id:yt4u:20180803222045j:plain


水深10m以上はあるハズ(ぼく調べ)なのに透明度高すぎて海底すぐそこっ!





結論:渡嘉敷島マジyavay。



そこにあるもの全てが感動を呼んでくれます。
だから、一日があっという間に過ぎてしまいます。
楽しい時間が過ぎるのは早いという、まさしくソレです。



ビーチに至るまでの不安感が感動をより大きくしてくれる


ちょっとハイテンションになっちゃったけど、実は渡嘉敷島に到着した当初はちょっと不安に駆られました。
コレダイジョブカナって思っちゃったんです。



一応、心の変遷を辿ると、、、

  1. 那覇泊港(とまりん)から高速船で渡嘉敷島に出発! → ワクワク。ウミガメに出会えるといいなぁー
  2. 40分そこそこで渡嘉敷島に到着 → 港ちっさ!!
  3. ツアーでセッティングされているペンションに、そのペンションの車に乗り込みGO! → 車ボロッ!エアコン切らないと山道登れないとかどんだけだよ?!
  4. 阿波連ビーチのペンションエリアに到着 → リゾート感、皆無。海辺の村感、満載
  5. ペンションでウミガメに出会えるというトカシクビーチへの行き方を聞く。曰く、タクシーで行くしかない(想定内の返答)。でもトカシクビーチは今年から遊泳エリアを定めることになった(?)。そのエリア結構小さくてウミガメに出会えるポイントまでカバーされてない(!?)。多分ウミガメ見れないかもね(ファッ!!!?) → マジか。しゃーない、一日阿波連ビーチで過ごすか。
  6. ペンションで水着に着替えて阿波連ビーチに移動 → あれ!?阿波連ビーチも遊泳可能エリア決められてて、しかも狭くね?!
  7. しかも遊泳可能エリアを管理する青年隊がいる一方で、遊泳禁止エリアに居を構える青年隊もいて、阿波連ビーチが二大勢力で分断されてるぞ?!なんか島の闇を見てる気分だ。このビーチで一日過ごすのは無理そう
  8. 時間を持て余しそうだったのでアクティビティ追加 → バナナボート、ブッバ、そして「無人島渡し」という謎アクティビティを時間分散させながら予約(結果、このいずれも大正解)
  9. 暗い気持ちが渦巻く一方、気を取り直してライフジャケットとシュノーケル、足ひれを身に着けて海にIN! → ファッ!!すぐに魚大接近(上の魚接近の画像参照)。 → ナニコレ。すげくね?!
  10. シュノーケリングするとあまりの綺麗さに30分程度はアッという間に経過。オリオンビール飲みながら休憩 → シュノーケリング を数回繰り返す。シュノーケリング何回やっても7歳の息子も共々まったく飽きない。
  11. バナナボートの時間がやってくる → ヒャッホー!!!!
  12. ブッバの時間到来 → ヒャッホー!!!!!!!!!
  13. 無人島渡し」の時間がやってきて、バナナボートに跨って5分で行ける無人島にGO → ナニコレ。阿波連ビーチの海も十分綺麗だったけど、無人島のビーチ、さらに上来てね?!無人島の滞在時間は自由に決められて、帰りの船の時間も考慮して1時間に設定したものの、1時間があっっっという間に過ぎる
  14. 再び阿波連ビーチのペンションに戻り帰り支度。
  15. ペンションの車に揺られて再び港へ。そこでガリガリ君を買う。 → 値段ふつう。島価格でもなし。物流発展したんだなー




ということで、渡嘉敷島到着直後こそ不安を覚えたものの、時間の経過と共に満足度向上。
むしろ到着当初に期待値を下げられたからこそ、その後の感動も引き上げられたのかも。
そんな邪推を入れてみるものの、やっぱり多分、素の状態でも十分満喫できる環境かも。



次は座間味島行ってみよ、と固く決意。


以上。