1

Excel 内に 2 つのセルがあり、カンマで区切られた数字の文字列が含まれています。セル 1 には存在するがセル 2 には存在しない数字を見つける必要があります。これを行う効率的な方法は?

セル 1: 360,370,400,420 セル 2: 400,420

答え: 360,370

4

1 に答える 1

4

これを行うカスタム関数を作成できます。通常のコード モジュールに配置すると、次のようにワークシートでこれを呼び出すことができます。

=GetUniques(A1,B1)一意の値を返す必要があります。

Function GetUniques(ByVal cell1 As Range, ByVal cell2 As Range, Optional reverse As Boolean = False) As Variant
'compares text strings of delimited numbers in two separate excel cells
' returns unique values from cell1 by default
' to return results from cell2 instead, use optional reverse=True
    Dim v As Variant
    Dim varValues As Variant
    Dim result As String

    If cell1.Cells.Count > 1 Or cell2.Cells.Count > 1 Then
        GetUniques = CVErr(xlErrRef)
        GoTo EarlyExit
    End If

    varValues = Split(cell1.Value, ",")
    For Each v In varValues
        v = Trim(v)
        If Not reverse Then
            If InStr(1, cell2.Value, v) = 0 Then
               result = IIf(result = vbNullString, v, result & "," & v)
            End If
        Else:
            If InStr(1, cell2.Value, v) > 0 Then
               result = IIf(result = vbNullString, v, result & "," & v)
            End If
        End If
    Next

    If Len(result) = 0 Then result = "No matches"
    GetUniques = result
EarlyExit:

End Function

注:これは、セルにテキスト形式の数値が含まれていることを前提としています。それ以外の場合は、ユーザーのローカルに応じて、400,420実際のような値はFour-hundred thousand four-hundred & twenty

アップデート

単純な関数でも、テキストから列への変換を行うことができます。1 つのセルを選択し、このマクロを実行します。これにより、宛先セルに既にデータがある場合、(警告なしに) データが上書きされる可能性があります。

Sub SplitTextToColumns()
If Selection Is Nothing Then Exit Sub
Dim cl As Range
Dim varValues As Variant
Dim i As Long

Set cl = Selection.Cells(1)
varValues = Split(cl, ",")
If  UBound(varValues) < 0 Then Exit Sub
cl.Resize(1, UBound(varValues) + 1).Value = varValues

End Sub
于 2013-09-19T15:53:33.523 に答える