Excel 将pos、neg值替换为另一张图纸

Excel 将pos、neg值替换为另一张图纸,excel,vba,Excel,Vba,因此,我必须将A列中的正数和负数从第1页替换为第二页[正数]和第三页[负数] 以下是我尝试过的: Sub Verify() Dim row As Long For row = 1 To 20 If ActiveSheet.Cells(row,1) <> "" Then If ActiveSheet.Cells(row,1) > 0 Then ActiveSheet.Cells(row,2

因此,我必须将A列中的正数和负数从第1页替换为第二页[正数]和第三页[负数]

以下是我尝试过的:

Sub Verify()
    Dim row As Long
    For row = 1 To 20
        If ActiveSheet.Cells(row,1) <> "" Then 
            If ActiveSheet.Cells(row,1) > 0 Then 
                ActiveSheet.Cells(row,2) = ActiveSheet.Cells(row,1)
            End If
        End If
    Next
End Sub
子验证()
暗排一样长
对于行=1到20
如果ActiveSheet.Cells(第1行)为“”,则
如果ActiveSheet.Cells(第1行)大于0,则
ActiveSheet.Cells(第2行)=ActiveSheet.Cells(第1行)
如果结束
如果结束
下一个
端接头
以下是该程序的功能:
如我们所见,我在第1页的“B”列中得到了正值。

使代码对您来说有点可重用。请随意更改工作表名称或最后一行变量。使用“最后一个位置”和“最后一个负位置”,这样第二页和第三页上就不会出现空行。您没有指定如何处理零,因此它当前已添加到负片

Sub Verify()
    Dim row As Long, last_row As Long, last_pos_val As Long, last_neg_val As Long
    Dim ws_source As Worksheet, ws_pos As Worksheet, ws_neg As Worksheet
    Dim wb As Workbook

    Set wb = ThisWorkbook
    Set ws_source = wb.Sheets("Sheet1")
    Set ws_pos = wb.Sheets("Sheet2")
    Set ws_neg = wb.Sheets("Sheet3")

    last_pos_val = 1
    last_neg_val = 1
    last_row = 20

    For row = 1 To last_row
        If ws_source.Cells(row,1) <> "" Then 
            If ws_source.Cells(row,1) > 0 Then 
                ws_pos.Cells(last_pos_val,1) = ws_source.Cells(row,1)
                last_pos_val = last_pos_val + 1
            Else
                ws_neg.Cells(last_neg_val,1) = ws_source.Cells(row,1)
                last_neg_val = last_neg_val + 1
            End If
        End If
    Next
End Sub
子验证()
变暗行长,最后一行长,最后一个位置值长,最后一个负值长
将ws_源设置为工作表、ws_pos设置为工作表、ws_neg设置为工作表
将wb设置为工作簿
设置wb=ThisWorkbook
设置ws_source=wb.Sheets(“Sheet1”)
设置ws_pos=wb.Sheets(“Sheet2”)
设置ws_neg=wb.Sheets(“Sheet3”)
最后位置值=1
最后一个负值=1
最后一行=20
对于行=1到最后一行
如果ws_source.Cells(第1行)“,则
如果ws_source.Cells(第1行)大于0,则
ws_位置单元格(最后一个位置值,1)=ws_源单元格(第1行)
最后位置值=最后位置值+1
其他的
ws_neg.Cells(last_neg_val,1)=ws_source.Cells(行,1)
last_neg_val=last_neg_val+1
如果结束
如果结束
下一个
端接头

使代码对您来说有点可重用。请随意更改工作表名称或最后一行变量。使用“最后一个位置”和“最后一个负位置”,这样第二页和第三页上就不会出现空行。您没有指定如何处理零,因此它当前已添加到负片

Sub Verify()
    Dim row As Long, last_row As Long, last_pos_val As Long, last_neg_val As Long
    Dim ws_source As Worksheet, ws_pos As Worksheet, ws_neg As Worksheet
    Dim wb As Workbook

    Set wb = ThisWorkbook
    Set ws_source = wb.Sheets("Sheet1")
    Set ws_pos = wb.Sheets("Sheet2")
    Set ws_neg = wb.Sheets("Sheet3")

    last_pos_val = 1
    last_neg_val = 1
    last_row = 20

    For row = 1 To last_row
        If ws_source.Cells(row,1) <> "" Then 
            If ws_source.Cells(row,1) > 0 Then 
                ws_pos.Cells(last_pos_val,1) = ws_source.Cells(row,1)
                last_pos_val = last_pos_val + 1
            Else
                ws_neg.Cells(last_neg_val,1) = ws_source.Cells(row,1)
                last_neg_val = last_neg_val + 1
            End If
        End If
    Next
End Sub
子验证()
变暗行长,最后一行长,最后一个位置值长,最后一个负值长
将ws_源设置为工作表、ws_pos设置为工作表、ws_neg设置为工作表
将wb设置为工作簿
设置wb=ThisWorkbook
设置ws_source=wb.Sheets(“Sheet1”)
设置ws_pos=wb.Sheets(“Sheet2”)
设置ws_neg=wb.Sheets(“Sheet3”)
最后位置值=1
最后一个负值=1
最后一行=20
对于行=1到最后一行
如果ws_source.Cells(第1行)“,则
如果ws_source.Cells(第1行)大于0,则
ws_位置单元格(最后一个位置值,1)=ws_源单元格(第1行)
最后位置值=最后位置值+1
其他的
ws_neg.Cells(last_neg_val,1)=ws_source.Cells(行,1)
last_neg_val=last_neg_val+1
如果结束
如果结束
下一个
端接头

您的代码当前不起作用,因为您只使用了
ActiveSheet
,而不是根据需要将数据放在其他工作表上。下面是一些VBA代码,用于循环原始工作表中的A列,并根据需要将数据输出到两个不同工作表中的A列:

Sub sSplitPositiveNegative()
    Dim wsOriginal As Worksheet
    Dim wsPositive As Worksheet
    Dim wsNegative As Worksheet
    Dim lngLastRow As Long
    Dim lngPositiveRow As Long
    Dim lngNegativeRow As Long
    Dim lngLoop1 As Long
    Set wsOriginal = ThisWorkbook.Worksheets("Original")
    Set wsPositive = ThisWorkbook.Worksheets("Positive")
    Set wsNegative = ThisWorkbook.Worksheets("Negative")
    lngLastRow = wsOriginal.Cells(wsOriginal.Rows.Count, "A").End(xlUp).Row
    lngNegativeRow = 2
    lngPositiveRow = 2
    For lngLoop1 = 1 To lngLastRow
        If wsOriginal.Cells(lngLoop1, 1).Value > 0 Then
            wsPositive.Cells(lngPositiveRow, 1) = wsOriginal.Cells(lngLoop1, 1)
            lngPositiveRow = lngPositiveRow + 1
        Else
            wsNegative.Cells(lngNegativeRow, 1) = wsOriginal.Cells(lngLoop1, 1)
            lngNegativeRow = lngNegativeRow + 1
        End If
    Next lngLoop1
    Set wsPositive = Nothing
    Set wsNegative = Nothing
    Set wsOriginal = Nothing
End Sub
您需要更改代码中引用的工作表的名称,以与工作簿中的名称相匹配


关于

您的代码当前不起作用,因为您只使用了
ActiveSheet
,而不是根据需要将数据放在其他工作表上。下面是一些VBA代码,用于循环原始工作表中的A列,并根据需要将数据输出到两个不同工作表中的A列:

Sub sSplitPositiveNegative()
    Dim wsOriginal As Worksheet
    Dim wsPositive As Worksheet
    Dim wsNegative As Worksheet
    Dim lngLastRow As Long
    Dim lngPositiveRow As Long
    Dim lngNegativeRow As Long
    Dim lngLoop1 As Long
    Set wsOriginal = ThisWorkbook.Worksheets("Original")
    Set wsPositive = ThisWorkbook.Worksheets("Positive")
    Set wsNegative = ThisWorkbook.Worksheets("Negative")
    lngLastRow = wsOriginal.Cells(wsOriginal.Rows.Count, "A").End(xlUp).Row
    lngNegativeRow = 2
    lngPositiveRow = 2
    For lngLoop1 = 1 To lngLastRow
        If wsOriginal.Cells(lngLoop1, 1).Value > 0 Then
            wsPositive.Cells(lngPositiveRow, 1) = wsOriginal.Cells(lngLoop1, 1)
            lngPositiveRow = lngPositiveRow + 1
        Else
            wsNegative.Cells(lngNegativeRow, 1) = wsOriginal.Cells(lngLoop1, 1)
            lngNegativeRow = lngNegativeRow + 1
        End If
    Next lngLoop1
    Set wsPositive = Nothing
    Set wsNegative = Nothing
    Set wsOriginal = Nothing
End Sub
您需要更改代码中引用的工作表的名称,以与工作簿中的名称相匹配

考虑到

正面和负面
  • 调整常量部分中的值
  • 这两种潜艇都是必需的。第一个子调用第二个子
代码

Option Explicit

Sub SplitPN()

    Const Source As String = "Sheet1"
    Const Positive As String = "Sheet2"
    Const Negative As String = "Sheet3"
    Const FirstRow As Long = 1
    Const SourceColumn As Long = 1
    Const PositiveFirstCell As String = "A1"
    Const NegativeFirstCell As String = "A1"

    Dim rngSource As Range
    Dim rngPositive As Range
    Dim rngNegative As Range

    With ThisWorkbook
        With .Worksheets(Source)
            Set rngSource = .Columns(SourceColumn).Find(What:="*", _
              LookIn:=xlFormulas, SearchDirection:=xlPrevious)
            If rngSource Is Nothing Then Exit Sub
            If rngSource.Row < FirstRow Then Exit Sub
            Set rngSource = .Range(.Cells(FirstRow, SourceColumn), rngSource)
        End With
        Set rngPositive = .Worksheets(Positive).Range(PositiveFirstCell)
        Set rngNegative = .Worksheets(Negative).Range(NegativeFirstCell)
    End With

    SplitPosNeg rngSource, rngPositive, rngNegative

End Sub

Sub SplitPosNeg(SourceRange As Range, PositiveFirstCell As Range, _
  NegativeFirstCell As Range)
    Dim Source, Positive, Negative
    Dim UB As Long, i As Long
    Source = SourceRange
    UB = UBound(Source)
    ReDim Positive(1 To UB, 1 To 1)
    ReDim Negative(1 To UB, 1 To 1)
    For i = 1 To UBound(Source)
        Select Case Source(i, 1)
            Case Is > 0: Positive(i, 1) = Source(i, 1)
            Case Is < 0: Negative(i, 1) = Source(i, 1)
        End Select
    Next
    PositiveFirstCell.Resize(UB) = Positive
    NegativeFirstCell.Resize(UB) = Negative
End Sub
选项显式
子拆分pn()
常量源为String=“Sheet1”
常量正值为String=“Sheet2”
常量负值为String=“Sheet3”
常量第一行长度=1
Const SourceColumn的长度=1
常量PositiveFirstCell为String=“A1”
常量NegativeFirstCell为String=“A1”
变暗RNG源作为范围
暗RNG正As范围
弱负性As范围
使用此工作簿
带.工作表(源)
设置rngSource=.Columns(SourceColumn).Find(What:=“*”_
LookIn:=xlFormulas,SearchDirection:=xlPrevious)
如果rngSource为Nothing,则退出Sub
如果rngSource.Row0:正(i,1)=源(i,1)
情况<0:负(i,1)=源(i,1)
结束选择
下一个
正数firstcell.Resize(UB)=正数
NegativeFirstCell.Resize(UB)=负数
端接头
将正极和负极分开
  • 调整常量部分中的值
  • 这两种潜艇都是必需的。第一个子调用第二个子
代码

Option Explicit

Sub SplitPN()

    Const Source As String = "Sheet1"
    Const Positive As String = "Sheet2"
    Const Negative As String = "Sheet3"
    Const FirstRow As Long = 1
    Const SourceColumn As Long = 1
    Const PositiveFirstCell As String = "A1"
    Const NegativeFirstCell As String = "A1"

    Dim rngSource As Range
    Dim rngPositive As Range
    Dim rngNegative As Range

    With ThisWorkbook
        With .Worksheets(Source)
            Set rngSource = .Columns(SourceColumn).Find(What:="*", _
              LookIn:=xlFormulas, SearchDirection:=xlPrevious)
            If rngSource Is Nothing Then Exit Sub
            If rngSource.Row < FirstRow Then Exit Sub
            Set rngSource = .Range(.Cells(FirstRow, SourceColumn), rngSource)
        End With
        Set rngPositive = .Worksheets(Positive).Range(PositiveFirstCell)
        Set rngNegative = .Worksheets(Negative).Range(NegativeFirstCell)
    End With

    SplitPosNeg rngSource, rngPositive, rngNegative

End Sub

Sub SplitPosNeg(SourceRange As Range, PositiveFirstCell As Range, _
  NegativeFirstCell As Range)
    Dim Source, Positive, Negative
    Dim UB As Long, i As Long
    Source = SourceRange
    UB = UBound(Source)
    ReDim Positive(1 To UB, 1 To 1)
    ReDim Negative(1 To UB, 1 To 1)
    For i = 1 To UBound(Source)
        Select Case Source(i, 1)
            Case Is > 0: Positive(i, 1) = Source(i, 1)
            Case Is < 0: Negative(i, 1) = Source(i, 1)
        End Select
    Next
    PositiveFirstCell.Resize(UB) = Positive
    NegativeFirstCell.Resize(UB) = Negative
End Sub
选项显式
子拆分pn()
常量源为String=“Sheet1”
常量正值为String=“Sheet2”
常量负值为String=“Sheet3”
常量第一行长度=1
Const SourceColumn的长度=1
常量PositiveFirstCell为String=“A1”
常量NegativeFirstCell为String=“A1”
变暗RNG源作为范围