作者hsnu920 (0rz)
看板Visual_Basic
標題Re: [VBA ] 欄位COPY
時間Thu Oct 17 03:38:09 2013
※ 引述《LiLiHsien ()》之銘言:
: 'for(int i = 0 ;i < array_A的陣列大小 ; i++)
: For i = 1 To 25
: 'if(i!=0)
: If i <> 0 Then
: 'if(array_A[i] == NULL)
: If Cells(i, 1).Value = "" Then
: 'array_B[i] = Array_A[i-1]
: Cells(i, 2) = Cells(i - 1, 1)
: Else
: 'array_B[i] = Array_A[1]
: Cells(i, 2) = Cells(i, 1)
: End If
: Else
: 'array_B[i] = Array_A[1]
: Cells(i, 2) = Cells(i, 1)
: End If
: Next
: 以上是我更改大大提供的程式碼
: 不過他在A列空值的狀況只能印出兩個
: 且不能達到我有兩個同一類需求的時候
: A B
: 1 dog dog
: 2 cat cat1
: 3 cat1
: 4 cat cat2
: 5 cat2
: 6 bird bird
: 7 bird
: 8 bird
: 9 bird
: A的原有的 , 我想產生B列
: 若如果A的類別只有一種(dog) , 則B只會依序印出dog
: 但如果A的類別重複(cat有兩個) , 則B會列出cat1,cat1
: 等碰到A列的另一個cat , B在繼續印出cat2,cat2.....
: 不知這該如何表示
: 麻煩大大提供一些意見 謝謝 : )
A列空值只能印出兩個 應該是因為筆誤
改成
Cells(i, 2) = Cells(i - 1,
2)
抓B列上面一個值就可以
至於你的問題要判斷A列是否有重複就比較複雜
我自己習慣 [也許有更快的做法]
會先弄出一個陣列
把有重複的項目存起來
然後填B列的時候 跟存在記憶體中的陣列比對 決定後面要不要加數字
另外還要開一個變數 用來決定後面要加的值是1 or 2 or 3
要達到你所有要求 整個寫下來程式碼並不短
以上拙見
======附錄========
'**********讀取A列重複項目為y()陣列************
m = 0
For i = 1 To 35
If Cells(i, 1).Value <> "" Then
If m > 0 Then
If y(m - 1) <> Cells(i, 1).Value Then
y(m - 1) = Cells(i, 1).Value
Else
y(m) = Cells(i, 1).Value
m = m + 1
End If
Else
y(m) = Cells(i, 1).Value
m = m + 1
End If
End If
Next i
'***********暫存變數歸零**********
j = 0
r = 0
x = ""
'***********判斷B列該填寫的內容*********
For i = 1 To 35
If i = 1 Then '***B1格要拉出來另外寫 因為如果A1空的 並不存在B0這個值***
If Cells(1, 1) <> "" Then
For n = 0 To m - 2
If Cells(1, 1).Value = y(n) Then
Cells(1, 2).Value = Cells(1, 1).Value + Str(1)
j = 1
x = Cells(1, 1).Value + Str(j)
ElseIf r = 0 Then
Cells(1, 2).Value = Cells(1, 1).Value
x = Cells(1, 1).Value
End If
r = 1
Next n
End If
Else '***處理B2之後***
r = 0
If Cells(i, 1).Value = "" Then '***A(i)格空白***
Cells(i, 2).Value = Cells(i-1, 2).Value
Else '***A(i)格有值***
For n = 0 To m - 2 '***比對A(i)與記憶體的y陣列***
If Cells(i, 1).Value = y(n) Then r = 1
Next n
If r = 1 Then '***A(i)存在於陣列中***
If Cells(i, 1).Value + Str(j) <> x Then j = 0
j = j + 1
Cells(i, 2).Value = Cells(i, 1).Value + Str(j)
x = Cells(i, 1).Value + Str(j)
Else '***A(i)不存在陣列中***
Cells(i, 2).Value = Cells(i, 1).Value
x = Cells(i, 1).Value
j = 0
End If
End If
End If
Next i
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 152.7.224.5
※ 編輯: hsnu920 來自: 152.7.224.5 (10/17 03:49)
1F:推 LiLiHsien:謝謝大大 後來想到解決方法了 感謝你們的熱心幫忙 10/17 22:35
2F:推 timestoprun:推推推!!我都忙到忘記來這看了XDD 10/19 02:04