PDFファイル内の内容をコピペでExcelシートに貼り付けた場合、改行だらけで読みづらいことがよくある。

私が最近やってみたものとしては
 http://www.meti.go.jp/policy/netsecurity/downloadfiles/IS_Audit_Annex01.pdf
 (情報セキュリティ管理基準)
である。これをExcelのシートに貼ろうがテキストエディタに貼ろうが

  2.1.4 個々の資産の保護に対する責任及び特定のセキュリティ手続の実施に対す
  る責任を、明確に定めること
  2.1.4.1 情報セキュリティ基本方針には、組織内のセキュリティの役割及び責
  任の割当てに関する全般的な手引を規定すること
  2.1.4.2 情報セキュリティ基本方針に、個別のサイト、システム又はサービス
  に関するより詳細な手引を追加すること

  てな具合に改行される。

  2.1.4 個々の資産の保護に対する責任及び特定のセキュリティ手続の実施に対する責任を、明確に定めること
  2.1.4.1 情報セキュリティ基本方針には、組織内のセキュリティの役割及び責任の割当てに関する全般的な手引を規定すること
  2.1.4.2 情報セキュリティ基本方針に、個別のサイト、システム又はサービスに関するより詳細な手引を追加すること

  てな具合にしたい。まあ、ここはVBAのブログなので、VBAでちょっと対策を練ってみよう。

  こんなとき、「ひとつ上の行と内容を結合し、自行は削除する」という処理をツールバーに登録しておけば役立つ。

  プログラムコードはこんな感じ。コメントがずれているのはご容赦願います。

'----------------------------------------------------------------------
' MargeUpper
' ひとつ上のセルとマージし、元のセルの行を削除する
'----------------------------------------------------------------------
Sub MargeUpper()
'
Dim lRow As Long
Dim iCol As Integer
Dim sWk As String

With ActiveCell '現在アクティブなセルに対して
sWk = Trim(.Value) '前後のスペースを削除 ⇒ sWk
lRow = .Row  'アクティブなセルの行位置 ⇒ lRow
iCol = .Column 'アクティブなセルの桁位置 ⇒ iCol
End With

If lRow = 1 Then 'lRow = 1 なら終了
Exit Sub
End If

If Len(Trim(Cells(lRow - 1, iCol).Value)) = 0 Then '一行上のセルに値がないなら終了
Exit Sub
End If

Cells(lRow - 1, iCol).Value = Cells(lRow - 1, iCol).Value & sWk   '一行上のセルに、sWk を結合
Cells(lRow, iCol).Value = "" '自セル内をクリア

Rows(lRow).Delete shift:=xlUp '自行を削除

End Sub


  途中にページやら入っているし、行数も多いので、もっと自動化した方がいいだろう。しかし、この部分は他にも応用できるのではないかと思う。

  注意点としては、VBAの実行結果はやり直しでは戻らないということ。消えるとまずい/思惑通りに動かない場合に備えてシートのコピーなりバックアップを確保しておくことをおすすめする。