#LSetできること
LSetステートメントの基本的な使い方は固定長の文字列変数に左詰めで文字列をセットすることです。…が実はLSetを使うとユーザー定義型の変数に別のユーザー定義型の値を代入することができます。実際公式ドキュメントには以下のような記述があります。(推奨はされていません。)
ユーザー定義型の変数を別の変数にコピーする場合、要素に指定されているデータ型は考慮されず、一方の変数のバイナリ データがもう一方の変数のメモリ領域にコピーされます。
例えばVBAのDouble型のサイズは8バイトで内部的にはIEEE754という規格に基づいているようなので,3.1415という浮動小数点数を表すバイナリデータは
$${\rm 40, 09, 21, CA, C0, 83, 12, 6F}$$
になります。バイトオーダーはリトルエンディアンなので内部的にはこの8バイトを右から順に並んでいることになります。
一方,固定長配列は連続したメモリ領域にその要素が配置されるので上記の8バイトのデータを右から入れた長さ8のByteの配列を考えると,これはバイナリデータとしてみれば3.1415と同じ内部表現を持っているはずです。
したがって,公式ドキュメントによれば,上記のバイトの配列を要素に持つユーザ定義型をDoubleを要素にもつユーザ定義型にLSetで代入すれば,後者のDoubleには3.1415が入ることになります。自由度は劣りますがWIN32 APIのRtlMoveMemoryみたいなことができるわけですね。
#実験用コード
Option Explicit
Public Type AType
value As Double
End Type
Public Type BType
value(7) As Byte
End Type
Public Sub test()
Dim a As AType
Dim b As BType
b.value(0) = &H6F
b.value(1) = &H12
b.value(2) = &H83
b.value(3) = &HC0
b.value(4) = &HCA
b.value(5) = &H21
b.value(6) = &H9
b.value(7) = &H40
LSet a = b
Debug.Print a.value '3.1415
End Sub