VBA语句翻译。请大侠们帮忙翻译一下,让我学习一下。 5
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)IfTarget.Count=1AndTarget.Row=...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 And Target.Row = 3 And Target.Column = 1 Then Rows("4:65536").ClearContents: Range("A4").Select
If Target.Count = 1 And Target.Row = 3 And Target.Column = 2 Then
Rows("4:65536").ClearContents: Cells(7, 2) = " 拼命运算中,请耐心等待..."
c = Range("IV2").End(xlToLeft).Column: R = 4: j = Int(c / 26): k = c Mod 26
Application.Calculation = xlManual: Application.ScreenUpdating = False
If j > 0 Then A = A Else A = ""
If k > 0 Then B = c Else A = Chr(j + 63): B = "Z"
If c = 26 Then A = "": B = "Z"
Columns("A:" & A & B).Insert Shift:=xlToRight:
For sh = 3 To 8: shr = Sheets(sh).Range("C65536").End(xlUp).Row
If shr > 3 Then Range(Cells(R, 1), Cells(R + shr - 3, c)).FormulaR1C1 = "=" & Sheets(sh).Name & "!R[" & 4 - R & "]C": R = R + shr - 3
Next sh: Columns("A:B").Insert Shift:=xlToRight
Range(Cells(4, c + 7), Cells(R, c * 2 + 2)).FormulaR1C1 = "=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])"
Range(Cells(4, c + 5), Cells(R, c + 6)).FormulaR1C1 = "=SUMPRODUCT((R2C" & c + 7 & ":R2C256=R2C)*(RC" & c + 7 & ":RC256))"
Range(Cells(4, c + 3), Cells(R, c + 4)).FormulaR1C1 = "=RC[" & -c & "]"
Range("A4:A" & R).FormulaR1C1 = "=RC[2]&RC[3]"
Range("B4:B" & R).FormulaR1C1 = "=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)"
Application.Calculation = xlAutomatic:
Range(Cells(4, 1), Cells(R, c * 2 + 2)).Select: Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False: Rows(R & ":" & R).Delete Shift:=xlUp:
Rows("3:3").Select: Selection.AutoFilter: Selection.AutoFilter Field:=2, Criteria1:="1"
Rows("4:" & R).Select: Selection.SpecialCells(xlCellTypeVisible).Select: Selection.Delete Shift:=xlUp: Selection.AutoFilter
Columns("A:B").Delete Shift:=xlToLeft: Columns("A:" & A & B).Delete Shift:=xlToLeft: Range("B4").Select
Application.Calculation = xlManual: Application.ScreenUpdating = True:
End If: End Sub 展开
If Target.Count = 1 And Target.Row = 3 And Target.Column = 1 Then Rows("4:65536").ClearContents: Range("A4").Select
If Target.Count = 1 And Target.Row = 3 And Target.Column = 2 Then
Rows("4:65536").ClearContents: Cells(7, 2) = " 拼命运算中,请耐心等待..."
c = Range("IV2").End(xlToLeft).Column: R = 4: j = Int(c / 26): k = c Mod 26
Application.Calculation = xlManual: Application.ScreenUpdating = False
If j > 0 Then A = A Else A = ""
If k > 0 Then B = c Else A = Chr(j + 63): B = "Z"
If c = 26 Then A = "": B = "Z"
Columns("A:" & A & B).Insert Shift:=xlToRight:
For sh = 3 To 8: shr = Sheets(sh).Range("C65536").End(xlUp).Row
If shr > 3 Then Range(Cells(R, 1), Cells(R + shr - 3, c)).FormulaR1C1 = "=" & Sheets(sh).Name & "!R[" & 4 - R & "]C": R = R + shr - 3
Next sh: Columns("A:B").Insert Shift:=xlToRight
Range(Cells(4, c + 7), Cells(R, c * 2 + 2)).FormulaR1C1 = "=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])"
Range(Cells(4, c + 5), Cells(R, c + 6)).FormulaR1C1 = "=SUMPRODUCT((R2C" & c + 7 & ":R2C256=R2C)*(RC" & c + 7 & ":RC256))"
Range(Cells(4, c + 3), Cells(R, c + 4)).FormulaR1C1 = "=RC[" & -c & "]"
Range("A4:A" & R).FormulaR1C1 = "=RC[2]&RC[3]"
Range("B4:B" & R).FormulaR1C1 = "=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)"
Application.Calculation = xlAutomatic:
Range(Cells(4, 1), Cells(R, c * 2 + 2)).Select: Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False: Rows(R & ":" & R).Delete Shift:=xlUp:
Rows("3:3").Select: Selection.AutoFilter: Selection.AutoFilter Field:=2, Criteria1:="1"
Rows("4:" & R).Select: Selection.SpecialCells(xlCellTypeVisible).Select: Selection.Delete Shift:=xlUp: Selection.AutoFilter
Columns("A:B").Delete Shift:=xlToLeft: Columns("A:" & A & B).Delete Shift:=xlToLeft: Range("B4").Select
Application.Calculation = xlManual: Application.ScreenUpdating = True:
End If: End Sub 展开
2个回答
展开全部
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '当工作表选区发生改变时执行本程序(固定格式)
If Target.Count = 1 And Target.Row = 3 And Target.Column = 1 Then Rows("4:65536").ClearContents: Range("A4").Select '如果 Target的计数值=1 并且 Target的行标=3 并且 Target的列标=1 则执行 <行>坐标("4:65536" )的清除内容:<单元格>区域("A4" )的选定
If Target.Count = 1 And Target.Row = 3 And Target.Column = 2 Then '如果 Target的计数值=1 并且 Target的行标=3 并且 Target的列标=2 则执行
Rows("4:65536").ClearContents: Cells(7, 2) = " 拼命运算中,请耐心等待..." '<行>坐标("4:65536" )的清除内容:<单元格>坐标(7,2)="拼命运算中, 请耐心等待的的的"
c = Range("IV2").End(xlToLeft).Column: R = 4: j = Int(c / 26): k = c Mod 26 'c=<单元格>区域("IV2" )的<末端>(方向向左 )的列标:R=4:j=<取整>(c/26):k=cMod26
Application.Calculation = xlManual: Application.ScreenUpdating = False ' 应用程序的重新计算=手动: 应用程序的屏幕刷新=False
If j > 0 Then A = A Else A = "" '如果 j>0 则执行 A=A另外A=空值
If k > 0 Then B = c Else A = Chr(j + 63): B = "Z" '如果 k>0 则执行 B=c另外A=<数值转字符>(j+63):B="Z"
If c = 26 Then A = "": B = "Z" '如果 c=26 则执行 A=空值:B="Z"
Columns("A:" & A & B).Insert Shift:=xlToRight: '<列>坐标("A:" & A & B )的Insert变换=方向向右:
For sh = 3 To 8: shr = Sheets(sh).Range("C65536").End(xlUp).Row '设定变量范围为sh=3到8:shr=<工作表>(sh )的<单元格>区域("C65536" )的<末端>(方向向上 )的行标
If shr > 3 Then Range(Cells(R, 1), Cells(R + shr - 3, c)).FormulaR1C1 = "=" & Sheets(sh).Name & "!R[" & 4 - R & "]C": R = R + shr - 3 '如果 shr>3 则执行 <单元格>区域(<单元格>坐标(R,1),<单元格>坐标(R+shr-3,c) )的R1C1格式公式="=" & <工作表>(sh )的名称 & "!R[" & 4-R & "]C":R=R+shr-3
Next sh: Columns("A:B").Insert Shift:=xlToRight '下一个sh:<列>坐标("A:B" )的Insert变换=方向向右
Range(Cells(4, c + 7), Cells(R, c * 2 + 2)).FormulaR1C1 = "=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])" '<单元格>区域(<单元格>坐标(4,c+7),<单元格>坐标(R,c*2+2) )的R1C1格式公式="=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])"
Range(Cells(4, c + 5), Cells(R, c + 6)).FormulaR1C1 = "=SUMPRODUCT((R2C" & c + 7 & ":R2C256=R2C)*(RC" & c + 7 & ":RC256))" '<单元格>区域(<单元格>坐标(4,c+5),<单元格>坐标(R,c+6) )的R1C1格式公式="=SUMPRODUCT((R2C" & c+7 & ":R2C256=R2C)*(RC" & c+7 & ":RC256))"
Range(Cells(4, c + 3), Cells(R, c + 4)).FormulaR1C1 = "=RC[" & -c & "]" '<单元格>区域(<单元格>坐标(4,c+3),<单元格>坐标(R,c+4) )的R1C1格式公式="=RC[" & -c & "]"
Range("A4:A" & R).FormulaR1C1 = "=RC[2]&RC[3]" '<单元格>区域("A4:A" & R )的R1C1格式公式="=RC[2]&RC[3]"
Range("B4:B" & R).FormulaR1C1 = "=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)" '<单元格>区域("B4:B" & R )的R1C1格式公式="=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)"
Application.Calculation = xlAutomatic: ' 应用程序的重新计算=xlAutomatic:
Range(Cells(4, 1), Cells(R, c * 2 + 2)).Select: Selection.Copy '<单元格>区域(<单元格>坐标(4,1),<单元格>坐标(R,c*2+2) )的选定: 被选项的复制
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' 被选项的选择性粘贴粘贴=xlPasteValues,Operation=xlNone,SkipBlanks=False,Transpose=False
Application.CutCopyMode = False: Rows(R & ":" & R).Delete Shift:=xlUp: ' 应用程序的剪切拷贝模式=False:<行>坐标(R & ":" & R )的删除变换=方向向上:
Rows("3:3").Select: Selection.AutoFilter: Selection.AutoFilter Field:=2, Criteria1:="1" '<行>坐标("3:3" )的选定: 被选项的AutoFilter: 被选项的AutoFilterField=2,Criteria1="1"
Rows("4:" & R).Select: Selection.SpecialCells(xlCellTypeVisible).Select: Selection.Delete Shift:=xlUp: Selection.AutoFilter '<行>坐标("4:" & R )的选定: 被选项的<特殊单元格>(xlCellTypeVisible )的选定: 被选项的删除变换=方向向上: 被选项的AutoFilter
Columns("A:B").Delete Shift:=xlToLeft: Columns("A:" & A & B).Delete Shift:=xlToLeft: Range("B4").Select '<列>坐标("A:B" )的删除变换=方向向左:<列>坐标("A:" & A & B )的删除变换=方向向左:<单元格>区域("B4" )的选定
Application.Calculation = xlManual: Application.ScreenUpdating = True: ' 应用程序的重新计算=手动: 应用程序的屏幕刷新=True:
End If: End Sub 'End如果 :End子程序
If Target.Count = 1 And Target.Row = 3 And Target.Column = 1 Then Rows("4:65536").ClearContents: Range("A4").Select '如果 Target的计数值=1 并且 Target的行标=3 并且 Target的列标=1 则执行 <行>坐标("4:65536" )的清除内容:<单元格>区域("A4" )的选定
If Target.Count = 1 And Target.Row = 3 And Target.Column = 2 Then '如果 Target的计数值=1 并且 Target的行标=3 并且 Target的列标=2 则执行
Rows("4:65536").ClearContents: Cells(7, 2) = " 拼命运算中,请耐心等待..." '<行>坐标("4:65536" )的清除内容:<单元格>坐标(7,2)="拼命运算中, 请耐心等待的的的"
c = Range("IV2").End(xlToLeft).Column: R = 4: j = Int(c / 26): k = c Mod 26 'c=<单元格>区域("IV2" )的<末端>(方向向左 )的列标:R=4:j=<取整>(c/26):k=cMod26
Application.Calculation = xlManual: Application.ScreenUpdating = False ' 应用程序的重新计算=手动: 应用程序的屏幕刷新=False
If j > 0 Then A = A Else A = "" '如果 j>0 则执行 A=A另外A=空值
If k > 0 Then B = c Else A = Chr(j + 63): B = "Z" '如果 k>0 则执行 B=c另外A=<数值转字符>(j+63):B="Z"
If c = 26 Then A = "": B = "Z" '如果 c=26 则执行 A=空值:B="Z"
Columns("A:" & A & B).Insert Shift:=xlToRight: '<列>坐标("A:" & A & B )的Insert变换=方向向右:
For sh = 3 To 8: shr = Sheets(sh).Range("C65536").End(xlUp).Row '设定变量范围为sh=3到8:shr=<工作表>(sh )的<单元格>区域("C65536" )的<末端>(方向向上 )的行标
If shr > 3 Then Range(Cells(R, 1), Cells(R + shr - 3, c)).FormulaR1C1 = "=" & Sheets(sh).Name & "!R[" & 4 - R & "]C": R = R + shr - 3 '如果 shr>3 则执行 <单元格>区域(<单元格>坐标(R,1),<单元格>坐标(R+shr-3,c) )的R1C1格式公式="=" & <工作表>(sh )的名称 & "!R[" & 4-R & "]C":R=R+shr-3
Next sh: Columns("A:B").Insert Shift:=xlToRight '下一个sh:<列>坐标("A:B" )的Insert变换=方向向右
Range(Cells(4, c + 7), Cells(R, c * 2 + 2)).FormulaR1C1 = "=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])" '<单元格>区域(<单元格>坐标(4,c+7),<单元格>坐标(R,c*2+2) )的R1C1格式公式="=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])"
Range(Cells(4, c + 5), Cells(R, c + 6)).FormulaR1C1 = "=SUMPRODUCT((R2C" & c + 7 & ":R2C256=R2C)*(RC" & c + 7 & ":RC256))" '<单元格>区域(<单元格>坐标(4,c+5),<单元格>坐标(R,c+6) )的R1C1格式公式="=SUMPRODUCT((R2C" & c+7 & ":R2C256=R2C)*(RC" & c+7 & ":RC256))"
Range(Cells(4, c + 3), Cells(R, c + 4)).FormulaR1C1 = "=RC[" & -c & "]" '<单元格>区域(<单元格>坐标(4,c+3),<单元格>坐标(R,c+4) )的R1C1格式公式="=RC[" & -c & "]"
Range("A4:A" & R).FormulaR1C1 = "=RC[2]&RC[3]" '<单元格>区域("A4:A" & R )的R1C1格式公式="=RC[2]&RC[3]"
Range("B4:B" & R).FormulaR1C1 = "=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)" '<单元格>区域("B4:B" & R )的R1C1格式公式="=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)"
Application.Calculation = xlAutomatic: ' 应用程序的重新计算=xlAutomatic:
Range(Cells(4, 1), Cells(R, c * 2 + 2)).Select: Selection.Copy '<单元格>区域(<单元格>坐标(4,1),<单元格>坐标(R,c*2+2) )的选定: 被选项的复制
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' 被选项的选择性粘贴粘贴=xlPasteValues,Operation=xlNone,SkipBlanks=False,Transpose=False
Application.CutCopyMode = False: Rows(R & ":" & R).Delete Shift:=xlUp: ' 应用程序的剪切拷贝模式=False:<行>坐标(R & ":" & R )的删除变换=方向向上:
Rows("3:3").Select: Selection.AutoFilter: Selection.AutoFilter Field:=2, Criteria1:="1" '<行>坐标("3:3" )的选定: 被选项的AutoFilter: 被选项的AutoFilterField=2,Criteria1="1"
Rows("4:" & R).Select: Selection.SpecialCells(xlCellTypeVisible).Select: Selection.Delete Shift:=xlUp: Selection.AutoFilter '<行>坐标("4:" & R )的选定: 被选项的<特殊单元格>(xlCellTypeVisible )的选定: 被选项的删除变换=方向向上: 被选项的AutoFilter
Columns("A:B").Delete Shift:=xlToLeft: Columns("A:" & A & B).Delete Shift:=xlToLeft: Range("B4").Select '<列>坐标("A:B" )的删除变换=方向向左:<列>坐标("A:" & A & B )的删除变换=方向向左:<单元格>区域("B4" )的选定
Application.Calculation = xlManual: Application.ScreenUpdating = True: ' 应用程序的重新计算=手动: 应用程序的屏幕刷新=True:
End If: End Sub 'End如果 :End子程序
展开全部
大概翻译一下,顺便指出其中一些错误之处:
------------------------------------------------------
工作表单元格选择发生变化时执行本模块
如果目标单元格选择数量为1个且行标为3、列标为1,则4至65536行清空、选择A4单元格
如果目标单元格选择数量为1个且行标为3、列标为2,则4至65536行清空、给B7单元格赋值" 拼命运算中,请耐心等待..."
查找第二行最后一个非空单元格的列标,并赋值给变量c;给变量R赋值4;给变量j赋值Int(c / 26);给变量k赋值c Mod 26
设置系统采用“手动重算”;设置停止“屏幕更新”
如果 j > 0 则 A = A 否则 A = "" (注:A=A有误,应该是A="A")
如果 k > 0 则 B = c 否则 A = Chr(j + 63) ;B = "Z"
如果 c = 26 则 A = "" ;B = "Z"
插入A至(变量A 和 变量B合并后的新字符串)列 活动单元格向右移
开始循环语句 变量sh 从 3 到 8,默认步长1;变量shr赋值C列最后一个非空单元格的行标
如果 shr > 3 则 单元格区域(R行1列至R + shr - 3行c列)公式为 "=" & 表 sh 中的单元格 4 - R 行某列 (注:这里公式有误,缺少具体的列标);变量R 赋值 R + shr - 3
结束循环语句;插入列"A:B" 活动单元格向右移
单元格区域(4行c + 7列至R行c * 2 + 2列)公式为 "=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])" (注:以下公式表达意义忽略)
单元格区域(4行c + 5列至R行c + 6列)公式为 "=SUMPRODUCT((R2C" & c + 7 & ":R2C256=R2C)*(RC" & c + 7 & ":RC256))"
单元格区域(4行c + 3列至R行c + 4列)公式为 "=RC[" & -c & "]"
单元格区域(4行A列至R行A列)公式为 "=RC[2]&RC[3]"
单元格区域(4行B列至R行B列)公式为 "=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)"
设置系统采用“自动重算”
单元格区域(4行1列至R行c * 2 + 2列)选择;复制此区域
选择性粘贴 仅数值 (注:这一句的作用是去掉了本身的公式,只留下计算结果)
清空剪贴板内容;行(R)删除 活动单元格向上移
行3选择;使用“自动筛选”;设置“自动筛选”使用第2个字段,条件为="1"
4至R行选择;再选择其中的可见的单元格;所选择区域删除 活动单元格向上移;使用“自动筛选”
A至B列删除 活动单元格向左移;A至 A & B 列删除 活动单元格向左移;B4单元格选择
设置系统采用“手动重算”;设置启动“屏幕更新”
结束IF语句 (注:程序会出错,因为此句多余)
结束当前模块
------------------------------------------------------
工作表单元格选择发生变化时执行本模块
如果目标单元格选择数量为1个且行标为3、列标为1,则4至65536行清空、选择A4单元格
如果目标单元格选择数量为1个且行标为3、列标为2,则4至65536行清空、给B7单元格赋值" 拼命运算中,请耐心等待..."
查找第二行最后一个非空单元格的列标,并赋值给变量c;给变量R赋值4;给变量j赋值Int(c / 26);给变量k赋值c Mod 26
设置系统采用“手动重算”;设置停止“屏幕更新”
如果 j > 0 则 A = A 否则 A = "" (注:A=A有误,应该是A="A")
如果 k > 0 则 B = c 否则 A = Chr(j + 63) ;B = "Z"
如果 c = 26 则 A = "" ;B = "Z"
插入A至(变量A 和 变量B合并后的新字符串)列 活动单元格向右移
开始循环语句 变量sh 从 3 到 8,默认步长1;变量shr赋值C列最后一个非空单元格的行标
如果 shr > 3 则 单元格区域(R行1列至R + shr - 3行c列)公式为 "=" & 表 sh 中的单元格 4 - R 行某列 (注:这里公式有误,缺少具体的列标);变量R 赋值 R + shr - 3
结束循环语句;插入列"A:B" 活动单元格向右移
单元格区域(4行c + 7列至R行c * 2 + 2列)公式为 "=SUMIF(R4C1:R" & R & "C1,RC1,R4C[" & -c & "]:R" & R & "C[" & -c & "])" (注:以下公式表达意义忽略)
单元格区域(4行c + 5列至R行c + 6列)公式为 "=SUMPRODUCT((R2C" & c + 7 & ":R2C256=R2C)*(RC" & c + 7 & ":RC256))"
单元格区域(4行c + 3列至R行c + 4列)公式为 "=RC[" & -c & "]"
单元格区域(4行A列至R行A列)公式为 "=RC[2]&RC[3]"
单元格区域(4行B列至R行B列)公式为 "=IF(COUNTIF(R1C1:R[-1]C1,RC1)=0,0,1)"
设置系统采用“自动重算”
单元格区域(4行1列至R行c * 2 + 2列)选择;复制此区域
选择性粘贴 仅数值 (注:这一句的作用是去掉了本身的公式,只留下计算结果)
清空剪贴板内容;行(R)删除 活动单元格向上移
行3选择;使用“自动筛选”;设置“自动筛选”使用第2个字段,条件为="1"
4至R行选择;再选择其中的可见的单元格;所选择区域删除 活动单元格向上移;使用“自动筛选”
A至B列删除 活动单元格向左移;A至 A & B 列删除 活动单元格向左移;B4单元格选择
设置系统采用“手动重算”;设置启动“屏幕更新”
结束IF语句 (注:程序会出错,因为此句多余)
结束当前模块
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询