ぼくLog

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

エクセルのシートをデータベースのテーブルとして扱うとめちゃくちゃ簡単にデータを加工できる!|エクセルVBA

f:id:yt4u:20180212111117j:plain


エクセルで表データを扱うときに、その表をデータベースのテーブルとして扱うとものすっごぉぉっく簡単に扱えるようになります。



データ追加編はこちら! yt4u.hatenablog.com



例えばこういった住所録があったとします。

f:id:yt4u:20170102225905j:plain

(住所録はなんちゃって個人情報で生成したダミーデータです。)

このなかの「性別」「年齢」「婚姻」を使って、データを抽出するとします。

例えばこうです。

  • 性別=男性
  • 年齢=30歳以上50歳未満
  • 婚姻=未婚

このすべての条件を満たすデータを抽出して、別シートにその結果を出力する。

これをVBAを使って行う場合、どのような方法が考えられるか?

  1. エクセルのデータベース関数を使う
  2. シート上の表データを一行ずつチェックして指定条件に該当するデータを別シートに転記する
  3. シート上の表データにオートフィルタを掛け、オートフィルタを操作することで指定条件に該当するデータを抽出し、別シートにコピーする
  4. シート上の表データをデータベースのテーブルと見なして、指定条件を踏まえたSQLを実行しレコードセットを別シートに出力する


このエントリーのタイトルの通り今回のテーマは4です。
なので4のやり方を詳しく見ていくことになるのですが、その他の手段に関するメリット・デメリットに触れておきます。

1は正直ぼくはやったことがありません(汗

如何せんデータベース関数のヘルプを見るとすごく分かりにくい。
関数を使う前にヘルプで挫折しちゃいます。結果使ったことがないんです。

ひとつ言えることは、データベース関数の使い方を覚えるくらいなら、4の方法を覚えてしまった方が何倍も幸せです。

次に、簡単に2、3でどうやるかに触れるならば、
2は単純に「For~Next」で各行の抽出対象列の値をチェックしていくことになるでしょうし、3は抽出対象列でAutofilter Field:=aaa, Criteria1:="bbb"」といったようにフィルタを実行していくことになると思います。

2、3だダメというわけではなく、目的は十分に果たせますので問題ありません。ただ、抽出条件をアレコレ変えたりする際に煩わしさを感じることになると思います。


一方で4の場合そういった煩わしさがありません。

その煩わしさはないのですが事前準備がちょっと必要です。
それはエクセルをデータベースとして扱えるようにするための準備です。


エクセルをデータベースとして扱うための準備

最初に示した住所録を持つエクセルのブックにADO接続をします。
ADOとは何ぞ?はWikipediaあるいはMicrosoftへGo!!(上手く説明できないので他人任せ!)

で、接続するためのコードはコチラ。

Public Function GetXLSConnection(DataSource As String) As Object

  Dim objCN             As Object
  Dim strCNString       As String
  
  'レイトバインディング
    Set objCN = CreateObject("ADODB.Connection")
  
  '接続文字列
    strCNString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                        & "Data Source=" & DataSource & ";" _

  '接続
    objCN.Open strCNString
  
  '接続を返す
    Set GetXLSConnection = objCN
  

End Function


これでエクセルのブックにADO接続を行う準備が出来ました。

実際に接続(コネクションを確立)するサンプルは次のようになります。

Public Sub コネクションサンプル()

  Dim objCN             As Object
  
  '接続を取得
    Set objCN = GetXLSConnection(ThisWorkbook.FullName)

End Sub


レコードセットを取得

次に抽出条件を書いたSQLを実行し、その結果であるデータの塊(レコードセット)を受け取る準備をします。

そのコードがコチラ

Private Const adOpenDynamic       As Long = 2
Private Const adLockOptimistic    As Long = 3

Private mstrErrDescription        As String


'==========================================================
'GetRecordset
'==========================================================
Public Function getRecordset( _
                        ByRef objCN As Object, _
                        ByVal strSQL As String, _
                        ByRef objRS As Object _
                        ) As Boolean
 
  
  getRecordset = False
  
  
  On Error GoTo ERR_PROC
  
  
  Set objRS = CreateObject("ADODB.Recordset")
  
  objRS.Open strSQL, objCN, adOpenDynamic, adLockOptimistic
  
  getRecordset = True
  
  
  GoTo END_PROC

ERR_PROC:
      
  MsgBox mstrErrDescription


END_PROC:
  
  
End Function

引数として受け取ったデータベースコネクションの下、SQLを実行し、引数のobjRSにレコードセットを格納しています。


コネクションとレコードセットを破棄することも忘れずに

忘れたからといって自分ひとりで使う分には何ら問題はありませんが、複数人で使うことになった場合に何かしら不具合が生じる可能性があります。
共有ブックを複数人で弄ると不具合が発生するのに似ていますね。

コネクションの破棄とレコードセットの破棄のコードはこうです。

'==========================================================
'コネクション破棄
'==========================================================
Public Sub CloseConnection(objCN As Object)

  '接続された状態であるならば
  If objCN.State <> adStateClosed Then
  
    objCN.Close
  
  End If
  
  Set objCN = Nothing

End Sub


'==========================================================
'レコードセット破棄
'==========================================================
Public Sub CloseRecordSet(objRS As Object)

  If objRS.State <> adStateClosed Then
  
    objRS.Close
  
  End If

  Set objRS = Nothing  
  
End Sub


ここまでで、ブックへの接続とレコードセットを生成する準備、そしてその接続(コネクション)とレコードセットを破棄する準備が整いました。
次に、実際にデータの抽出となります。


データを抽出してみよう!

まずはデータ抽出のコードを示します。 前提として、最初に載せたシート上の表に、セルの名前の定義で「rngXDB_DataBase」と名付けています。 そして抽出したデータを出力するシートのCodeNameを「wsXLSDataBase」、またそのシート上のデータを出力する一番左上のセルを「rngXDB_DataTop」を名付けています。

'==========================================================
'データ取得サンプル
'==========================================================
Public Sub GetDataSample()

  Dim objCN             As Object
  Dim objRS             As Object
  Dim strSQL            As String
  Dim lngF              As Long
  
  
  'コネクションを確立
    Set objCN = GetXLSConnection(ThisWorkbook.FullName)
  
  '抽出条件を作成  
    strSQL = "SELECT"                                           '抽出フィールド(項目)を指定
      strSQL = strSQL & "  [名前]"
      strSQL = strSQL & ", [ふりがな]"
      strSQL = strSQL & ", [電話番号]"
      strSQL = strSQL & ", MONTH([誕生日]) AS [誕生月]"
    strSQL = strSQL & " FROM " & mcDataRangeName                'データテーブルを指定
    strSQL = strSQL & " WHERE 1 = 1"                            '抽出条件
      strSQL = strSQL & " AND [性別] = '男'"                    '性別=男
      strSQL = strSQL & " AND [年齢] >= 30"                     '年齢=30歳以上
      strSQL = strSQL & " AND [年齢] <  50"                     '50歳未満
      strSQL = strSQL & " AND [婚姻] = '未婚'"                  '婚姻=未婚
  
  
  '抽出実行     
    If getRecordset(objCN, strSQL, objRS) = False Then
         
      GoTo ERR_PROC
    
    End If
  
  
  '抽出結果を出力
    With wsXLSDataBase
    
      With .Range("rngXDB_DataTop")    
        
        '出力エリアにある既存データを消去        
          .CurrentRegion.ClearContents
                  
        'フィールド(項目)名を出力        
          For lngF = 0 To objRS.Fields.Count - 1
          
            .Offset(, lngF).Value = objRS.Fields(lngF).Name
          
          Next lngF          
        
        'データを出力        
          .Offset(1).CopyFromRecordset objRS          
    
      End With
    
    End With
  
  
  GoTo END_PROC
  
ERR_PROC:

  MsgBox mstrErrDescription
  
  
END_PROC:

  'レコードセットを閉じる
    Call CloseRecordSet(objRS)
  
  'コネクションを閉じる
    Call CloseConnection(objCN)


End Sub

上から順を追って見てみると、

  1. データベースと見立てたエクセルブックへのコネクションを確立する
  2. データ抽出条件を書く
  3. データ抽出を実行し、レコードセットをゲット
  4. 抽出したデータを出力する場所を綺麗にする
  5. レコードセットのフィールド名をまずは書き出し
  6. レコード群を一気に出力する
  7. 最後にレコードセットとコネクションを破棄

という流れになっています。

抽出条件を変える場合は2のところ(SQL文)を書き換えればOK。 抽出条件の値をセルから拾ってくるようにすれば、非常に簡単に好きなようにデータを取ってこれるようになります。

SQL逆引き大全363の極意

SQL逆引き大全363の極意



改めてコード全文を示します。

Option Explicit

Private Const adOpenDynamic       As Long = 2
Private Const adLockOptimistic    As Long = 3
Private Const adStateClosed       As Long = 0

Private mstrErrDescription        As String

Private Const mcDataRangeName     As String = "rngXDB_DataBase"


'==========================================================
'コネクションを返す
'==========================================================
Public Function GetXLSConnection(DataSource As String) As Object

  Dim objCN             As Object
  Dim strCNString       As String
  
  Set objCN = CreateObject("ADODB.Connection")
  
  strCNString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                        & "Data Source=" & DataSource & ";" _

  objCN.Open strCNString  
  
  Set GetXLSConnection = objCN  

End Function


'==========================================================
'GetRecordset
'==========================================================
Public Function getRecordset( _
                        ByRef objCN As Object, _
                        ByVal strSQL As String, _
                        ByRef objRS As Object _
                        ) As Boolean
 
  
  getRecordset = False
  
  
  On Error GoTo ERR_PROC  
  
  Set objRS = CreateObject("ADODB.Recordset")  
  
  objRS.Open strSQL, objCN, adOpenDynamic, adLockOptimistic  
  
  getRecordset = True
    
  GoTo END_PROC

ERR_PROC:
      
  mstrErrDescription = "レコードセット生成エラー"

END_PROC:  
  
End Function


'==========================================================
'コネクション破棄
'==========================================================
Public Sub CloseConnection(objCN As Object)

  If objCN.State <> adStateClosed Then
  
    objCN.Close
  
  End If  
  
  Set objCN = Nothing  

End Sub


'==========================================================
'レコードセット破棄
'==========================================================
Public Sub CloseRecordSet(objRS As Object)

  If objRS.State <> adStateClosed Then
  
    objRS.Close
  
  End If

  Set objRS = Nothing  
  
End Sub


'==========================================================
'データ取得サンプル
'==========================================================
Public Sub GetDataSample()

  Dim objCN             As Object
  Dim objRS             As Object
  Dim strSQL            As String
  Dim lngF              As Long
  
  
  'コネクションを確立  
    Set objCN = GetXLSConnection(ThisWorkbook.FullName)
  
  '抽出条件を作成  
    strSQL = "SELECT"                                           '抽出フィールド(項目)を指定
      strSQL = strSQL & "  [名前]"
      strSQL = strSQL & ", [ふりがな]"
      strSQL = strSQL & ", [電話番号]"
      strSQL = strSQL & ", MONTH([誕生日]) AS [誕生月]"
    strSQL = strSQL & " FROM " & mcDataRangeName                'データテーブルを指定
    strSQL = strSQL & " WHERE 1 = 1"                            '抽出条件
      strSQL = strSQL & " AND [性別] = '男'"                    '性別=男
      strSQL = strSQL & " AND [年齢] >= 30"                     '年齢=30歳以上
      strSQL = strSQL & " AND [年齢] <  50"                     '50歳未満
      strSQL = strSQL & " AND [婚姻] = '未婚'"                  '婚姻=未婚
  
  '抽出実行     
    If getRecordset(objCN, strSQL, objRS) = False Then
         
      GoTo ERR_PROC
    
    End If  
  
  '抽出結果を出力  
    With wsXLSDataBase
    
      With .Range("rngXDB_DataTop")      
        
        '出力エリアにある既存データを消去        
          .CurrentRegion.ClearContents
                  
        'フィールド(項目)名を出力        
          For lngF = 0 To objRS.Fields.Count - 1
          
            .Offset(, lngF).Value = objRS.Fields(lngF).Name
          
          Next lngF
                  
        'データを出力        
          .Offset(1).CopyFromRecordset objRS          
    
      End With
    
    End With  
  
  GoTo END_PROC
  
ERR_PROC:

  MsgBox mstrErrDescription  
  
END_PROC:

  'レコードセットを閉じる  
    Call CloseRecordSet(objRS)
  
  'コネクションを閉じる  
    Call CloseConnection(objCN)

End Sub


データベース関連のコードはいつでも使えるようにスタンバイ

上記のデータベース関係のコード(コネクション確立、レコードセット取得、およびそれらの破棄)は一度用意しておけばいくらでも使い回しが出来ます。

使いたいときにコードを対象ブックの標準モジュールにコピペするでもいいですし、一連のコードをクラスにひとまとめにして、そのクラスをインポートすればいつでも使えるようにするでもいいと思います(クラス化については別機会に書きます)。




[2019/03/10追記]

エクセルデータベースにSQLを使ってデータを追加します!

yt4u.hatenablog.com


[2018/12/19追記]

データベースで使われるレコードセット・オブジェクトを配列の代わりに使っちゃいます!

yt4u.hatenablog.com


[2018/02/10追記]

データベース処理用のクラスについてはこちらもご参照ください。

yt4u.hatenablog.com


もはや試食の域を超えている!藤堂プランニングのケーキは試食もすごいが美味しさも抜群!!

清澄白河にある藤堂プランニングに行ってきました。

少し前にはテレビなどのメディアで取り上げられていて結構な行列になっていたみたいですね。

正直言うとぼくは藤堂プランニングの存在を全く知りませんでした。
そんな中、ヨメが友達から聞きつけてきてきたわけです。

曰く、ホテルにケーキを卸しているケーキ工場で、美味しいのは当然ながら、店頭でこれでもかというくらい試食させてくれるそうな。

そりゃー行かないわけにはいかないですよね。


で、場所はコチラ。

最寄駅の清澄白河からは徒歩6分ほどの距離。清澄庭園にほど近く、寺院が立ち並ぶエリアの東端に位置します。それもかなりひっそりと。
当日、ぼくは自転車で藤堂プランニングに向かったのですが、通りから少し路地に入ることもあり、かつ全く目立たないところにあるので、軽く迷子になっちゃいました(汗

で、店頭の様子がコチラ。

f:id:yt4u:20170109223422j:plain


これまた結構殺風景です。周りに住宅に溶け込んでいて、看板がなければ間違いなく見逃してしまいます。

看板の奥に少し進むと工場への出入り口があります。
ぼくが行ったときは丁度ほかのお客さんがいませんでした。藤堂プランニングでの作法が全く分からない中、いきなり工場出入り口に辿り着き、流石に工場に入っていくわけにもいかず、どこに進めばいいのか分からなくなってしまいました。

軽く右往左往し始めたところで、工場の奥から若い人が登場。

そしていきなりティッシュをシュっと一枚手渡され「何にします?」のひとこと。

ぽっかーんです。

いきなりティッシュ差し出して何を言うんだこの人は状態てす。

ウワサに聞く試食の大盤振る舞いだと気づくのに数秒要しましたよ。


そこからは試食を堪能です。

ヨメと子どもの3人で行ったので、各々3個、都合9個のケーキを試食。

感動巻き起こる系の美味しさ、とまでは行かないかな。
例えるなら、ブュッフェで出てくるケーキとかスーパーとかで売られてるケーキくらいの美味しさです。

藤堂プランニングの醍醐味は、試食でここまで食べていいの!?という驚き、ということに尽きますね。

こういう驚きって不思議ですね。

記憶に鮮明に残っていて、このエントリーを書いてるうちにまた行きたくなってきました(汗

Amazonプライム会員にならない理由がない!

Amazonプライム会員が如何に素晴らしいか?

それは、至るところで叫ばれているのを目にしていたものの、敢えて利用する必要もなさそうだなぁ、って深く考えることもなく月日が経っておりました。

で、これまた深く考えることなく、何となーく利用し始めてみたら、これが非常にめちゃくちゃ良いっ!!
ということで、Amazonプライム会員のメリットについてまとめてみたいと思います。


詳細は後述するとして、Amazonプライム会員のメリットを挙げるならばコレです。

  • プライム・ビデオが見放題。しかも見切れないほどのタイトル数がある
  • プライム・ミュージックが聞き放題。BGMが欲しい時には持ってこい
  • プライム・ナウが超便利。買い物に行く手間暇を省くことが出来て費用対効果高し
  • アマゾン謹製のfireタブレットを4,000円引きで入手可能
  • タイムセールに非会員に30分先行して参加できる


これでけの恩恵を享受できて年会費3,900円(税込)。月あたり325円ですから、牛丼一食食べるよりも、スタバでドリンク頼むよりも安いっ!


ということで、ちょっと細かく見ていきましょうか!


プライム・ビデオが充実っぷりがすごい!

充実し過ぎて、どのビデオを見るかで悩みます。

メジャーどころの海外ドラマや映画はもちろん見放題。

例えば、こういったタイトルです。


日本のドラマもしっかりカバーしています。


とはいえテレビで放送されて間もないようなドラマは流石に追加料金ナシで見ることは叶いません。

こういったものもレンタル、あるいは購入といった形でいつでも見ることが可能です。
それぞれの料金は、そのタイトルによってまちまちなので都度確認が必要です。


小さい子どもがいる身としては日本のアニメが見れるのが非常にありがたいですね。


自分が小さいときに見ていたアニメがまた見れるってのも感慨深いものがあります。


ただ、動画配信サービスはプライム・ビデオ以外にもNetflix、hulu、U-NEXT、ドコモdTVなどがあって、コンテンツの内容は結構似たり寄ったりなのも事実。
それでも差別化を図るべく各々特徴を持っており、それを簡単にまとめるとこんな感じではないでしょうか。

動画配信サービスの特徴

Netflix

  • Netflixでしか見れないドラマがあり、しかもそこらの民放ドラマより面白い
  • 月額950円

Hulu

  • 海外ドラマが充実
  • 月額933円

U-NEXT

  • 大人向けコンテンツや雑誌読み放題がある
  • 月額1,990円(うち1,000円分は動画購入・レンタル用ポイントとして使える)

dTV

  • 安くて国内ドラマが充実
  • 月額500円


プライム・ビデオで必要十分

ただ、子ども(未就学児)が居ると、どうしても動画を見るタイミングはなかなかないものです。夜見ようものなから子どもも一緒に見始めてしまうので、子どもの寝る時間に差し障りが出ちゃいますし、あるいは子どもをそっちのけにして動画を見ていようものなら嫁の冷たい目線が突き刺さってきます(汗

だから、すばらしい動画配信サービスがあってても、その良いところを堪能するような使い方はなかなか出来ません。

結局、どの動画配信サービスを使っても大差がない、ということになります。

それであれば、動画配信に留まらず様々なサービスを受けられるAmazonプライム会員が非常におトクなわけです。

子どもがいるという観点だと、プライム・ビデオもアニメなどの子ども向け動画が充実しています。取り揃えるアニメの総本数でいえば他の動画配信サービスの方が多いかもしれません。でも、アニメがいくら多くても全て見ることはまずないですよね。子どもに見せても問題ないと思えるアニメは、どの動画配信サービスでも同程度に取り揃えられているので、プライム・ビデオで十分!

しかも最近、プライム・ビデオはオリジナルコンテンツが充実し始めています。例えば、福家堂本舗やドキュメンタル(これホントオモシロイ!!)など。こうしたコンテンツがより増えていくとますますプライム・ビデオから離れられなくなってしまいますね。



プライム・ミュージックもいい。だけどさらなる発展に期待!

プライム・ミュージックAmazonプライム会員なら100万曲以上の楽曲や数百のプレイリスト、そしてプライムラジオが聴き放題。これまたAmazonプライム会員冥利に尽きます。

ただ、敢えて言わせてもらうともう少し楽曲が充実してくれると嬉しいかなぁ。

ぼくはAmazonプライム会員になる前からGoogle Play Music を使っているのですが、楽曲の充実度で言えばGoogle Play Music の方が上。

例えば、プライム・ミュージック の「プレイリスト」、Google Play Music では「ステーション」と言われる、あるテーマに基づいた楽曲の集まりの種類の豊富さ、それに含まれる楽曲の数、いずれにおいてもGoolge Play Music に軍配が上がります。


日用品の急な入用にも対応可能!プライム・ナウが超絶便利!!

あっ!アレがない!!

友だちや親しい人を自宅に招いた時に限って、あると思っていたものがなかったりするんですよね。

そんな時もプライム・ナウがあれば、あっという間に届けてくれます。

特別な日に限らずとも普段の生活の中でもプライム・ナウは非常に便利です。特に雨の日や寒い日、暑い日など、ちょっと外に出るのが億劫な時だったり、熱が出て身動きが取れない時にも注文すればすぐに届けてくれるので非常に心強いです。

ちょっと注意が必要なのは、注文は合計2,500円以上から出来るということ、1時間以内に届けてもらうためには890円のオプション料が必要になります。1時間に拘らなければ2時間便が無料で使えます。

HUAWEI P9 の液晶保護フィルムはどれにすればいいの?

HUAWEI honor8 の液晶保護フィルムを探してみましたが100%満足のいくものは見つかりませんでした。そのあたりはコチラのエントリーをご参照ください。

yt4u.hatenablog.com


液晶保護フィルムは液晶の湾曲部をカバーしない構造が基本形となっています。一方で、湾曲部のカバーを試みるフィルムは該当部位のフィルム浮きという憂き目にあっています。

これはある意味2.5D液晶の宿命なのかもしれません。


その中で、honor8の兄弟分にして同じ2.5D液晶を持つ HUAWEI P9 の液晶保護フィルム事情がどんなものなのか気になったで確認してみました。


P9の液晶保護フィルムはこの3択になりそう

いろいろと探していった中で、最も最適だとぼくが思ったのはコレです。

[asin:B01HWQHKXO:detail]

硬度9Hのガラスフィルムです。

アマゾンのレビューを見ると、このフィルムの販売元であるGTO CO., LTD.が扱ってる他スマホのフィルムのレビューも混ざっているのでP9用に関するレビューを抽出するのは困難です。
とはいえ、それらレビューを見ると総じて高評価。何よりこの販売元の対応の良さを称えるレビューが目立ちます。
この低価格で販売して尚且つユーザーからの問い合わせに対して真摯に対応するスタンスが評価できます。実際手元に来たフィルムが期待に沿うものでなかったとしても値段も含めて諦めがつくのではないでしょうか。

敢えてケチをつけるならば国産強化ガラスと「国産」を売りにしようとしているところです。 HUAWEIスマホを持つ人は、もはや「国産」に対する拘りなんてないですからね(笑
そもそも「国産」が良いという考え自体が考えものです。


次の候補に挙がるのはこのフィルムです。

こちらも硬度9Hのガラスフィルムです。

商品ページを見ていただけば分かるとおり、最初から2.5D非対応を明言。液晶の湾曲部をカバーしないので液晶の左右に隙間ができることをキッチリと説明しています。
この潔さも含めて2番目の候補としました。


もうひとつ候補を挙げるとすればこのフィルムです。

こちらも硬度9Hのガラスフィルムです。

商品説明文を見ると「ラウンドエッジ加工」とありますので、2.5D液晶に対応してすべてをカバーしてくれそうな期待を持てますが、レビューを見る限りだとやはり液晶左右に隙間があるようです。やはり2.5D液晶をすべてカバーしてれるフィルムはないものと思った方がいいのかもしれません。
このフィルムに対する評価が分かれていますが非常に低価格なので、たとえ失敗しても諦めがつくものになっています。


P9の液晶保護フィルムも本命不在

honor8の液晶保護フィルムは本命不在だと結論に至ったところから、その兄弟分にあたるP9(P9の方がお兄さんということになりそうです)の液晶保護フィルム事情を調査してみました。

結果、P9の液晶保護フィルムも本命不在と言えそうです。


となると、そもそもスマホの液晶は湾曲させる必要なし!スマホデザイナーよ、液晶はフラットにせよ!!ということになりますね。

スマホの背面はエッジが湾曲していることで持ち易さや手に馴染む感覚はあります。それは認めます。
でも、前面の液晶部のエッジが湾曲するメリットって何なのでしょうか?作り手の技術力の誇示なのでしょうか。何なのかは分かりませんが、おかげで液晶保護フィルムを探す流浪の旅はまだまだ続きそうです。

QCY QY8 は運動用イヤホンとして最適

運動時に使うイヤホンとしてQCY QY8を買ったので、レビューを残しておきたいと思います。

ぼくは週一回以上、運動しています。筋トレランニングがメインで、2008年から続けています。”週一回以上”をモットーとしているのでハードル高くなく、細く長く続けられています。

その中で先代のイヤホンは5年以上使い続けてきたのですが、その間ぼくの汗をふんだんに浴びせられ続けた結果、先日とうとう音を奏でることを止めてしまいました。ソニー製のイヤホンだったという以上の記憶/記録がなく、もはやアイテムの名前は知る由はありませんが、長いこと頑張ってくれたことだけは忘れずにおきたいと思います。さようなら。


ということでイヤホンを買う必要が急遽出てきてしまったわけです。


運動用イヤホンの要件はたった2つ

ぼくがイヤホン(運動用)を選ぶにあたって重視した点はつぎの2点だけです。


まず「5,000円以下」というのは、あくまで運動用なので立派なものは必要ない、ということです。いつ汗に水没(汗没?)するか分かりませんし、汗没せずとも汗の塩害によりイヤホンに長い寿命は期待しにくいです。なので、いつ壊れてもショックを受けない程度の金額である必要があります。願わくば数千円で買えればベストです。

つぎに「Bluetooth」。これはぼくには必須です。
運動のときはGoogle Play MusicからHipHopとかEDMとかをチョイスしてテンション上げていきたいんです。そんなときにスマホを持ちながらとか、ましてやスマホから長いイヤホンコードが伸びていたら邪魔で仕方がありません。あっという間にテンションだだ下がりです。だから、Bluetoothイヤホンでコードも極力短くです。


これだけを念頭にAmazonで検索すると、、、まぁ大量にありますね(汗

大量にありすぎて選びきれませんので、その中からレビュー件数が多く、かつ評価が高いものをということで見ていくと「QCY QY8」に行きつくことになります。


で、ポチっと。


で、届きました。

f:id:yt4u:20161031145401j:plain


で、使ってみました。

そしたら、まったくもってアマゾンのレビューどおり!
さすがに1,000件以上もレビューが蓄積されていると情報の精度が格段に高いですね。

音はどう?

まず音に関しては必要十分、というよりも期待以上。値段的にスカスカな音を想定していましたが高音低温しっかり鳴ります。

重さはどう?

重さはBluetooth内臓とだけあってやや重め。運動時に耳からずれ落ちるということはありませんが、気になり始めると気になる重さというのでしょうか、重さの許容範囲の閾値近辺にいます。

フィット感はどう?

ずれ落ち防止に一役買っているのがイヤーフックです。「フック」といっても耳に掛けるのではなく、イヤーピース近くにある小さい輪っかが、耳の穴上部の固いヒダ(耳輪脚と言うようです)に突っ張り棒の要領でイヤホンを固定する役割を果たします。

電池の持ちはどう?

電池よりも先にぼくの体力が切れるので、電池の持ちは分かりません!


まだ使い始めたばかりなので正確な評価はこれから

まだ使い始めたばかりなので現時点で正確な評価は難しいです。

使っているうちに気付くことも多々出てくることと思いますので、その際はこのエントリーに追記していきたいと思います。