Board logo

標題: 請教各位前輩關於VB 一些問題 [打印本頁]

作者: jntseng    時間: 2010-8-4 22:37     標題: 請教各位前輩關於VB 一些問題

我想問題問題如圖所示:
[attach]2198[/attach][attach]2198[/attach]

我所寫的程式如下:
' Macro11 巨集表
'
Dim i As Single
Dim j As Single
Dim k As Single
Dim h As Single
Dim x As Range, Y As Range, rng As Range, r As Long '宣告變數
For j = 1 To 3
For i = 1 To 300
If Cells(1 + i, 38) = Cells(1, 52 + j) Then
Cells(1 + i, 52 + j) = Cells(1 + i, 8)
End If
Next i
Next j
Call tt
End Sub

Public Sub tt()
Dim x As Range, Y As Range, rng As Range, r As Long '宣告變數
Dim y1 As Range, y2 As Range
For h = 1 To 3
r = Cells(65536, 52 + h).End(xlUp).Row      '取的A欄最大列位
Select Case h
Case 1
Set rng = Range("ba2:ba" & r)      '取得資料範圍
For Each x In rng                  '資料範圍內每一儲存格
If x = "" Then                     '若儲存格值為""
    If Y Is Nothing Then           'Y若不存在
     Set Y = x                     '將Y設定為x
Else                               '若Y存在
    Set Y = Union(Y, x)            '結合Y及x成為新的範圍Y
    End If
End If
Next
If Not Y Is Nothing Then Y.Delete (xlUp) '若Y存在將Y刪除

Case 2
Set rng = Range("bb2:bb" & r)      '取得資料範圍
For Each x In rng                  '資料範圍內每一儲存格
If x = "" Then                     '若儲存格值為""
    If y1 Is Nothing Then           'Y若不存在
     Set y1 = x                     '將Y設定為x
Else                               '若Y存在
    Set y1 = Union(y1, x)            '結合Y及x成為新的範圍Y
    End If
End If
Next
If Not y1 Is Nothing Then y1.Delete (xlUp) '若Y存在將Y刪除

Case 3
Set rng = Range("bc2:bc" & r)      '取得資料範圍
For Each x In rng                  '資料範圍內每一儲存格
If x = "" Then                     '若儲存格值為""
    If y2 Is Nothing Then           'Y若不存在
     Set y2 = x                     '將Y設定為x
Else                               '若Y存在
    Set y2 = Union(y2, x)            '結合Y及x成為新的範圍Y
    End If
End If
Next
If Not y2 Is Nothing Then y2.Delete (xlUp) '若Y存在將Y刪除
End Select
Next h
End Sub

我想問的題題如圖所示:
[attach]2199[/attach][attach]2199[/attach]
作者: GBKEE    時間: 2010-8-5 07:57

本帖最後由 GBKEE 於 2010-8-5 07:59 編輯

回復 1# jntseng
Public Sub tt()
    Dim x As Range, Y As Range, rng As Range, r As Long '宣告變數
    Dim y1 As Range, y2 As Range
    Dim Ar, h%
    Ar = Array("ba2:ba", "bb2:bb", "bc2:bc")
    For h = 0 To UBound(Ar)
        r = Cells(65536, 52 + h+1).End(xlUp).Row      '取的A欄最大列位
        Set rng = Range(Ar(h) & r)    '取得資料範圍
        For Each x In rng                  '資料範圍內每一儲存格
            If x = "" Then                     '若儲存格值為""
                If Y Is Nothing Then           'Y若不存在
                    Set Y = x                    '將Y設定為x
                    MsgBox Y.Address
                Else                               '若Y存在
                    Set Y = Union(Y, x)            '結合Y及x成為新的範圍Y
                End If
            End If
        Next
        If Not Y Is Nothing Then Y.Delete (xlUp) '若Y存在將Y刪除
    Next
End Sub
作者: jntseng    時間: 2010-8-6 22:07

回復 2# GBKEE

請問AR=array 是不是可以變成變數呢? 詳細如圖檔紅色字體
[attach]2273[/attach][attach]2273[/attach]
問第二個問題: h% 代表什麼意思?
作者: GBKEE    時間: 2010-8-7 06:10

本帖最後由 GBKEE 於 2010-8-7 08:06 編輯

回復 3# jntseng
附上檔案看看
h%  ->h As Integer
Integer 變數係以範圍為 -32,768 到 32,767 之 16 位元 (2 個位元組) 數字的形式儲存。Integer 的型態宣告字元是百分比符號(%)。
作者: jntseng    時間: 2010-8-7 09:12

回復 4# GBKEE
AR 是取決於我附件裡的AW3~AW46(此地方我會複製並轉置到BA1), 此地方是會隨我的資料A:AQ  改變(此地方的資料是變動的,也就是說AW2 CHARTID目前是44個,此 CHARTID 不是一個定值)
檔案raw data 如附件所示:
[attach]2276[/attach][attach]2276[/attach]
作者: GBKEE    時間: 2010-8-7 12:52

回復 5# jntseng
試試看
  1. Sub Ex()
  2.     Dim AR As Range, E As Range
  3.     Set AR = Sheet1.Range("AW3", Sheet1.Range("AW" & Rows.Count).End(xlUp).Offset(-1))
  4.     'Sheet1.Range("AW" & Rows.Count).End(xlUp).Offset(-1)) -> Sheet1.Range("AW" & Rows.Count) "AW欄最底端的儲存格" .End(xlUp) "往上的第一個有資料的儲存格"
  5.     '.Offset(-1)) 所在的儲存格往上位移一列
  6.     For Each E In AR
  7.     ' 將 E 代數你的程式碼中   
  8.     Next
  9. End Sub
複製代碼

作者: jntseng    時間: 2010-8-8 23:39

回復 2# GBKEE
執行程式在Y=union(Y,x) 會出現問題,因為執行到BB column 就出現問題,不知有沒有什麼方法可以解呢?
作者: GBKEE    時間: 2010-8-9 06:57

回復 7# jntseng
設定變數  如指定變數為物件時 要加上 SET Y=union(Y,x)
Union 方法  傳回兩個或多個範圍的合併範圍
作者: jntseng    時間: 2010-8-9 21:58

回復 8# GBKEE
我是使用你回復1的程式碼執行程式,在你寫的程式碼中已經有set Y=union(Y,x) ,跑出來的結果於BA columm 執行完無問題,但執行到BB column 時就會出現問題




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)