作者yauhh (哟)
看板Visual_Basic
标题Re: [VBA ] 比对资料填值的问题
时间Sat Feb 18 20:28:15 2012
※ 引述《one164 (阿MON)》之铭言:
: 底下这两个For回圈是我自己写的,从2开始的原因是新资料表的(1,1)是空白格
: For i = 2 To count_c '将新资料列放入阵列
: temp = ""
: For j = 1 To 1
: temp = temp & Sheet1.Cells(i, j) '这边用&的符号的意思我不明白
: Next 因为作者本来有用就延用了
: data_c(i) = temp
: Next
这里是data_c(i)是将Sheet1其中一列资料合并为一串文字.
: For i = 1 To 1 '将新资料栏放入阵列
: temp = ""
: For j = 2 To count_d
: temp = temp & Sheet1.Cells(i, j)
: Next
: data_d(i) = temp
: Next
这里data_d(i)是将Sheet1第1列资料合并为一串文字.
: 底下两个是原作者的For回圈
: '将资料A读入阵列
: For i = 1 To count_a
: temp = ""
: For j = 1 To
: temp = temp & Sheet3.Cells(i, j)
: Next
: data_a(i) = temp
: Next
这里以上是说,data_a(i)是Sheet3其中一列资料合并为一串文字
: '将资料B读入阵列
: For i = 1 To count_b
: temp = ""
: For j = 1 To n
: temp = temp & Sheet4.Cells(i, j)
: Next
: data_b(i) = temp
: Next
这里以上是说data_b(i)是将Sheet4其中一列资料合并为一串文字.
: '开始比较A,B资料,有*号部份是我添加上去的
: 我希望做到的部分是在比较出资料A和资料B相同的资料时,
: 从新资料表的栏中(data_d)找出相同的,也从列中找出与data_a(1)相同的
: 找出来後在新资料表的那格储存格填入1,因为是第一次尝试修改VB程式
: 也不懂到底是哪个环节出问题,目前只做到这,再後面就都是原作者的程式码
: a = 0
: b = 0
: c = 0
: *num = 1
: For i = 1 To count_a
: For j = 1 To count_b
: If data_a(i) = data_b(j) Then '如果相等则列印出来
^^^^^^^^^^^^^^^^^^^^^
: c = c + 1
: For k = 1 To n
: temp = Sheet3.Cells(i, k)
: Sheet7.Cells(c, k) = temp
: *For L = 1 To count_d
: *If temp = data_d(L) Then
^^^^^^^^^^^^^^^^
: *For m = 1 To count_c
: *If data_a(1) = data_c(m) Then
^^^^^^^^^^^^^^^^^^^^^
: *Sheet1.Cells(m,L).Value = num
: *End If
: *Next
: *End If
: *Next
你全都用合并的文字来比对,包括 data_a(i) = data_b(j), data_a(1) = data_c(m)
还有 temp = data_d(L), 而temp却是Sheet3.Cells(i,k).
其实按照你所举的例子,如果资料A有一列是one,two,three,资料B有一列是three,four,
你的程式是先合并而拿到 "onetwothree", 然後还拿到 "threefour",
後来会比较 "onetwothree" 是否与 "threefour" 相同,
结果虽然栏位有交集,但是比对的式子不会求得交集.
所以程式跑完之後,Sheet1没有动静.
而且前面data_c和data_d先从Sheet1取资料出来, 之後才想要Sheet1.Cells(m,L)
.Value = num, 而且data_c和data_d还参与比对,这套计算过程看起来很奇怪.
你一该从简单的交集计算开始写写看.
要想一想任意二列资料求交集,求差集,都分别怎麽做.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.112.230.45