まりふのひと

Outlook2013のアドレス帳をThunderbirdに移す

 Outlook2013のアドレス帳をThunderbirdに移す件でググったら、ジャストのサイトが見つかった。

n2−1.Outlook からエクスポート(取り出し)
  1. まず、Outlook 左上のタブ「ファイル」をクリックします。
  2. 左側の「オプション」をクリックします。
  3. 左側の「詳細設定」をクリックします。
  4. 「エクスポート」をクリックします。
  5. 「ファイルにエクスポート」を選択し、「次へ」をクリックします。
  6. 「テキストファイル(Windows、カンマ区切り)」を選択し、「次へ」をクリックします。
  7. そして、移行したいアドレス帳のフォルダを選択し、「次へ」をクリックします。
    • 一度に1フォルダしかエクスポートできないため、このように複数のアドレス帳フォルダを作成している場合は、本項の作業を繰り返して一つずつエクスポートします。
  8. 「参照」をクリックし、
    • 保存先を聞かれるので、デスクトップなど自分のわかりやすい場所を選択し、わかりやすい名前(ここでは「Outlook アドレス帳」としました)を入力し、「OK」をクリックします。
    • そして、「次へ」をクリックします。
  9. 「完了」をクリックします。
  10. これで、Outlook のアドレス帳のデータをエクスポートできました。



n2−2.Thunderbird にインポート(取り込み)

 前項でエクスポートしたファイルをThunderbird にインポートしましょう。

  1. まず、Thunderbird のメイン画面で、「ツール」→「設定とデータのインポート」をクリックします。
  2. 表示されたウィンドウで、「アドレス帳」を選択し、「次へ」をクリックします。
  3. 「テキストファイル」を選択し、「次へ」をクリックします。
  4. ファイル選択画面が開くので、ファイルの種類を「カンマ区切り(*.csv)」に設定し、先ほどOutlookからエクスポートしたCSVファイルを選択し、「開く」をクリックします。
  5. エクスポート元(Outlook)のアドレス帳の項目と、Thunderbird のアドレス帳の項目が違う場合があるので、ここで項目合わせをします。
    • 右側がエクスポート元(Outlook)の項目で、左側が Thunderbird の項目です。
    • 一致している場合がほとんどですが、もし一致しない項目があれば、右側の「上へ」「下へ」のボタンで項目を移動させて一致させて、「OK」をクリックします。
    • ここでチェックを外した項目はインポートされないので、インポート不要な項目がある場合はチェックを外します。
  6. すると、インポート完了の画面が表示されるので、「完了」で閉じます。
  7. ちゃんとインポートされているか確認のために、アドレス帳を開くと、エクスポート時のCSVファイル名がそのままフォルダ名(今回は「アドレス帳」)となって追加されています。


 エクスポート元の Outlookで、アドレス帳をフォルダ分けしていた場合は、フォルダごとにCSVファイルとしてエクスポートし、フォルダごとに一つ一つ Thunderbird にインポートしてください。

  1. CSVで移行」なので、難しいことはない‥‥
  2. 更に、項目の対応で「一致している場合がほとんどです」とあったので、楽勝‥‥

と思ったが、意外に手こずった。その理由は、アドレス帳の項目の対応で一致していない‥‥
Outlookのバージョンの違いもあろうが、マイクロソフト社は「簡単に移行させない」と暗に仕組んでいるのではないか...性悪説
 そこで、ThunderbirdとOutlook2013のcsvファイルの項目を羅列(ここを参照)した。

今日の結論

  1. 空データの列を削除するEcelマクロの作成(後述
    • Outlook2013のcsvファイル、あまりに項目数が多い。実際に使っている項目は10%程度。
       必要最低限の項目に絞った方が効率よく移行できるはず‥‥ と言う観点から作成した。
  2. 移行の方法は synclogue naviさんのサイトどおりで、全く問題無かった。



ThunderbirdとOutlook2013のCSVファイル出力時の項目

 「入力」は私が、Thunderbirdで、○:必ず入力している項目 △:必要に応じ入力している項目

T-No Thunderbird 入力 O-No Outlook2013
1 1 肩書き
2 2
3 表示名 3 ミドル ネーム
4 ニックネーム   4
5 メールアドレス 5 敬称
6 別のメールアドレス   6 会社名
7 スクリーンネーム   7 部署
8 勤務先の電話番号   8 役職
9 自宅の電話番号 9 番地 (会社)
10 FAX 番号 10 住所 2 (会社)
11 ポケットベル番号   11 住所 3 (会社)
12 携帯電話番号 12 市町村 (会社)
13 番地 (自宅) 13 都道府県 (会社)
14 番地 (自宅) 2   14 郵便番号 (会社)
15 市区町村 (自宅) 15 国 (会社)/地域
16 都道府県 (自宅) 16 番地 (自宅)
17 郵便番号 (自宅) 17 住所 2 (自宅)
18 国 (自宅)   18 住所 3 (自宅)
19 番地 (勤務先)   19 市町村 (自宅)
20 番地 (勤務先) 2   20 都道府県 (自宅)
21 市区町村 (勤務先)   21 郵便番号 (自宅)
22 都道府県 (勤務先)   22 国 (自宅)/地域
23 郵便番号 (勤務先)   23 番地 (その他)
24 国 (勤務先)   24 住所 2 (その他)
25 役職   25 住所 3 (その他)
26 部門   26 市町村 (その他)
27 組織   27 都道府県 (その他)
28 Web ページ 1   28 郵便番号 (その他)
29 Web ページ 2   29 国 (その他)/地域
30 誕生年   30 秘書の電話
31 誕生月   31 会社 FAX
32 誕生日   32 会社電話
33 追加情報 1   33 会社電話 2
34 追加情報 2   34 コールバック
35 追加情報 3   35 自動車電話
36 追加情報 4   36 会社代表電話
37 メモ 37 自宅 FAX
      38 自宅電話
      39 自宅電話 2
      40 ISDN
      41 携帯電話
      42 その他の FAX
      43 その他の電話
      44 ポケットベル
      45 通常の電話
      46 無線電話
      47 TTY/TDD
      48 テレックス
      49 ID 番号
      50 Web ページ
      51 アカウント
      52 イニシャル
      53 インターネット空き時間情報
      54 キーワード
      55 その他住所私書箱
      56 ディレクトリ サーバー
      57 プライベート
      58 マネージャー
      59 メモ
      60 ユーザー 1
      61 ユーザー 2
      62 ユーザー 3
      63 ユーザー 4
      64 会社 ID
      65 会社住所私書箱
      66 会社名フリガナ
      67 記念日
      68 経費情報
      69 言語
      70 参照事項
      71 子供
      72 支払い条件
      73 事業所
      74 自宅住所私書箱
      75 趣味
      76 場所
      77 職業
      78 姓フリガナ
      79 性別
      80 誕生日
      81 電子メール アドレス
      82 電子メールの種類
      83 電子メール表示名
      84 電子メール 2 アドレス
      85 電子メール 2 の種類
      86 電子メール 2 表示名
      87 電子メール 3 アドレス
      88 電子メール 3 の種類
      89 電子メール 3 表示名
      90 配偶者
      91 秘書の氏名
      92 秘密度
      93 分類
      94 名前フリガナ
      95 優先度
  1. アドレス帳の項目は、Thunderbird 37項目に対し、Outlook2013は95項目。
    • これは吉か凶か‥‥ は、使う人次第。
    • 一般的には「項目が多い=重い」につながるであろう。
  2. 個人的には「シンプル is ベスト」を盲信している。
    • 個人的には「アドレス帳」は、メール、、、のアドレス帳の機能のみ保持していれば良いのではないか‥‥ と思う。


リスト形式で空データの列を削除するExcel VBAのコード
    1. まりふのひとの「公開」OneDrive ⇒ ZipLib と進み、
    2. マクロ集v0004a.zip を開く。
    3. マクロ集.xlsm の sub「リスト形式で空データ列を削除する」
  1. Public Sub リスト形式で空データ列を削除する()
  2. Dim mbTitle As String
  3. Dim isAll As Boolean   'True:全て同じデータの列も削除する。
  4. Dim isKakunin As Boolean
  5. Dim isMatch As Boolean
  6. Dim c As Long, r As Long
  7. Dim lastCol As Long, lastRow As Long
  8. Dim firstString As String
  9.  
  10. Call Auto_Open
  11. mbTitle = "リスト形式で空データ列を削除する/" & MBVersion
  12. LNGAns = MsgBox("リスト形式前提で、空データの列を削除します。" & vbCrLf & vbCrLf _
  13. & " ■リスト形式(1行目が項目名)が大前提です。" & vbCrLf & vbCrLf _
  14. & " ■[はい]:空データの時は列削除する。" & vbCrLf _
  15. & " ■[いいえ]:全て同じデータの列も削除する。" & vbCrLf _
  16. & " ■[キャンセル]:処理を中断する。" _
  17. , vbYesNoCancel + vbQuestion, mbTitle)
  18. If LNGAns = vbCancel Then Exit Sub
  19. If LNGAns = vbNo Then isAll = True Else isAll = False
  20.  
  21. 'まず空データ時、列削除する。
  22. lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
  23. For c = lastCol To 1 Step -1
  24. LNGAns = Cells(Rows.Count, c).End(xlUp).Row
  25. If LNGAns = 1 Then Columns(c).Delete
  26. Next
  27. If isAll = False Then Exit Sub
  28.  
  29. '全て同じデータ時、列削除する。
  30. lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
  31. Cells(1, lastCol).Select
  32. LNGAns = MsgBox("空データ時の列削除が終わりました。" & vbCrLf _
  33. & "引き続き、全て同じデータの列を削除します。" & vbCrLf & vbCrLf _
  34. & " ■[はい]:列毎に 削除する/しない を確認する。" & vbCrLf _
  35. & " ■[いいえ]:一括 削除する。" & vbCrLf _
  36. & " ■[キャンセル]:中止する。" & vbCrLf _
  37. , vbYesNoCancel + vbQuestion, mbTitle)
  38. If LNGAns = vbCancel Then Exit Sub
  39.  
  40. If LNGAns = vbYes Then isKakunin = True Else isKakunin = False
  41. 'Ctrl+Shift+* で最終行を取得する。
  42. Range("A1").SpecialCells(xlLastCell).Select
  43. lastRow = ActiveCell.Row
  44. For c = lastCol To 1 Step -1
  45. Cells(1, c).Select
  46. firstString = Cells(2, c)
  47. isMatch = True
  48. For r = 3 To lastRow
  49. If Cells(r, c) <> firstString Then
  50. isMatch = False
  51. Exit For
  52. End If
  53. Next
  54. If isMatch Then
  55. If isKakunin Then
  56. Columns(c).Select
  57. If MsgBox("選択されている列を削除します。", vbOKCancel, mbTitle) = vbOK Then Columns(c).Delete
  58. Else
  59. Columns(c).Delete
  60. End If
  61. End If
  62. Next
  63.  
  64. End Sub
  • 10. Auto_Open はこんな感じ。
    1. Public Sub Auto_Open()
    2. Windows(ThisWorkbook.Name).ActivateNext
    3. STRAns = ThisWorkbook.Name
    4. MBVersion = Left(STRAns, InStrRev(STRAns, ".") - 1) _
    5. & " ver." & ThisWorkbook.Sheets("更新履歴").Range("A4")
    6. End Sub
  • 11.MBVersion は、その上の Auto_Open で作っており、機能上は不要。