Excel 内に 2 つのセルがあり、カンマで区切られた数字の文字列が含まれています。セル 1 には存在するがセル 2 には存在しない数字を見つける必要があります。これを行う効率的な方法は?
セル 1: 360,370,400,420 セル 2: 400,420
答え: 360,370
これを行うカスタム関数を作成できます。通常のコード モジュールに配置すると、次のようにワークシートでこれを呼び出すことができます。
=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