連絡先データをエクスポートすると「.vcf(vCard)」形式で保存されることがよくありますが、Excelなどで編集・管理したい場合は「.csv」形式に変換したほうが便利です。
手作業で変換するのは面倒ですが、PowerShellを使えば一括で変換が可能です。
この記事では、PowerShellを使って.vcfファイルを.csvファイルに変換する方法をわかりやすく解説します。
スクリプト例やエラー対処法も紹介するので、技術初心者の方でも安心して実践できます。
PowerShellで.vcfファイルを.csvに変換する目的
vCard(.vcf)形式は、スマートフォンやメールソフト(Outlook、Thunderbirdなど)でよく使われる連絡先データの標準形式です。
しかし、複数の連絡先をまとめて確認したり編集したりするには不便なことがあります。
一方で、CSV形式はExcelやGoogleスプレッドシートなどで扱いやすく、企業のアドレス帳や顧客管理にも向いています。
PowerShellを使えば、VCFファイルの中にある「名前」「電話番号」「メールアドレス」などの情報をCSVに自動変換できます。
手作業で1件ずつコピーペーストする必要がなく、数百件単位のデータでも一括処理が可能です。
VCFファイルの中身を理解しよう
変換を行う前に、まずVCFファイルの構造を知っておくとスクリプトが理解しやすくなります。
VCFファイルはテキスト形式で保存されており、以下のような構造になっています。
BEGIN:VCARD
VERSION:3.0
FN:山田 太郎
TEL;TYPE=CELL:090-1234-5678
EMAIL:taro@example.com
END:VCARD
この中で重要なのは以下の項目です。
- FN:フルネーム(Full Name)
- TEL:電話番号
- EMAIL:メールアドレス
この情報を抜き出してCSVの列(Name, Phone, Emailなど)に整理するのが今回の目的です。
PowerShellでVCF→CSV変換の基本スクリプト
以下は、PowerShellを使ってVCFファイルをCSV形式に変換する基本的なスクリプト例です。
# 変換元と出力先のパスを指定
$vcfPath = "C:\Users\Public\contacts.vcf"
$outputCsv = "C:\Users\Public\contacts.csv"
# VCFファイルを1行ずつ読み込み
$vcfContent = Get-Content $vcfPath
# 結果を格納する配列
$result = @()
$contact = @{}
foreach ($line in $vcfContent) {
if ($line -match "^FN:(.+)$") {
$contact["Name"] = $Matches[1]
}
elseif ($line -match "^TEL.*:(.+)$") {
$contact["Phone"] = $Matches[1]
}
elseif ($line -match "^EMAIL.*:(.+)$") {
$contact["Email"] = $Matches[1]
}
elseif ($line -eq "END:VCARD") {
$result += New-Object PSObject -Property $contact
$contact = @{}
}
}
# CSVに出力
$result | Export-Csv -Path $outputCsv -NoTypeInformation -Encoding UTF8
Write-Host "変換が完了しました。出力先: $outputCsv"
スクリプトのポイント
Get-Content:テキストファイルを1行ずつ読み込む-match:正規表現で行を判定し、値を抽出Export-Csv:結果をCSV形式で保存
このスクリプトをPowerShellで実行すれば、同じフォルダ内に「contacts.csv」が作成され、Excelで開くことができます。
フォルダ内の複数VCFをまとめて変換する方法
複数のVCFファイルを1つのCSVにまとめたい場合は、フォルダを指定してループ処理を追加します。
$folderPath = "C:\Users\Public\VCF"
$outputCsv = "C:\Users\Public\AllContacts.csv"
$result = @()
# 指定フォルダ内の全VCFファイルを取得
$files = Get-ChildItem -Path $folderPath -Filter "*.vcf"
foreach ($file in $files) {
$vcfContent = Get-Content $file.FullName
$contact = @{}
foreach ($line in $vcfContent) {
if ($line -match "^FN:(.+)$") {
$contact["Name"] = $Matches[1]
}
elseif ($line -match "^TEL.*:(.+)$") {
$contact["Phone"] = $Matches[1]
}
elseif ($line -match "^EMAIL.*:(.+)$") {
$contact["Email"] = $Matches[1]
}
elseif ($line -eq "END:VCARD") {
$result += New-Object PSObject -Property $contact
$contact = @{}
}
}
}
$result | Export-Csv -Path $outputCsv -NoTypeInformation -Encoding UTF8
Write-Host "全VCFファイルを統合してCSVに変換しました。"
このスクリプトを使うと、指定フォルダ内の全てのVCFを自動的に読み込み、1つのCSVにまとめて出力します。
多数のファイルを扱う場合に非常に便利です。
CSV出力時に文字化けを防ぐコツ
VCFファイルの文字コードが「UTF-8」以外の場合、CSVに変換したときに文字化けすることがあります。
特に日本語の名前が含まれる場合は注意が必要です。
対処法1:UTF-8で再保存
VCFファイルをメモ帳で開き、「名前を付けて保存」からエンコードを「UTF-8」に変更して保存します。
対処法2:PowerShellで変換
PowerShell内で読み込む際に、-Encodingオプションを使うことで自動変換も可能です。
$vcfContent = Get-Content $vcfPath -Encoding UTF8
もしUTF8でうまくいかない場合は、DefaultやUnicodeを試してみるとよいでしょう。
CSVをExcelで開くときの注意点
生成したCSVファイルをExcelで開く際、文字化けや改行崩れが起きる場合があります。
その場合は、次の方法で正しく読み込めます。
- Excelを開いて「データ」タブを選択
- 「テキストまたはCSVから」をクリック
- 文字コードを「UTF-8」に設定してインポート
これで日本語を含む名前も正しく表示されます。
スクリプトを再利用しやすくする工夫
この変換スクリプトを頻繁に使う場合は、再利用しやすいように.ps1ファイルとして保存しておくと便利です。
- メモ帳を開き、上記スクリプトを貼り付ける
- 「VCFtoCSV.ps1」として保存
- PowerShellで次のように実行
.\VCFtoCSV.ps1
また、ファイル選択を自動化するGUIバージョンにしたり、出力ファイル名を日付入りに変更するなど、応用も可能です。
よくあるエラーとその対処法
エラー1:「スクリプトの実行が無効になっています」
PowerShellではセキュリティ上の理由から、スクリプト実行が制限されている場合があります。
その場合は次のコマンドで一時的に許可します。
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
エラー2:「正しく出力されない・一部のデータが欠けている」
VCFのフォーマットが複数行に分かれている場合があります。
たとえば「TEL」や「EMAIL」が改行されている場合は、Join-Stringで結合して処理する工夫が必要です。
応用:CSVをOutlookやExcelで再利用する
出力したCSVファイルは、以下のような形で再利用できます。
- Excelで編集・管理:連絡先リストを並べ替えたり、重複削除したりできる。
- Outlookへのインポート:「ファイル → 開く → インポート」でCSVを選択すれば連絡先を登録可能。
- Googleコンタクトへのインポート:CSV形式で一括追加ができる。
これにより、異なるプラットフォーム間でもスムーズにデータを移行できます。
まとめ
PowerShellを使えば、VCFファイルをCSV形式に簡単に変換できます。
特に大量の連絡先データを扱う場合、手作業よりも圧倒的に効率的です。
ポイントまとめ:
- VCFは「BEGIN:VCARD」~「END:VCARD」で囲まれた構造
- PowerShellで正規表現を使えば必要な項目を抽出できる
Export-CsvコマンドでExcelで扱いやすい形式に出力できる- 複数ファイルもフォルダ単位で一括処理可能
今後、社内の連絡先管理や顧客リスト作成を効率化したい方は、ぜひこのPowerShellスクリプトを活用してみてください。
