エディタの設定についてです。Excel でコピーすると、データはいくつかの異なる形式で Windows クリップボードに入れられます。これらの形式の 1 つはプレーン テキストで、もう 1 つは HTML であり、そのうちの 2 つはおそらく独自のバイナリ形式です。
別のアプリケーションに貼り付けると、必要な形式が優先されます。エディタは最初に HTML を探すかもしれません。HTML 形式があれば、それを取得します。コピーされたデータを Windows クリップボードで HTML として表現できない場合、エディターはリストの 2 番目の形式 (おそらくプレーン テキスト) に移動する可能性があります。
Excel テーブルを HTML に変換する方法を制御したい場合は、自分で行う必要があります。このコードは、Excel の範囲を html テーブルに変換します。
Sub CopyRangeToHtmlTable()
Dim doClip As MSForms.DataObject
Dim vaTable As Variant
Dim i As Long, j As Long
Dim aTable() As String
Dim aRow() As String
'Read range into array
vaTable = Sheet1.Range("A1:B4").Value
'set up array to hold all of the rows
ReDim aTable(1 To UBound(vaTable, 1))
'loop through the rows
For i = LBound(vaTable, 1) To UBound(vaTable, 1)
'set up array to hold all of the tds
ReDim aRow(1 To UBound(vaTable, 2))
'loop through the tds
For j = LBound(vaTable, 2) To UBound(vaTable, 2)
aRow(j) = Tag(vaTable(i, j), "td")
Next j
'add the row to the table array
aTable(i) = Tag(Join(aRow, vbNullString), "tr")
Next i
'put the table into the clipboard
Set doClip = New MSForms.DataObject
doClip.SetText Tag(Join(aTable, vbNewLine), "table", , True)
doClip.PutInClipboard
End Sub
Public Function Tag(ByVal sValue As String, _
ByVal sTag As String, _
Optional sAttr As String = "", _
Optional bIndent As Boolean = False) As String
Dim sReturn As String
If Len(sAttr) > 0 Then
sAttr = Space(1) & sAttr
End If
If bIndent Then
sValue = vbTab & Replace(sValue, vbNewLine, vbNewLine & vbTab)
sReturn = "<" & sTag & sAttr & ">" & vbNewLine & sValue & vbNewLine & "</" & sTag & ">"
Else
sReturn = "<" & sTag & sAttr & ">" & sValue & "</" & sTag & ">"
End If
Tag = sReturn
End Function
メモ帳に貼り付けると、次のようになります
<table>
<tr><td>Name</td><td>Number</td></tr>
<tr><td>Tom</td><td>1</td></tr>
<tr><td>Dick</td><td>2</td></tr>
<tr><td>Harry</td><td>3</td></tr>
</table>