VBAのタブ区切り値の解析
-
06-07-2019 - |
質問
Excelからコピーされたクリップボードデータ(タブ区切りテキスト)を取得して、辞書のコレクションに解析しようとしています。アイデアは、各行が、ヘッダーからセル値にマップするディクショナリによって表されるということです。コピーされたデータの最初の行にはヘッダーが含まれます。
クリップボードからテキストを取得するのは簡単です:
Dim dataObj As DataObject
Dim clipString As String
Set dataObj = New DataObject
dataObj.GetFromClipboard
clipString = dataObj.GetText
次に、入力を行に分割します:
Dim strRows As Variant
strRows = Split(clipString, vbNewLine)
次に、ヘッダーの抽出を試みます。
Dim headers As New Collection
Dim strCols As Variant
strCols = Split(strRows(0), vbTab)
For col = LBound(strCols) To UBound(strCols) - 1
headers.Add strCols(col)
Next
最後に行を抽出します:
Dim cells
Dim rows As New Collection
For i = 1 To UBound(strRows) - 1
strCols = Split(strRows(0), vbTab)
Set cells = CreateObject("Scripting.Dictionary")
For col = 0 To UBound(strCols) - 1
cells.Add headers.Item(col + 1), strCols(col)
Next
rows.Add cells
Next
ただし、エラーが発生します。行上
headers.Add strCols(col), col
Accessが実行時エラー「12」で戻ります:タイプが一致しません。
更新は上記の問題を修正しました。提案に感謝します。行にエラーが表示されています
Set cells = CreateObject(Scripting.Dictionary)
424:オブジェクトが必要です。
私が何が間違っているかについてのヒント-VBAは本当に私の得意ではありません。
Update 2 もこの問題を修正しました(以下の提案に感謝します)。コードが機能するようになりました。
解決
2番目の問題-ターゲットクラスの文字列名を指定する必要があるため、実際にはそれが
Set cells = CreateObject("Scripting.Dictionary")
他のヒント
colは文字列型である必要があると思います。
headers.strCols(col)、cstr(col)を追加
所属していません StackOverflow