カテゴリー「パソコン・インターネット」の79件の記事

2020年8月29日 (土)

OPPO Reno A を購入した

私の場合、スマホは通勤時の暇つぶしに使っている程度で、これまで ASUS Zenfone5 → Zenfone3 とお手頃価格の SIMフリースマホを利用してきた。今使っている Zenfone3 は Sofmapで新古品を買ってから2年半を超え、バッテリーが少しヘタったくらいで大きな支障があるわけではないが、そろそろ更新しようと思い 3万円台くらいのコスパの高いスマホを探すことにした。

そんな折、おサイフケータイ機能も気になってき始め、どうせこれから3年近く使うので、とりあえずおサイフケータイ機能がついている、SHARP の AQUOS sense 3 か OPPOの Reno3、Reno A あたりに目を付けることにした。

これらの機種をググってみると、異常に価格の安い「あるサイト」が嫌でも目に付く。OCNのスマホセットのセール価格で、音声付きSIMを新規契約することで、各種スマホを格安で手に入れることができる。

これらのセット商品でありがちなのが、スマホ本体価格を分割して通信費に上乗せしているだけで、総合的にみると決して安くないというパターンだが、OCNの場合は通信費への上乗せなし(本体の残債はなし)、SIM契約にも最低期間制限なしというとんでもない好条件だ。(ただし、実際はそんなにうまい話はなく、最低契約期間は設定されていないものの、すぐに解約するとブラックリストに載せられ次回からは購入できなくなるとのこと。)

OCNのセールは常時やっているわけではなく、OCN本体(NTTコミュニケーションズ)のサイト、goo SimSellerという販売代理店(NTTレゾナント)のサイト(本店楽天市場店PayPayモール店の3店あり)で入れ替わりでやっているので、欲しいスマホを決めたらこれらのサイトを定期的にチェックしておく必要がある。

私の場合は、結局、OPPO Reno3 が販売されたことによって型落ちとなった Reno A が 7月下旬に税込 9,240円になった時点で、楽天市場店で購入した。(同タイミングでは、楽天市場店とPayPayモール店が同額でセールを行っていた。)

OPPO Reno A
Oppo_renoa

OCNでスマホセットを購入する場合の大きな流れは以下の通りである。
楽天市場店で購入の場合なので、OCN本体のサイトとは少し違うかも知れない。

  1. サイトでスマホを購入する。
  2. 購入後の翌営業日に、SIM申し込みの案内メールを受領し、指定サイトで1週間以内に申込みを行う。(その際に免許証などの本人確認書類のアップが必要)
  3. (私の場合)2の2日後に商品発送連絡があり、翌日にスマホ本体とSIMを受領した。

なお、OCNのSIM契約は、契約初月のデータ通信費は無料である。「契約初月」とは、「OCN側で本人確認書類の確認が完了した日の10日後を含む月」となるので、上記の2の申し込みを毎月22日とすれば、その翌月がまるまる無料となるのでお得である。
私の場合、申込みが7月27日だったので、8月分のデータ通信料は無料となるとは思っていたが、実際は7月も契約したデータ容量が付与され、それらの未使用分が8月に上乗せ(キャリーオーバー)されていた。なかなか太っ腹である。
また、OCNは任意のタイミングで契約容量の変更ができるので、契約時は最大の容量としておき、無料期間が終わる間際に本来の容量に変更するという手も使えるらしい。

 

以下、Reno A と OCNの格安SIM(OCN モバイル ONE) を使い始めて半月時点での私の備忘録である。

 

【データ移行】
過去に ASUS Zenfone5 から Zenfone3 に移行した際には、特別なツールは使わずに、Googleにログインすることで自動的に旧スマホで利用していたアプリが自動でインストールされた記憶があるが、今回は OPPO Reno A の初回起動時に表示される指示に従ってデータ移行を行った。具体的には、旧スマホに OPPOのデータ移行アプリ 「ClonePhone」をインストールして行う方法となるが、現時点で、1点を除き、データ移行に関する不具合は発生していない。
1点とは、Lineの移行後に 「再インストールのご案内(LINEを削除して公式バージョンを再インストールしてください)」という通知が定期的に送られてきたことである。これは、「ClonePhone」ではアプリを1からインストールするのではなく、内部的に apkファイルで移行しているのが原因と思われるが、この通知もいつのまにか来なくなったので現実的には問題ない。

なお、「ClonePhone」は Google Play には置かれていないということであったが、2020年8月現在アップされている。

参考サイト

 

【ColorOS】
OPPOスマホでは、Androidを独自にカスタマイズした ColorOS が採用されており、Reno A も Andriod 9ベースの ColorOS 6 が搭載されている。ネットでは、このカスタマイズによるクセや使いにくさを欠点として挙げている意見もあるが、私レベルの普通のユーザは特に気にせずに使えるという印象である。
なお、Reno A 特有かつお決まりの設定については、以下のサイトが役に立つ。

 

【不具合】
メインで使い始めてまだ半月くらいしかたたないため、特に大きな問題や違和感はなかったが、昨日、通勤中の電車内で突然ネットが使えない状態になった。SIMが認識されておらず「モバイルデータ通信」をONにできない状態である。突然のことでかなり焦ったが、結局電源をリセットすることで復活した。その後、この現象をググってみたところ、価格comのクチコミで、正に
「通信事業者」が消えます。何故?(再起動で復活)
というスレッドがあり、どうも Reno A 固有の未解決のバグのようである。そのスレッドの最後に、ある方が試行錯誤的に見つけた回避策も載っているが、私はまだ設定していない。

 

【通信速度】
OCNモバイルONEは、私にとって Zenfone5 でスマホデビューした時に最初に使った格安SIMである。しかし、2年くらいして mineo に切り替えて今日までそれを使ってきた。切り替えた理由は通信品質である。格安SIMは通信速度の点で3大キャリアに劣るのは仕方がないことは認識していたが、当時の OCNモバイルONEは は朝の通勤時に新宿あたりで全く繋がらないなどの問題があった。(その後、契約した mineo も通信速度が遅い時間帯などはあったが、繋がらないということはなかった。)
OCNモバイルONE が従来の通信品質のままであれば切替を躊躇していたかも知れないが、2019年11月より新コースが始まり通信速度も改善されたとなので、それに期待してみた。
使ってみた結果、十分快適になったというのが正直な印象である。(mineo よりも早く感じることが多い気がする。)OCNモバイルONE の新コースはまだ始まって日が浅く、ユーザが増えれば遅くなるという話もあるが、とりあえずうれしい誤算であった。

 

では。

| | コメント (0)

2020年5月 6日 (水)

エクスプローラからファイル一覧を出力するVBScript(検索結果もOK)

本記事では、Windowsのファイルエクスプローラで表示・選択されているファイルの一覧(ファイル名、パス、サイズ、更新日時)をクリップボードに張り付ける方法について記載している。
これは、エクスプローラで検索した結果に対しても有効である。

実は、これは、以前の記事「エクスプローラでファイル名をクリップボードにコピーする」で紹介した内容の改良版で、前回との違いなどを最初に記載しているが、手っ取り早く試したい人は、【導入手順】から読んでほしい。


【前回記事内容と今回の変更点】

前回は(今回も同じであるが)以下の方法で実現している。

step1.対象ファイルを選択した状態でエクスプローラの右クリックメニュー →「送る」で特定のバッチファイルを選択
step2.バッチファイルが実行され、ファイルの情報をクリップボードへコピー
step3.(人が)テキストファイルやExcelに貼り付け

また、出力する情報別に、以下の3種類のバッチファイルを用意していた。

  1. ファイル名のみのの一覧(テキスト形式)
  2. パス、ファイル名、更新日時、ファイルサイズ の一覧(Excelに張り付けられるようTAB区切り)
  3. tree情報(Dosコマンドの tree の実行結果)

自分でも日々の業務の中で使用しており、特に 2 は重宝して使っていた。
エクスプローラ内のファイルの一覧を表示するのであれば、Dosコマンドの Dir でも何とかなるが(それでも Excel に貼って2次加工したい場合はひと手間必要)、エクスプローラで検索した結果の一覧を更新日時やサイズと合わせて出力する場合はこれ以外の方法はないと思う。

ところが、これまで使っていて、うまく動作しないケースを発見した。ファイル名やフォルダ名に全角空白が含まれる場合で、なぜか、全角空白で名称が分断され、2つのファイルやフォルダが存在するように誤動作してしまう。

この原因調査のためググってみたところ、以下の記事を発見した。

ファイル名に=;,や全角空白を使うときは、半角空白も併せて使うべし。
ファイルエクスプローラからバッチファイルへドラッグ&ドロップして正しいファイル名を得る方法


結果的には、これはバッチファイルの仕様(バグ?)でどうしようもないようである。それも、ファイル名やフォルダ名に一緒に半角空白が入っていればOKという謎仕様である。

そこで、バッチファイルの使用は諦め、1と2を VBScript で書き直したのが今回の記事である。VBScript はどの Windowsにも実装されているので、利用にあたって特に設定を変更したり何かのモジュールを導入する必要はない。


【導入手順】

Step1.

以下のリンクを右クリックし、メニューから「名前を付けてリンク先を保存」や「対象をファイルに保存」などを選択して VBScript ファイルをダウンロードし、ファイル名の最後の「.txt」を削除して(拡張子をvbsにして)保管したいフォルダに保存する。
それぞれ、上記の 1, 2 に対応しているので、どちらか一方でも問題ない。
文字コードは SJISを使っているため ブラウザ上で表示した場合は文字化けするので注意。

「1_copy_filenames.vbs.txt」をダウンロード
「2_copy_file_info_for_Excel.vbs.txt」をダウンロード

 

なお、「2_copy_file_info_for_Excel.vbs.txt」については、テキストエディタでファイルの先頭で定義されている定数を変更することで、以下のカスタマイズが可能である。(デフォルトで問題なければそのままで良い。)

  • fol_level_q = 0

フォルダが選択されている場合、サブフォルダ以下を階層的に調査するかを指定する。
     0:調査しない
     1:調査する
    -1:毎回確認画面でどちらかを指定する

  • Const def_fol_level = 20
       
       調査する場合の階層レベルを指定する。
        -1:制限なし
         0:サブフォルダは調査しない
         n:N階層まで調査

        通常 -1 でも問題ないが、シンボリックリンクなどがある場合に無限ループに陥る可能性があるので初期値は20にしている
        
  • Const fol_output = 1

   フォルダ自身の情報を1行として出力するかを指定
     1:出力する
     0:出力しない(ファイルの情報のみを出力する)
      

Step2.

Step1.で保存したバッチファイルのショートカットを SendToフォルダの直下に作成し、お好みで名称を判りやすいものに変更する。

SendToフォルダは、右クリックメニューで「送る」を選択した時に表示されるファイルを格納する場所で、エクスプローラ上部のパスが表示されるところに「shell:sendto」と入力して開くことができる。
私の場合(OSはWindows10 Home)は以下のフォルダである。
C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\SendTo

 
【利用方法と実行例】

エクスプローラ上で対象ファイルやフォルダを選択し(複数選択可)、右クリック → 送る から 実行するVBScriptを選択して実行する。
その後、「1_copy_filenames.vbs」であればテキストエディタなどへ、「2_copy_file_info_for_Excel.vbs」であれば Excelの空シートに貼り付ける。


以下が貼り付けイメージである。

  • サンプルのファイル構成(青背景の4つを選択した状態で右クリック)

  E:\PROGRAM FILES (X86)\MOZILLA FIREFOX
  ├─Accessible.tlb
  ├─AccessibleHandler.dll
  ├─AccessibleMarshal.dll
  └─uninstall
    ├─helper.exe
    ├─shortcuts_log.ini
    ├─uninstall.log
    └─uninstall.update 

  • 1_copy_filenames.vbs の実行結果
     
      E:\Program Files (x86)\Mozilla Firefox  <= 1行目はパス
      Accessible.tlb
      AccessibleHandler.dll
      AccessibleMarshal.dll
      uninstall
     
  • 2_copy_file_info_for_Excel.vbs の実行結果
    • fol_level_q = 1 (サブフォルダを調査)で実行した場合
    • fol_level_q = 0 の場合は、6行目以降は表示されない

  Excel_image_001

 

もう1つ、検索結果についての貼り付け例を示す。

  • エクスプローラでの検索結果
    • Firefox のインストールフォルダ内で "log"を検索し4ファイルがヒット

Excel_image_002

  • 2_copy_file_info_for_Excel.vbs の実行結果
    • 検索結果の4ファイルとも選択して実行

Excel_image_003

 

では。

| | コメント (0)

2020年2月24日 (月)

ORICO 5.25インチベイ用 着脱式HDDケースの電源ボタンを交換した

今回は、以前の記事「余剰部品を活用した ~ Orico 1105SS と AREA TTH Quattro」でも書いた、Orico社の内蔵HDDケースの話である。
あれから4年間、バックアップ用のHDDを入れて使用してきた。バックアップを取るときだけ電源を入れるので地震などの不意の衝撃で壊れる可能性は少なく、外付けのUSB HDDと比べ場所をとらないのが気に入っていた。

 正面から見たところ
 Orico_hddcase_001


 本体(上面の丸印のネジは既に外してある)
 Orico_hddcase_002

  背面にはSATAのコネクタがある
 
Orico_hddcase_003

 

ところが、1年くらい前から正面左にある電源ボタンを押す時に引っかかるような感触がでてき始め、ついに押しても戻らなくなってしまった。しばらくは、内側側面の隙間から精密ドライバの先端を挿し込んで強制的に戻していたが、それも面倒くさくなり修理にチャレンジすることにした。

以下、そのメモである。

(手順は後述するが)分解してみたところ、押ボタンの部品を取り外すことができ、ググってみたところ秋葉原の秋月電子で、見かけ・サイズ・脚の数まで全てそっくりな部品を発見、早速購入してみた。


基板用押ボタンスイッチ(黒・オルタネート) PS-85S(1個 税込40円)


細長いボタン(下の写真左)が付属しているが、ボタンは挿し込み式になっており、Oricoに付いていた大きなボタン(写真中央)と交換可能。結論として、本体は全く同じ仕様のようである。

 Orico_hddcase_008

脚は6本あり、その回路図は上記リンクのデータシート参照。

 Orico_hddcase_009


ケースの前方上面と側面のネジ(写真内の黄色の丸)を外してフロントパネルを前方に引き出すとボタン部品が見え、後方に引き抜いて外すことができる。(下の写真中央のリード線が繋がっている部品をリード線側に引き抜く。)

 Orico_hddcase_011


2本のリード線のハンダを溶かして部品から外し、新しい部品にハンダ付けして(短絡防止のため)熱収縮チューブで覆う。

 Orico_hddcase_012

あとは、逆の手順で組み立てれば完成である。

では。

| | コメント (0)

2019年8月18日 (日)

outlookメールの添付ファイル名を検索するVBScriptを作成してみた

今回は、自分の仕事で使う目的で作成した「outlookを操作するVBScriptシリーズ」の恐らく最終回である。

これまでのこのシリーズの出し物は以下の通りである。

今回は、outlookの添付ファイルを検索し、ファイル名の中に、指定した文字列を含むものを検索するスクリプトである。

使い方は、以下の通りである。

まず、事前準備として、本記事の最後に添付されている「search_for_attached_files_in_outlook.vbs」を任意の場所に置いておく。
あとは、outlook上で検索対象のメールを選択した状態で(もちろん複数選択可)、このvbsファイルをダブルクリックして実行するだけである。

実行すると「ファイル名の一部を指定してください。」というメッセージと入力ウィンドウが現れるので検索文字列を入力すると、検索完了後に、

  • 1件でも見つかった場合は「N件のファイルが見つかりました。情報をクリップボードにコピーしました。」
  • 1件も見つからなかった場合は「該当ファイルは見つかりませんでした。」

のいずれかを表示し終了する。

前者の場合は、Ctrl-v などの貼り付け操作で、Excelやテキストエディタなどにクリップボードの内容を貼りつけると

見つかった添付ファイル名,  該当メールの受信日時,  件名,  送信者

の一覧(各項目はタブ区切り)を見ることができる。

留意事項としては以下の通り。

  • 一度に入力できる検索文字列は1つだけで、ファイル名の中に、その文字列を完全一致で含むものだけがヒットする。
  • 実行中にoutlookへのアクセス許可を求める以下のダイアログが表示された場合は「許可」を選択する。
    Outlook_acceess_permission

 

以下がスクリプトである。


Option Explicit

Dim objOA, objSelection, objItm, objAtt, objWS
Dim I, MySrch, MyCnt, Mystring

Set objOA = CreateObject("Outlook.Application")

Set objSelection = objOA.ActiveExplorer.Selection
If objSelection.Count = 0 Then
 MsgBox "メールが選択されていません。"
 WScript.Quit
End If

MySrch = InputBox("選択されたメールの添付ファイル名を検索します。" & vbCrLf & "ファイル名の一部を指定してください。")

If Len(MySrch) = 0 Then
 WScript.Quit
End If

MyCnt = 0
Mystring = ""
For I = 1 To objSelection.Count
 set objItm = objSelection.Item(I)
 For Each objAtt In objItm.Attachments
  If InStr(1,objAtt.FileName,MySrch,1) > 0 Then
   MyCnt = MyCnt + 1
   Mystring = Mystring & vbCrLf & objAtt.FileName & vbTab & objItm.ReceivedTime & vbTab & objItm.Subject & vbTab & objItm.Sender
  End If
 Next
Next

If MyCnt > 0 Then
 Mystring = "ファイル名" & vbTab & "受信日時" & vbTab & "件名" & vbTab & "送信者" & Mystring
 MsgBox(MyCnt & "件のファイルが見つかりました。情報をクリップボードにコピーしました。")
 Set objWS = CreateObject("WScript.Shell")
 objWS.Exec("clip").StdIn.Write Mystring
Else
 MsgBox("該当ファイルは見つかりませんでした。")
End If


 

ファイルのダウンロードは、以下のリンクを右クリックで「保存」(ファイルの文字コードは SJIS)

ダウンロード - search_for_attached_files_in_outlook.vbs

 

では。

 

| | コメント (0)

2019年5月 3日 (金)

outlookメールの添付ファイルを削除するVBScriptを作ってみた

今回も、自分の仕事で使う目的で作成した、outlookを操作するVBScriptシリーズである。

これまで、以下のVBScriptをアップしてきた。


私の場合、会社のメールサーバの容量が限られているので、定期的にサーバ上のメールを削除し、過去メールはデータファイル(pstファイル)にバックアップしている。
その際、データファイルの容量を極力小さくするため、サイズが大きく、かつ保存する必要のない添付ファイルは個別に削除しているのだが、そのためには以下の操作をメールの数だけ繰り返す必要がある。

  1. 対象メールを開く
  2. 添付ファイルを右クリックして削除
  3. メールを保存

そこで今回は、メールの添付ファイルを削除するVBScriptを作成してみた。

使い方は、以下の通りである。
まず、事前準備として、本記事の最後に添付されている「delete_attached_files_in_outlook.vbs」を任意の場所に置いておく。
あとは、outlook上で対象メールを選択した状態で(複数選択可)このファイルをダブルクリックし、確認ダイアログに回答するだけである。VBスクリプトなので、VBAと違いoutlookに組み込む必要はない。
途中で「1ファイルづつ確認しながら削除しますか?」と聞いてくるので、ここで「はい」を選択すると添付ファイル毎に メール件名、添付ファイル名、サイズ が表示されるので個別に削除するか否かを指定でき、「いいえ」を選択すると個別の確認はなく全添付ファイルが削除される。
また、outlookへのアクセス許可を求める以下のダイアログが表示された場合は「許可」を選択する。

 Outlook_acceess_permission

 

以下がスクリプトである。


Option Explicit

Dim objOA, objSelection, objItm, objAtt, objAtts
Dim I, MyDlt, MyMsg, MyCnt, MyCnfm, MyChng, MyIdx

Set objOA = CreateObject("Outlook.Application")

Set objSelection = objOA.ActiveExplorer.Selection
If objSelection.Count = 0 Then
 MsgBox "メールが選択されていません。"
 WScript.Quit
Else
 MyMsg = "★★警告★★" & vbCrLf & "以下のメールの添付ファイルが削除されます。良いですか?"
 MyCnt = 0
 For I = 1 To objSelection.Count
  set objItm = objSelection.Item(I)
  If objItm.Attachments.count > 0 Then
   MyCnt = MyCnt +1
   MyMsg = MyMsg & vbCrLf & Right(Space(5) & MyCnt, 5) & ": "& objItm.Subject
  End If
 Next
 If (MyCnt = 0) Then
  MsgBox "添付ファイル付きのメールが1通も選択されていません。"
  WScript.Quit
 Else
  If MsgBox(MyMsg, vbYesNo) = vbNo Then
   WScript.Quit
  End If
 End If 
End If

MyCnfm= MsgBox ("1ファイルづつ確認しながら削除しますか?", vbYesNoCancel)
If MyCnfm = vbCancel Then
 WScript.Quit
End If

For I = 1 To objSelection.Count
 set objItm = objSelection.Item(I)
 Set objAtts = objItm.Attachments
 If objAtts.Count > 0 Then
  MyChng = vbNo
  MyIdx = 1
  While objAtts.Count > MyIdx - 1
   set objAtt = objAtts.Item(MyIdx)
   If MyCnfm = vbYes Then
    MyDlt = MsgBox ("以下のファイルを削除しますか?" & vbCrLf & " メール件名[" & objItm.Subject & "]" & vbCrLf & " ファイル名[" & objAtt.FileName & "]" & vbCrLf & " サイズ[" & Round(objAtt.Size/1024) & "KB]", vbYesNoCancel)
    If MyDlt = vbCancel Then
     WScript.Quit
    ElseIf MyDlt = vbYes Then
     objAtts.Remove(MyIdx)
     MyChng = vbYes
    Else 'MyDlt = vbNo
     MyIdx = MyIdx + 1
    End If
   Else
    objAtts.Remove(MyIdx)
    MyChng = vbYes
   End If
  Wend
  If MyChng = vbYes Then
   '既読に変更
   objItm.UnRead = False
   '変更を保存
   objItm.Save
  End If
 End If
Next


 

ファイルのダウンロードは以下のリンクを右クリックで「保存」を選択(ファイルの文字コードは SJIS)

ダウンロード - delete_attached_files_in_outlook.vbs

 

では。

| | コメント (0)

2019年5月 2日 (木)

outlookからメールと添付ファイルを出力する(その2)

以前の記事「outlookからメールと添付ファイルを抽出するVBScriptを作ってみた」で、outlookからメールと添付ファイルを取り出すVBScriptを紹介した。

そのバージョンでは、あらかじめ対象メールをoutlookの指定フォルダにコピーしておかなければならなかったが、今回、その改良版としてoutlook上で選択されたメールを対象とするように仕様変更したので紹介する。
なお、私が試した環境は、Windows7とoutlook2010の組合せのみである。

主な機能は以下の通りである。

  • outlookのメールを、msgファイルとして、Windowsの指定フォルダに出力する。ファイル名は「YYYYMMDD_HHMMSS_メール件名.msg」で YYYYMMDD HHMMSS はメールの受信日時である。
  • オプションで、メールの添付ファイルを同じフォルダ直下の「添付_YYYYMMDD_HHMMSS_メール件名」というフォルダの下に出力することも選択可能。更に、オプションで、添付ファイル出力後、メールの添付ファイルを削除し、代わりに「添付ファイルを出力したフォルダのパスを記載したテキストファイル(ファイル名「元の添付ファイルの保存先フォルダ.txt」)」をメールに添付することも可能。

使い方は、以下の通りである。
まず、事前準備として、本記事の最後に添付されている「export_from_outlook.vbs」を任意の場所に置いておく。
あとは、outlook上で対象メールを選択した状態で(複数選択可)、このファイルをダブルクリックするだけである。VBスクリプトなので、VBAと違いoutlookに組み込む必要はない。

ダブルクリック後の手順をもう少し説明する。

  1. ダブルクリックすると「n 通のメールが選択されています。続けますか?」ときいてくるので「はい」を選択する。
  2. 以下のダイアログが表示されるので、出力先(格納先)フォルダを選択する。なお、ダイアログの下の「フォルダー(F):」にフルパスを直接貼り付けても良い。

    Folder_dialog

  3. 「添付ファイルを取り出しますか?」というダイアログが表示されるので「はい」「いいえ」のいずれかを選択する。
    「いいえ」を選択した場合は msgファイルのみ、「はい」を選択した場合は msgファイルに加え添付ファイルも抽出される。
  4. 3で「はい」を選択した場合、「添付ファイルを削除しますか?」というダイアログが表示されるので「はい」「いいえ」のいずれかを選択する。「はい」を選択した場合、元のメールの添付ファイルは削除されるので注意。
  5. 4で「はい」を選択した場合、「保存先フォルダを記載したテキストファイルを添付しますか?」というダイアログが表示されるので「はい」「いいえ」のいずれかを選択する。ここで「はい」を選択した場合、元の添付ファイルは削除されるが、代わりに添付ファイルを出力したフォルダのパスを記載したテキストファイルが添付される。なお、いずれの場合も、元が添付ファイル付きメールの場合、抽出された msgファイルには添付ファイルが含まれている。
  6. outlookへのアクセス許可を求める以下のダイアログが表示されるので、「許可」を選択する。

    Outlook_acceess_permission 

手順は以上である。


以下がスクリプトである。


Option Explicit

Dim objOA, objSelection, objShell, objFolder, objFSO, objItm, objAtt, objWss, objTxt
Dim MyDate, MyFileName, MyFolder, MySubFolder, MyMsgPath, YNCont, YNExt, YNDel, YNRplc, ENVtmp, MyTmpTxt, MyMsg, MyCnt, I

Const olMSG = 3
Const ErrReject = -2147467260

'添付ファイル格納サブフォルダ名の接頭語
Const PreWord = "添付_"
'元の添付ファイルの保存先フォルダを記載した添付ファイル名
Const AttFileName = "元の添付ファイルの保存先フォルダ.txt"

Set objOA = CreateObject("Outlook.Application")

Set objSelection = objOA.ActiveExplorer.Selection
If objSelection.Count = 0 Then
 MsgBox "メールが選択されていません。"
 WScript.Quit
Else
 YNCont = MsgBox(objSelection.Count & " 通のメールが選択されています。続けますか?", vbYesNo)
 If YNCont = vbNo Then
  WScript.Quit
 End If
End If

Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder( 0 , "フォルダを選択して下さい" , &h4050 , &h11)

If (objFolder Is Nothing) Then
 WScript.Quit
End If
MyFolder = objFolder.Items.Item.Path

'MsgBox "MyFolder = " & MyFolder

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Not(objFSO.FolderExists(MyFolder)) Then
 MsgBox("存在しないフォルダが指定されました")
 WScript.Quit
End If

MyCnt = 0
For I = 1 To objSelection.Count
 set objItm = objSelection.Item(I)
 If objItm.Attachments.count > 0 Then
  MyCnt = MyCnt + 1
 End If
Next

YNExt = vbNo
If MyCnt > 0 Then
 YNExt = MsgBox("添付ファイルを取り出しますか?", vbYesNoCancel)
 If YNExt = vbCancel Then
  WScript.Quit
 ElseIf YNExt = vbYes Then
  YNDel = MsgBox("添付ファイルを削除しますか?", vbYesNoCancel)
  If YNDel = vbCancel Then
   WScript.Quit
  ElseIf YNDel = vbYes Then
   YNRplc = MsgBox("保存先フォルダを記載したテキストファイルを添付しますか?", vbYesNo)
   If YNRplc = vbYes Then
    MyMsg = "★★警告★★" & vbCrLf & "以下のメールの添付ファイルが置き換えられます。良いですか?"
   Else
    MyMsg = "★★警告★★" & vbCrLf & "以下のメールの添付ファイルが削除されます。良いですか?"
   End If
   MyCnt = 0
   For I = 1 To objSelection.Count
    set objItm = objSelection.Item(I)
    If objItm.Attachments.count > 0 Then
     MyCnt = MyCnt +1
     MyMsg = MyMsg & vbCrLf & Right(Space(5) & MyCnt, 5) & ": "& objItm.Subject
    End If
   Next
   If MsgBox(MyMsg, vbYesNo) = vbNo Then
    WScript.Quit
   End If 
  End If
 End If
End If

Set objWss = WScript.CreateObject("WScript.Shell")
ENVtmp = objWss.expandEnvironmentStrings("%TMP%")

For I = 1 To objSelection.Count
 set objItm = objSelection.Item(I)
 
 MyDate = objItm.ReceivedTime
 MyDate = Replace(MyDate, "/", "")
 MyDate = Replace(MyDate, ":", "")
 MyDate = Replace(MyDate, " ", "_")

 MyFileName = MyDate & "_" & objItm.Subject

 '使用禁止文字を置換する
 MyFileName = Replace(MyFileName, "?", "?")
 MyFileName = Replace(MyFileName, ":", ":")
 MyFileName = Replace(MyFileName, "/", "/")
 MyFileName = Replace(MyFileName, "\", "¥")
 MyFileName = Replace(MyFileName, "*", "*")
 MyFileName = Replace(MyFileName, """", "”")
 MyFileName = Replace(MyFileName, "<", "<")
 MyFileName = Replace(MyFileName, ">", ">")
 MyFileName = Replace(MyFileName, "|", "|")
 
 MyMsgPath= MyFolder & "\" & MyFileName & ".msg"
 
' MsgBox MyMsgPath
 
 Err.clear
 On Error Resume Next

 objItm.SaveAs MyMsgPath , olMSG
 
 If (Err.Number = ErrReject) Then
  MsgBox "終了します"
  WScript.Quit
 End If

 On Error Goto 0

 If (YNExt = vbYes) and (objItm.Attachments.count > 0) Then
  
  MySubFolder = MyFolder & "\" & PreWord & MyFileName

  If objFSO.FolderExists(MySubFolder) = True Then
   MsgBox "フォルダ " & MySubFolder & " は既に存在しています。"
  Else
   objFSO.CreateFolder(MySubFolder)
  End If

  For Each objAtt In objItm.Attachments
   objAtt.SaveAsFile MySubFolder & "\" & objAtt.FileName
  Next
  
  If YNDel = vbYes Then
   Set objAtt = objItm.Attachments
   While objAtt.Count > 0
    objAtt.Remove 1
   Wend
   '既読に変更
   objItm.UnRead = False
   '変更を保存
   objItm.Save
   
   If YNRplc = vbYes Then
    MyTmpTxt = ENVtmp & "\" & AttFileName
    Set objTxt = objFSO.OpenTextFile(MyTmpTxt, 2, true)
    objTxt.Write(MySubFolder)
    objTxt.Close
    objItm.Attachments.Add(MyTmpTxt)
    objItm.Save
    objFSO.DeleteFile MyTmpTxt, True
   End If
  End If
 End If
Next


ファイルのダウンロードは以下のリンクを右クリックで「保存」を選択(ファイルの文字コードは SJIS)

ダウンロード - export_from_outlook.vbs

 

どうぞご自由に。

| | コメント (0)

2018年12月31日 (月)

outlookのメール一覧をExcelに貼り付けるためのVBScriptを作ってみた

前回の記事で、outlookから msgファイルと添付ファイルを抽出するVBScriptを公開したが、その応用編として、メールの件名や内容の一覧をExcelに貼り付けるVBScriptを作成したので公開する。
スクリプトの大半は前回のものの流用であるが、添付ファイルやWindowsのフォルダを扱わないのでこちらの方がシンプルである。

それでは、まず仕様から。

  • outlook上の特定メールフォルダに格納されているメールを対象とする。従って、実行前に対象メールを「特定メールフォルダ」にコピーする必要がある。
    【2019年5月2日追記】
    対象メールを「outlookで選択されているメール」に改良したバージョンを作成したので、興味のある方は本記事の文末を参照。
  • 本スクリプトではExcelへの貼り付け自体は行わず、タブ区切りの一覧をクリップボードにコピーするまでを行う。従って、本スクリプトを実行した後、Excelの任意のセルを選択して貼り付け操作をすれば一覧がExcelに展開される。
  • 貼り付けられる項目は、受信日時、件名、送信者、本文 とした。

以下、本スクリプトの利用手順である。

  1. 対象ファイルを outlookの受信フォルダ直下の「export」フォルダにコピーする。フォルダ名はスクリプトの10行目で定義しており変更は可能だが、事前に決めておく必要がある。
  2. 本スクリプトをダブルクリックで実行する。
  3. outlookへのアクセス許可を求める以下のダイアログが表示されるので、「許可」を選択する。
    Outlook_acceess_permission
     
  4. Excelの任意のセルを選択し、貼り付け操作(Control-vなど)を行う。
     

テストした環境は Windows7と Office2010の組合せのみなのであしからず。
スクリプト(コードはSJIS)は以下のリンクからご自由に。(右クリックして保存)

「outlook2tsv.vbs」をダウンロード

読みにくいが、内容は以下の通り。


Option Explicit

Dim objOA, objNS, objOLFolder, objItm, objWS
Dim Mystring

Const olFolderInbox = 6
Const ErrNoOLFolder = -2147221233

'outlook の対象フォルダ名(受信トレイの下)
Const oLFolderName = "export"

Mystring = "受信日時" & vbTab & "件名" & vbTab & "送信者"& vbTab & "本文" & vbCrLf

Set objOA = CreateObject("Outlook.Application")
Set objNS = objOA.GetNamespace("MAPI")

Err.clear
On Error Resume Next

Set objOLFolder = objNS.GetDefaultFolder(olFolderInbox).Folders(oLFolderName)

If (Err.Number = ErrNoOLFolder) Then
  MsgBox "指定した outlook のフォルダ " & oLFolderName & " が存在しません"
  WScript.Quit
End If

On Error Goto 0

For Each objItm In objOLFolder.Items
  Mystring = Mystring & objItm.ReceivedTime & vbTab & objItm.Subject & vbTab & objItm.Sender & vbTab & """" & objItm.Body & """" & vbCrLf
Next

Set objWS = CreateObject("WScript.Shell")
objWS.Exec("clip").StdIn.Write Mystring


では。

 

【2019年5月2日追記】

以下の改良を行ったバージョンを作成したので、興味のある方は下記リンクから。(右クリックして保存)

  • 対象メールを「outlookの特定メールフォルダ下にあるメール」から「outlook上で選択されているメール」に変更
  • メール本文がHTML形式の場合、異常終了する不具合に対応(ただし、HTML形式の場合、 "?"などの不正文字が残ることがある)

ダウンロード - export_mails_from_outlook_in_tsv_format.vbs

 

 

 

| | コメント (0) | トラックバック (0)

2018年12月30日 (日)

outlookからメールと添付ファイルを抽出するVBScriptを作ってみた

会社ではメーラとして outlookを使っている。
個人的には検索のアホさを始めとした、もろもろの使い勝手の悪さに辟易しているが、会社の標準なので付き合わざるを得ない。

特に最近面倒くささを感じていたのがメールのダウンロード(抽出)だ。エクスプローラにドラッグ&ドロップすればメールファイル(msgファイル)が作成されるのだが

  • 添付ファイルは個別にコピペする必要がある。
  • msgファイルの名称がメール件名となるので、返信を繰り返したメールだと全て同じファイル名になり、いちいちリネームする必要がある。
  • ファイル名を見ただけでは受信日時がわからない

といった不満がある。多分 outlookマクロを作成すれば解決できるのかも知れないが、会社では勝手にマクロを組み込むのは不可である。

いろいろとググってみると、VBScriptでも outlookの操作が可能のようである。VBScriptは Windowsで動作するスクリプト言語で個人的には全く馴染みがないが、

  • Windowsであれば、何の事前準備も不要でダブルクリックで実行できる
  • Officeの操作も可能
  • 細かな文法やテクニックを知らなくても、Web上で公開されているコードを組み合わせれば何とかなりそう

という点がメリットである。

と言うことで、休み時間などを利用して半月ほどで一通り使えそうなものができたので、公開することにした。

まず、仕様は自分の好みで以下とした。

  • outlook上の特定メールフォルダに格納されているメールを抽出対象とする。従って、抽出前に対象メールを「特定メールフォルダ」にコピーする必要がある。outlook上で対象メールを右クリックして抽出できれば一番良いのだが、これは VBScriptを使う限りは無理だと思う。
    【2019年5月2日追記】
    抽出対象メールを、「特定メールフォルダに格納されているメール」から「outlookで選択されているメール」に改良したバージョンを作成したので、興味のある方は本記事の文末を参照。
  • msgファイルだけを抽出するか、添付ファイルも抽出するかを選択可能とした。
  • 抽出した msgファイルの名称は「YYYYMMDD_HHMMSS_件名.msg」となる。ここで、YYYYMMDD_HHMMSSはメールの受信日時である。
  • 添付ファイルは、「A_YYYYMMDD_HHMMSS_件名」という名称のサブフォルダの下にオリジナルのファイル名で格納される。頭の「A_」はスクリプトの15行目で定義しており変更可能である。
  • メール件名には使えるが Windowsのフォルダ名には使えない特殊記号「?:/\*"<>|」は全角文字に変換される。

 

以下、本スクリプトを使った、outlookからメール(msgファイル)と添付ファイルを抽出する手順である。

  1. 対象メールを outlookの受信フォルダ直下の「export」フォルダにコピーする。このメールフォルダ名はスクリプトの12行目で定義しており変更は可能だが、事前に決めて作成しておく必要がある。
  2. 本スクリプトをダブルクリックで実行する。
  3. 以下のダイアログが表示されるので、抽出先(格納先)フォルダを選択する。なお、ダイアログの下の「フォルダー(F):」にフルパスを直接貼り付けても良い。
    Folder_dialog


  4. 「添付ファイルを取り出しますか?」というダイアログが表示されるので「はい」「いいえ」のいずれかのボタンをクリックする。
    「いいえ」を選択した場合は msgファイルのみ、「はい」を選択した場合は msgファイルに加え添付ファイルも抽出される。なお、いずれの場合も、元が添付ファイル付きメールの場合、抽出された msgファイルを開けば添付ファイルも含まれている。
  5. outlookへのアクセス許可を求める以下のダイアログが表示されるので、「許可」を選択する。
    Outlook_acceess_permission

これで指定した抽出先フォルダに msgファイルや添付ファイルが格納される。

テストした環境は Windows7と Office2010の組合せのみなのであしからず。
スクリプト(コードはSJIS)は以下のリンクからご自由に。(右クリックして保存)
 ⇒ 改良版を作成したので原則そちらを利用していただきたい。文末の【2019年5月2日追記】参照。

「outlook2msg.vbs」をダウンロード

 

読みにくいが、内容は以下の通り。
なお、姉妹編として、メールの件名や内容の一覧をExcelに貼り付けるVBスクリプトも公開したので、興味のあある方はココへ。


Option Explicit

Dim objOA, objNS, objOLFolder, objShell, objFolder, objFSO, objItm, objAtt
Dim MyDate, MyFileName, MyFolder, MySubFolder, MyMsgPath, MyYesNo

Const olFolderInbox = 6
Const olMSG = 3
Const ErrNoOLFolder = -2147221233
Const ErrReject = -2147467260

'outlook の対象フォルダ名(受信トレイの下)
Const oLFolderName = "export"

'添付ファイル格納サブフォルダ名の接頭語
Const PreWord = "A_"

Set objOA = CreateObject("Outlook.Application")
Set objNS = objOA.GetNamespace("MAPI")

Err.clear
On Error Resume Next

Set objOLFolder = objNS.GetDefaultFolder(olFolderInbox).Folders(oLFolderName)

If (Err.Number = ErrNoOLFolder) Then
MsgBox "指定した outlook のフォルダ " & oLFolderName  & " が存在しません"
WScript.Quit
End If

On Error Goto 0

Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder( 0 , "フォルダを選択して下さい" , &h4050 , &h11)

If (objFolder Is Nothing) Then
WScript.Quit
End If

MyFolder = objFolder.Items.Item.Path
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Not(objFSO.FolderExists(MyFolder)) Then
MsgBox("存在しないフォルダが指定されました")
WScript.Quit
End If

MyYesNo = MsgBox("添付ファイルを取り出しますか?", vbYesNoCancel)
If MyYesNo = vbCancel Then
WScript.Quit
End If

For Each objItm In objOLFolder.Items

MyDate = objItm.ReceivedTime
MyDate = Replace(MyDate, "/", "")
MyDate = Replace(MyDate, ":", "")
MyDate = Replace(MyDate, " ", "_")

MyFileName = MyDate & "_" & objItm.Subject

'使用禁止文字を置換する
MyFileName = Replace(MyFileName, "?", "?")
MyFileName = Replace(MyFileName, ":", ":")
MyFileName = Replace(MyFileName, "/", "/")
MyFileName = Replace(MyFileName, "\", "¥")
MyFileName = Replace(MyFileName, "*", "*")
MyFileName = Replace(MyFileName, """", "”")
MyFileName = Replace(MyFileName, "<", "<")
MyFileName = Replace(MyFileName, ">", ">")
MyFileName = Replace(MyFileName, "|", "|")

MyMsgPath= MyFolder & "\" & MyFileName & ".msg"

Err.clear
On Error Resume Next

objItm.SaveAs MyMsgPath , olMSG

If (Err.Number = ErrReject) Then
  MsgBox "終了します"
  WScript.Quit
End If

On Error Goto 0

If (MyYesNo = vbYes) and (objItm.Attachments.count > 0) Then

  MySubFolder = MyFolder & "\" & PreWord & MyFileName

  If objFSO.FolderExists(MySubFolder) = True Then
   MsgBox "フォルダ " & MySubFolder & " は既に存在しています。"
  Else
   objFSO.CreateFolder(MySubFolder)
  End If

  For Each objAtt In objItm.Attachments
   objAtt.SaveAsFile MySubFolder & "\" & objAtt.DisplayName
  Next

End If

Next


 

【2019年5月2日追記】

以下の改良を行ったバージョンをアップしたので、興味のある方は ココへ。

  • 対象メールを「outlookの特定メールフォルダ下にあるメール」から「outlook上で選択されているメール」に変更
  • 添付ファイル抽出と同時に、元のメールの添付ファイルを削除するオプションを追加

 

| | コメント (0) | トラックバック (0)

2018年9月 8日 (土)

右クリックで更新日時を変更する方法(インストール不要)

とある理由で、会社のWindows PCでファイルの更新日時を変更する必要が生じたのだが、標準機能ではできないようだ。フリーソフトを使えばできるのだが、会社の規則でそれはNGだ。
ということで、いろいろとググって自分なりに目的を達成したので共有しておく。

一言でいうと、powershellに更新日時を変更するコマンドがあるので、それをエクスプローラ上の右クリックで呼び出すように設定するという方法である。なお、powershellは WindowsXP SP2以降には標準で搭載されている。

以下に手順を列挙する。

  1. まず最初に、「拡張子を表示しない」設定にしている人は、「拡張子を表示」などでググって、表示されるようにしておく。
  2. 以下の3行のスクリプトをメモ帳などに貼り付け、任意の場所に「更新日時変更.bat」というファイル名で格納する。
     
    • @echo off
    • set /p datime="更新日時変更(YYYY/MM/DD hh:mm:ss):"
    • powershell -NoProfile -ExecutionPolicy Unrestricted -Command "& { Set-ItemProperty \"%~1\" -Name LastWriteTime -Value \"%datime%\" }"
       
  3. エクスプローラ上部のパスが表示されるところに「shell:sendto」と入力して、sendto フォルダを表示する。
    このフォルダは、エクスプローラ上で、フォルダやファイルの右クリックメニューの「送る」を選択した時に表示されるものを格納する場所である。
  4. 2.で作成した「更新日時変更.bat」というファイルのショートカットを sendoto フォルダに移動させ、ショートカットの名称を「更新日時変更」に変更する。

これで完成である。

 

実際に使ってみる。

更新日時を変更したいファイルを選択し、右クリックメニューから「更新日時変更」を選択する。

 右クリックメニュー
 Change_datime_005

なお、メニューの中に表示されている、「copy1_フォルダ名とファイル名をコピー」「copy2_Excel用ファイル情報をコピー」「copy3_tree情報をコピー」という機能については、以前の記事「エクスプローラでファイル名をクリップボードにコピーする」で紹介したので興味のある方はどうぞ。

コマンドウィンドウが表示されるので、そこで 変更したい日時を入力する。

 2018年5月1日10時を指定した例(下線部分を入力)
 Change_datime_004

 指定通り、更新日時が変わった
 Change_datime_006

なお、作成日時を変更する場合は、手順2のスクリプトで「LastWriteTime」を「CreationTime」に変えればよい。

では。

| | コメント (0) | トラックバック (0)

2018年3月28日 (水)

無線LANルーター(親機)の性能を比較してみた

我が家のネットワーク構成は、かなり以前の記事で「我が家のマルチメディアポート」で書いたように壁内にLANケーブルを通し、有線LANのポートを各部屋に配置している。16年前に家を建てたときに既に「これからは無線LANの時代なので有線LANは無用になる」との説が流れていたが、個人的に無線LANはイマイチ信用できかった ・・・・

今ではスマホをはじめ無線LAN機器が多くなってきたので、狭い家ながら、1階に1ヶ所、2階に2ヶ所無線LAN親機を設置している。内、2階の1つはNURO光のONUである ZTE社のZXHN F660Aの付加機能なので光ファイバの引き込み口(廊下)に設置しており、他の2つは、11ac対応としては安価な Buffalo WHR-1166DHP と IOデータ WN-AC1167GR を、1, 2階の部屋の有線LANポートに接続しAP(アクセスポイント)モードで動作させている。

今現在でも、「有線LAN+各部屋に安価な無線LAN親機設置」は最適な方法と思っているが、一方で、無線LANの規格も機器性能もどんどん進化しており、理系人間としては気になる存在である。

ということで、いくつかの無線LAN親機を手に入れて比較実験をしてみたので、その結果を報告する。

比較したのは以下の機種で、全て 11ac対応である。アンテナ数はメーカにより表記が異なるので、基本的にメーカーサイトの表記に従った。

【測定日】
 2018年 1月某日

【テストした無線LAN親機】
 1~6は同時ではなく、同じ環境に順次繋ぎ変えて測定した。

  1. Buffalo WHR-1166DHP
    866+300bps、発売年:2014年、アンテナ数:内部 2
  2. IOデータ WN-AC1167GR
    867+300Mbps、発売年:2014年、アンテナ数:内部 2.4G 2、5G 2
  3. エレコム WRC-1900GHBK-S
    1300+600Mbps、発売年:2016年、アンテナ数:内部 8、2.4G 3×4、5G 3×4
  4. Buffalo WSR-2533DHP
    1733+800Mbps、発売年:2016年、アンテナ数:内部 4
  5. Buffalo WXR-1900DHP3
    1300+600Mbps、発売年:2017年、アンテナ数:外付 3
  6. ASUS RT-AC65U
    1300+600Mbps、発売年:2017年、アンテナ数:内部 3
  7. ZTE ZXHN F660A
    1300+450Mbps、発売年:2015年、アンテナ数:内部 3×3
    ※F660Aは市販品ではなく、設置場所も他と異なるので参考値として記載

 Wifi_005

【子機】
 ASUS Zenfone3(ZE520KL、アンテナ数 2)

【テスト環境】
 自宅:木造2階建て 1階床上に親機、斜め上の2階の部屋の机上に子機
 外部アンテナは2階方向に向けたつもり

 ネットワークの構成は以下
  親機(APモード)-Gigaハブ-Gigaハブ-ONU(ZXHN F660A)-光ファイバ

【使用チャンネル】条件を揃えるため以下に固定
 2.4G チャンネル3 帯域40MHZ
 5G チャンネル40 帯域80MHZ

【測定サイト】
 speedtest
 現在 新しいサイトが立ち上がっているが、測定した時は上記旧バージョン
 使用サーバ:Tokyo OPEN project

【測定結果】各組合せで最低2回以上測定し平均値を記載

 2.4G
 Wifi_24g_001

 

 5G
 
Wifi_5g_002

 

結果はグラフ通りである。簡単にまとめると以下となる。

  1. 5Gでは上位機種(No4~6)と下位機種(No1, 2)では実力差が見られたが、上位、下位内での機種間には大きな差は見られなかった
  2. 2.4Gでは、アップロードは全機種同レベルであったが、ダウンロードではNo3(WRC-1900GHBK-S)は低調、逆にNo2(WN-AC1167GR)は健闘していた

 
別の日に、一部の機種だけを対象に、親機を2階の子機の隣の部屋に置いて測定したのが下のグラフであるが(親機子機間の直線距離は前回の1/4程度)、おおよその傾向としては上と同じだが、上位下位機種間の差は前回ほど顕著に現れなかった。

 2.4G
 Wifi_24g_003

  5G
 Wifi_5g_004

最後に
今回の測定結果は、あくまでもある1つの条件下で測定した結果であり、測定環境、子機の機種、親機の個体差など様々な要因で変わると思われるので、1つの参考値として見ていただきたい。

では。

| | コメント (0) | トラックバック (0)

より以前の記事一覧