excel中vba代码的问题,请教一个思路即可

我这只是整个工程中的其中一个步骤,所以只限于VBA宏代码了。不需要具体代码,只提供我一个思路方法即可,我可以慢慢去学。。。。。。。如图,A、B列是基础数据。A列以;号把数... 我这只是整个工程中的其中一个步骤,所以只限于VBA宏代码了。不需要具体代码,只提供我一个思路方法即可,我可以慢慢去学。。。。。。。如图,A、B列是基础数据。A列以;号把数据分成2--4段不等。B列是ABC之一,分别代表一种对应的计算方式,是对A列数据各段进行相应的数学运算。D列就是根据B列的ABC类型,对A列采取相应的计算方式的结果。我的思路是用for循环每一行,先在EFGH列分别拆分出A列中;号的各段数字。然后用select case根据B列的ABC选用相应的数学计算方式,在D列输出结果。但是这4000多行数据,运行一次需要1分钟的样子。每行需要计算EFGH四格,还需要case三种类型之一,好慢。想请教一下,有没有其他好一些的思路来得到D列结果。刚刚接触vba,所以只能想到用for循环。我这只是整个工程中的其中一个步骤,所以希望只能限于VBA宏代码。不需要具体代码,只提供我一个思路方法即可,我可以慢慢去学。 展开
 我来答
veimi
2018-09-01 · TA获得超过2350个赞
知道大有可为答主
回答量:5720
采纳率:28%
帮助的人:3026万
展开全部

1、将A列分列分开(分成四列)

2、D列用公式就可以得到结果(if 判断A、B、C三种计算公式)

Ynzsvt
2018-09-01 · TA获得超过6659个赞
知道大有可为答主
回答量:1.5万
采纳率:40%
帮助的人:2584万
展开全部
我说几点:
1、数据分列后的结果,不用单元格存放,除非你有这个需求。这个是挺占用时间的。
2、尽量用数组,原始数据用一个数组,在需要的输出列用一个数组,区域和数组之间传数据相对就快。
3、分列的数据 ,建议 先 & “;;”后再分列,这样,程序处理图例第四行与第二行是同一个程序了。而不用增加分支判断。
4、 数据多了,是挺占用时间的,要耐心。
更多追问追答
追问
大神,你的1、2条,是说,先for用arr(i,j)来保存分列数据,然后还是case根据ABC对arr中的进行相应计算,是这个意思?第3条,先 & “;;”后再分列,可否也继续说下,还没接触到这。我百度什么字词能搜索到这个思路。
追答
Sub 分类处理数据()
 Dim Arr, Brr(), Crr, i&, j&, jg#
 '原始数据
 Arr = Range(Cells(2, 2), Cells(Rows.Count, 1).End(xlUp))
 '存放结果的数据开适当大小的空间
 ReDim Brr(1 To UBound(Arr), 1 To 1)
 ' 循环计算
 For i = 1 To UBound(Arr)
  Crr = Split(Arr(i, 1) & ";;", ";") '注意分号是中文的还是英文的,要全部一致才行。
  jg = Empty
  Select Case Arr(i, 2)
  Case "A":
   jg = Val(Crr(0)) * Val(Crr(1)) + Val(Crr(2))
  Case "B":
  Case "C":
  End Select
  Brr(i, 1) = jg
 Next i
 '结果输出到D列。
 [d2].Resize(UBound(Brr), 1) = Brr
End Sub
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式