Excel 在不同的列中复制以“奇偶”分隔的内容:&引用;

Excel 在不同的列中复制以“奇偶”分隔的内容:&引用;,excel,vba,Excel,Vba,我有以下代码:A106:A107:A110:A111:A112:A113:A118:A119 我想在两个不同的栏目中得到答案:偶数和奇数 示例:A106:A110:A112:A118和A107:A111:A113:A119 有谁能告诉我如何自动执行此操作吗?尝试此VBA功能: Public Function ExtractOdds(Data As String, Delimiter As String, IsOdd As Boolean) As String Dim Elements()

我有以下代码:A106:A107:A110:A111:A112:A113:A118:A119

我想在两个不同的栏目中得到答案:偶数奇数

示例:A106:A110:A112:A118A107:A111:A113:A119

有谁能告诉我如何自动执行此操作吗?

尝试此VBA功能:

Public Function ExtractOdds(Data As String, Delimiter As String, IsOdd As Boolean) As String
    Dim Elements() As String
    Dim Result As String

    Elements = Split(Data, Delimiter)

    For Each Item In Elements
        If Right(Item, 1) Mod 2 = -IsOdd Then
            If Len(Result) > 0 Then
                Result = Result & Delimiter
            End If
            Result = Result & Item
        End If
    Next Item

    ExtractOdds = Result
End Function
用于提取奇数值的用法:

=ExtractOdds(A1,":",TRUE)
用于提取偶数值的用法:

=ExtractOdds(A1,":",FALSE)
尝试以下VBA功能:

Public Function ExtractOdds(Data As String, Delimiter As String, IsOdd As Boolean) As String
    Dim Elements() As String
    Dim Result As String

    Elements = Split(Data, Delimiter)

    For Each Item In Elements
        If Right(Item, 1) Mod 2 = -IsOdd Then
            If Len(Result) > 0 Then
                Result = Result & Delimiter
            End If
            Result = Result & Item
        End If
    Next Item

    ExtractOdds = Result
End Function
用于提取奇数值的用法:

=ExtractOdds(A1,":",TRUE)
用于提取偶数值的用法:

=ExtractOdds(A1,":",FALSE)
这可以做到:

Sub Test()
Dim sPart, sFull As String
Dim WS1, WS2 As Worksheet
Dim i As Long

Set WS1 = ActiveSheet
sFull = "A106:A107:A110:A111:A112:A113:A118:A119"
Sheets.Add After:=Sheets(Sheets.Count)
Set WS2 = ActiveSheet

WS2.Range("A1").Value = "Odd"
WS2.Range("B1").Value = "Even"

Do While InStr(sFull, ":")
    sPart = Left(sFull, InStr(sFull, ":"))
    i = Mid(sPart, 2, Len(sPart) - 2)
    If i Mod 2 <> 0 Then
        WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
        Else
        WS2.Range("B" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
    End If
    sFull = Right(sFull, Len(sFull) - Len(sPart))
Loop

sPart = sFull
i = Mid(sPart, 2, Len(sPart) - 1)
If i Mod 2 <> 0 Then
    WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
    Else
    WS2.Range("B" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
End If

End Sub
子测试()
暗晶石,如细绳般饱满
将WS1、WS2标注为工作表
我想我会坚持多久
设置WS1=ActiveSheet
sFull=“A106:A107:A110:A111:A112:A113:A118:A119”
Sheets.Add After:=工作表(Sheets.Count)
设置WS2=ActiveSheet
WS2.范围(“A1”).Value=“奇数”
WS2.范围(“B1”).Value=“偶数”
安装时执行(sFull,“:”)
sPart=左(sFull,仪表(sFull,“:”))
i=中间(短柱,2,长柱(短柱)-2)
如果我是Mod 20那么
WS2.Range(“A”&WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
其他的
WS2.Range(“B”和WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
如果结束
sFull=右(sFull,长(sFull)-长(短))
环
sPart=sFull
i=中间(短柱,2,长柱(短柱)-1)
如果我是Mod 20那么
WS2.Range(“A”&WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
其他的
WS2.Range(“B”和WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
如果结束
端接头
这样做可以:

Sub Test()
Dim sPart, sFull As String
Dim WS1, WS2 As Worksheet
Dim i As Long

Set WS1 = ActiveSheet
sFull = "A106:A107:A110:A111:A112:A113:A118:A119"
Sheets.Add After:=Sheets(Sheets.Count)
Set WS2 = ActiveSheet

WS2.Range("A1").Value = "Odd"
WS2.Range("B1").Value = "Even"

Do While InStr(sFull, ":")
    sPart = Left(sFull, InStr(sFull, ":"))
    i = Mid(sPart, 2, Len(sPart) - 2)
    If i Mod 2 <> 0 Then
        WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
        Else
        WS2.Range("B" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
    End If
    sFull = Right(sFull, Len(sFull) - Len(sPart))
Loop

sPart = sFull
i = Mid(sPart, 2, Len(sPart) - 1)
If i Mod 2 <> 0 Then
    WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
    Else
    WS2.Range("B" & WS2.Rows.Count).End(xlUp).Offset(1).Value = Left(sPart, Len(sPart) - 1)
End If

End Sub
子测试()
暗晶石,如细绳般饱满
将WS1、WS2标注为工作表
我想我会坚持多久
设置WS1=ActiveSheet
sFull=“A106:A107:A110:A111:A112:A113:A118:A119”
Sheets.Add After:=工作表(Sheets.Count)
设置WS2=ActiveSheet
WS2.范围(“A1”).Value=“奇数”
WS2.范围(“B1”).Value=“偶数”
安装时执行(sFull,“:”)
sPart=左(sFull,仪表(sFull,“:”))
i=中间(短柱,2,长柱(短柱)-2)
如果我是Mod 20那么
WS2.Range(“A”&WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
其他的
WS2.Range(“B”和WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
如果结束
sFull=右(sFull,长(sFull)-长(短))
环
sPart=sFull
i=中间(短柱,2,长柱(短柱)-1)
如果我是Mod 20那么
WS2.Range(“A”&WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
其他的
WS2.Range(“B”和WS2.Rows.Count).End(xlUp).Offset(1).Value=Left(sPart,Len(sPart)-1)
如果结束
端接头

yes,使用
Mid
提取号码,然后使用
Mod
功能yes,使用
Mid
提取号码,然后使用
Mod
功能