1

我创建了一个表来包含/排除较大数据集中的不同值。该表是用脚本字典制作的。

数据集可以包含数值作为参数,应将其视为文本值。
示例:“05”和“5”应被视为两个不同的值。

脚本字典将这两个值保存为两个不同的值,但是当我对键使用 Application.Transpose 代码时,键被视为一个值(“5”)。

有没有办法将键粘贴为两个不同的值?
我试图'在相关数据前添加一个单引号 ( ),但这并没有出现在键中。

If Not aCell Is Nothing Then
    Dim d As Object, c As Variant, j As Long, lr As Long
    Set d = CreateObject("Scripting.Dictionary")
    Worksheets("DATASET").Activate
    lr = Cells(Rows.Count, aCell.Column).End(xlUp).Row
    c = Range(Cells(1, aCell.Column).Address(), Cells(lr, aCell.Column).Address())
    For j = 1 To UBound(c, 1)
        d(c(j, 1)) = 1
    Next j

    Targetrange.Resize(d.Count) = Application.Transpose(d.keys)
End If
4

2 回答 2

1
Option Explicit

Sub macro1()
    Dim ws As Worksheet, aCell As Range, TargetRange As Range
    Dim ar As Variant, lr As Long, j As Long, c As Integer
    
    Dim d As Object, key As String
    Set d = CreateObject("Scripting.Dictionary")

    Set ws = Worksheets("DATASET")
    With ws
        Set aCell = .Range("A1") ' change
        c = aCell.Column
        lr = .Cells(Rows.Count, c).End(xlUp).Row
        ar = .Cells(1, c).Resize(lr).Value2
    End With

    For j = 1 To UBound(ar)
        key = Trim(ar(j, 1))
        If Len(key) > 0 Then
            d(key) = 1
        End If
    Next

    Set TargetRange = Sheet2.Range("A1") ' change
    With TargetRange.Resize(d.Count)
        .NumberFormat = "@" ' text
        .Value2 = Application.Transpose(d.keys)
    End With
    MsgBox d.Count & " keys in d"

End Sub
于 2021-07-02T10:34:07.493 回答
0

如果您Targetrange有数字格式General,它会将字符串05视为数字并将其转换为5.

因此,在添加值之前将数字格式更改为文本:

Targetrange.NumberFormat = "@"
Targetrange.Resize(d.Count) = Application.Transpose(d.keys)

'在每个条目之前在字典中添加一个:

d("'" & c(j, 1)) = 1

题外话:

Range()方法可以获取单元格并且不需要地址,因此您可以从中.Address()删除

Range(Cells(1, aCell.Column).Address(), Cells(lr, aCell.Column).Address())

然后写

 Range(Cells(1, aCell.Column), Cells(lr, aCell.Column))

甚至更短:

 Cells(1, aCell.Column).Resize(RowSize:=lr)

如果它不是按行开始1而是按行开始,n那么它是

 Cells(n, aCell.Column).Resize(RowSize:=lr - (n - 1))
于 2021-07-02T10:02:59.900 回答