大神!请问如何修改哪句代码才能取数呢?
excel吧
全部回复
仅看楼主
level 5
风亦涵 楼主
如上图所示,要修改如下代码里的哪一句才能生成对方科目呢?谢谢!
Sub XXL凭证生成对方科目()
Dim data, i&, dic, temp, X&
data = ThisWorkbook.Worksheets("XXL").UsedRange.Value
Set dic = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(data)
If InStr(dic(data(i, 1) & data(i, 2)), data(i, 4)) = 0 Then
If data(i, 5) <> "" Then
If dic(data(i, 1) & data(i, 2)) = "" Then
dic(data(i, 1) & data(i, 2)) = data(i, 4) & "|"
Else
temp = Split(dic(data(i, 1) & data(i, 2)), "|")
If temp(0) = "" Then
temp(0) = data(i, 4)
Else
temp(0) = temp(0) & "," & data(i, 4)
End If
dic(data(i, 1) & data(i, 2)) = Join(temp, "|")
End If
Else
If dic(data(i, 1) & data(i, 2)) = "" Then
dic(data(i, 1) & data(i, 2)) = "|" & data(i, 4)
Else
temp = Split(dic(data(i, 1) & data(i, 2)), "|")
If temp(1) = "" Then
temp(1) = data(i, 4)
Else
temp(1) = temp(1) & "," & data(i, 4)
End If
dic(data(i, 1) & data(i, 2)) = Join(temp, "|")
End If
End If
End If
Next i
For i = 2 To UBound(data)
If data(i, 5) <> "" Then X = 1 Else X = 0
data(i, 8) = Split(dic(data(i, 1) & data(i, 2)), "|")(X) '刮号里的数字表示列号,第一个括号里的8则表示为第8列,生成的对方科目放在此列。
Next i
ThisWorkbook.Worksheets("XXL").[A1].Resize(UBound(data), UBound(data, 2)) = data
End Sub
2023年05月29日 10点05分 1
level 14
2023年05月29日 12点05分 2
感谢大神关注!之前的代码,正是从您发的链接里获取的,但原代码没有紫色框标记的情况呢。
2023年05月29日 12点05分
@风亦涵 方便的话表格发网盘
2023年05月29日 13点05分
@东门nn吸雪 之前的代码,来自于您发链接的那个论坛的另一个帖子。
2023年05月29日 13点05分
@东门nn吸雪 请问网盘怎么发呢?
2023年05月29日 13点05分
level 5
市面上的公式和那些vba代码都用过,直接上最终结论,唯一真神只有方方格子出的audtool审计专版,准确匹配。下至费用勾稽,上至借贷方发生额分析,一步到位。
2023年05月29日 17点05分 3
简单的一对一,一对多,各路代码能生成就行,真正拿到企业的那些账套时,多对多分析+拆分,最终使用下来,还得是audtool准确匹配,由于计算量很大,准确匹配前高筛出需要的凭证,不需要的凭证号加进来会运行很久。
2023年05月29日 17点05分
@中岀皮卡丘♂ 谢谢关注与推荐!
2023年05月30日 05点05分
level 14
不是修改你的代码,用数组方法;除了多对多速度还行,具体自己看吧
vba参考:https://blog.csdn.net/hhhhh_51/article/details/130957929
2023年05月30日 14点05分 4
好,看到您的链接里有两个代码,明天测试一下,谢谢啦!
2023年06月02日 14点06分
您好!运行到这个语句:brr = combin_arr1(f, j) '调用函数返回组合,一维嵌套数组,停止了。
2023年06月03日 13点06分
@风亦涵 是不是只看了代码没看文字说明?多对多组合问题,先要复制combin_arr1这个函数才能调用
2023年06月03日 23点06分
@东门nn吸雪 好的,我再试试看,谢谢大神!
2023年06月05日 00点06分
level 7
不懂这一行业,就先猜一猜。
Public Function duifang(pingzheng, kemu, ke)
Dim pz, km, y&, zihao
pz = pingzheng
km = kemu
zihao = ke.Offset(0, pingzheng.Column - ke.Column)
For y = 1 To UBound(pz)
If pz(y, 1) = zihao Then
If km(y, 1) <> ke Then
duifang = km(y, 1)
Exit Function
End If
End If
Next
End Function
2023年06月04日 02点06分 8
谢谢大神关注并回复!如您所说,您例举了其中的一种情况。
2023年06月05日 00点06分
level 7
Public Function duifang2(pingzheng, kemu, ke)
Dim pz, km, y&, zihao
pz = pingzheng
km = kemu
zihao = ke.Offset(0, pingzheng.Column - ke.Column)
For y = 1 To UBound(pz)
If pz(y, 1) = zihao Then
If km(y, 1) <> ke Then
duifang2 = duifang2 & "," & km(y, 1)
End If
End If
Next
duifang2 = Right(duifang2, Len(duifang2) - 1)
End Function
2023年06月04日 03点06分 9
大神,请看10楼。谢谢!
2023年06月05日 02点06分
level 5
风亦涵 楼主
2023年06月05日 02点06分 10
level 7
针对10楼的图:
G2单元格的公式:=wanglai(D2)
H2单元格的公式:=duifang(B2,B$2:B$29,D$2:F$29)
i2单元格的公式:=yiji(D2)
代码如下(要把8楼和9楼的代码删除掉):
Public Function wanglai(kemuo) '往来明细(科目单元格)
If InStr(kemuo, "应收账款") + InStr(kemuo, "应付账款") + _
InStr(kemuo, "预收账款") + InStr(kemuo, "预付账款") > 0 Then
wanglai = Replace(kemuo, Split(kemuo, "-")(0) & "-", "")
Else
wanglai = ""
End If
End Function
Public Function duifang(zihao, pingzheng, kemuo_jie_dai)
'对方科目(字号单元格,凭证字号1列区域,科目+借方金额+贷方金额相连的3列区域)
Dim zh, pz, kjd, K&, jie
#, dai#
, jie2
#, dai2#
, y&, yJ, D
zh = zihao
pz = pingzheng
kjd = kemuo_jie_dai
K = zihao.Row - pingzheng.Row + 1
jie = kjd(K, 2)
dai = kjd(K, 3)
Set D = CreateObject("scripting.dictionary")
For y = 1 To UBound(pz)
If (pz(y, 1) = zh) And (y <> K) Then
jie2 = kjd(y, 2)
dai2 = kjd(y, 3)
If (jie * jie2 < 0) + (jie * dai2 <> 0) + (dai * dai2 < 0) + (dai * jie2 <> 0) Then
yJ = yiji(kjd(y, 1))
If Not D.exists(yJ) Then
D(yJ) = 1
duifang = duifang & "/" & yJ
End If
End If
End If
Next
duifang = Right(duifang, Len(duifang) - 1)
End Function
Public Function yiji(kemuo) '一级科目(科目单元格)
Dim n%
For n = 0 To 9
kemuo = Replace(kemuo, n, "")
Next
yiji = Trim(Split(kemuo, "-")(0))
End Function
2023年06月06日 02点06分 12
谢谢大神!请问是把“代码如下(要把8楼和9楼的代码删除掉):”字样以下的全部代码粘贴到插入的模块里吗?但按ALT+F8后,看不到可以运行的代码,我完全不懂代码,是不是哪里没操作对呢?
2023年06月06日 09点06分
大神,忽然明白了。是要在对应的单元格录入你写的公式。
2023年06月06日 09点06分
大神,如果届时其他年度或月份出现相同的凭证字号,还可以取数吗?是不是要关联日期及凭证字号,然后生成唯一的识别码呢?
2023年06月06日 10点06分
@风亦涵 这是自定义函数,代码复制进模块之后,就能像sum函数、if函数那样使用,不要运行。比如在A1单元格输入=sum(A2:A5),则A2:A5区域里的数将决定A1里数的大小,参数区域决定结果。G2单元格的公式=wanglai(D2),即“往来(对应的科目单元格)”,由D2决定G2的值。
2023年06月06日 11点06分
1