Excel 将pos、neg值替换为另一张图纸
因此,我必须将A列中的正数和负数从第1页替换为第二页[正数]和第三页[负数] 以下是我尝试过的: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
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源作为范围