返回列表 上一主題 發帖

[發問] 資料轉置貼上

回復 20# 蘿蔔泥

上次寫的是將資料貼上步驟1>步驟2>步驟3
>> 上次寫的是由步驟1資料,轉成2的格式,且轉成3的格式,所以資料來源都是來自於 "1"
若資料是直接貼上步驟2,再由步驟2轉成步驟3呢?
>>這不就是和上次寫的結果一樣嗎?

TOP

回復 17# 准提部林


    您好,謝謝您幫我改的,變的超級方便
    想請教您幾個函數的問題
    1.關於&或$與%,VBA書上沒出現過這個,不曉得是指什麼意思
    2.
      Dim MyArray(1 To 10, 5 To 15, 10 To 20)    ' Declare array variables.
      Upper = UBound(MyArray, 1)    ' Returns 10.
      Upper = UBound(MyArray, 3)    ' Returns 20.
      網路上只看過上面這種用法
      Arr = [n13].CurrentRegion      
      UBound(Arr, 2)>>>>這是指什麼意思呢?
   3.資料來源目前會有兩種,第一種是步驟1>步驟2>步驟3....這您上次有幫我解決
      若是第二種可直接貼上步驟2,並且登記到步驟3......可以改成如果步驟1是空格直接抓步驟2貼上步驟3嗎?
  1. Sub 資料轉置貼上()

  2. Dim Arr, Brr, i&, j&, T$, R&, C%
  3. Range("a13:g2000").ClearContents

  4. If Arr = [n13].CurrentRegion <> "" Then
  5. ReDim Brr(1 To 2000, 1 To 7)
  6. For j = 1 To UBound(Arr, 2)
  7.     For i = 1 To UBound(Arr)
  8.         T = Arr(i, j): If T = "" Then GoTo i01
  9.         C = C + 1: Brr(R + 1, C) = T
  10.         If C = 7 Then C = 0: R = R + 1
  11. i01: Next i
  12. Next j
  13. [a13].Resize(R + 1, 7) = Brr
  14. Else


  15. End Sub
複製代碼

Xl0000798.zip (45.43 KB)

TOP

回復 21# samwang


不好意思,我沒說清楚,
因為來源會有兩種格式,
如是步驟1的格式,流程就是步驟1>步驟2>步驟3
如是步驟2的格式,流程就是步驟2>步驟3

TOP

回復  samwang


不好意思,我沒說清楚,
因為來源會有兩種格式,
如是步驟1的格式,流程就是步驟1>步 ...
蘿蔔泥 發表於 2021-11-25 11:58


如何判斷資料來源是 1 還是 2 區域的資料?
如果2 個區域都有資料時要以哪個為主 ?

TOP

回復 22# 蘿蔔泥


  1.關於&或$與%,VBA書上沒出現過這個,不曉得是指什麼意思 >>可上網找一下就有,那些是 Dim 的簡寫 "&" = as Long
    2.
       Dim MyArray(1 To 10, 5 To 15, 10 To 20)    ' Declare array variables.
       Upper = UBound(MyArray, 1)    ' Returns 10.
       Upper = UBound(MyArray, 3)    ' Returns 20.
       網路上只看過上面這種用法
      Arr = [n13].CurrentRegion      
       UBound(Arr, 2)>>>>這是指什麼意思呢? >> 取Arr的欄位數
   3.資料來源目前會有兩種,第一種是步驟1>步驟2>步驟3....這您上次有幫我解決
      若是第二種可直接貼上步驟2,並且登記到步驟3......可以改成如果步驟1是空格直接抓步驟2貼上步驟3嗎? >> 2區都有資料時要以哪個為主??

TOP

如何判斷資料來源是 1 還是 2 區域的資料?
如果2 個區域都有資料時要以哪個為主 ?
samwang 發表於 2021-11-25 12:15



    不會兩個區域都有資料,只會有其中一個

TOP

回復  蘿蔔泥


  1.關於&或$與%,VBA書上沒出現過這個,不曉得是指什麼意思 >>可上網找一下就有,那些 ...
samwang 發表於 2021-11-25 12:27


請問VBA是哪個科系會學到呢?
我以前沒學過只是工作上需要,目前我都是自己買書回來學習,
很難學會怎應用,而且南部很少有這種課可以上,
是否有推薦的書籍可以看呢?

TOP

不會兩個區域都有資料,只會有其中一個
蘿蔔泥 發表於 2021-11-25 13:34


請再試看看,謝謝
Sub test2()
Dim Arr, Brr(1 To 1000, 1 To 3), Crr()
Dim i&, j&, n%, s%, m%, R%
If [n13] <> "" Then
    Arr = [n13].CurrentRegion  '來源資料1
    For j = 1 To UBound(Arr, 2): For i = 1 To UBound(Arr)
        If Arr(i, j) <> "" Then
            If n < 7 Then n = n + 1 Else n = 1
            s = s + 1: Brr(s, 1) = n
            Brr(s, 2) = Arr(i, j): Brr(s, 3) = s
        End If
    Next i: Next j
ElseIf [k13] <> "" Then
    Arr = Range([k13], [k65536].End(3)) '來源資料2
    For i = 1 To UBound(Arr)
        If Arr(i, 1) <> "" Then
            s = s + 1: Brr(s, 2) = Arr(i, 1)
        End If
    Next
End If

R = Int(s / 7) + 1: ReDim Crr(1 To R, 1 To 7): k = 1
For i = 1 To s
    For j = 1 To 7
        m = m + 1: If m > s Then GoTo 99
        Crr(i, j) = Brr(m, 2)
    Next
99: Next i
Range("a13").Resize(R, 7) = Crr  '轉貼到3
End Sub
   

TOP

請問VBA是哪個科系會學到呢?
我以前沒學過只是工作上需要,目前我都是自己買書回來學習,
很難學會怎 ...
蘿蔔泥 發表於 2021-11-25 13:37


我狀況也是和您一樣,因為工作需要買書回來看,但是要應用就有點難度
最後自己在此網站看其他前輩的寫法後,自己要嘗試寫、多練習、遇到問題再詢問
加油 加油,謝謝

TOP

Sub 資料轉置貼上()
Dim Arr, Brr, i&, j&, T$, R&, C%
Range("a13:g2000").ClearContents
If [k13] <> "" Then Arr = Range([k13], [k65536].End(xlUp)(2))
If [n13] <> "" Then Arr = [n13].CurrentRegion
ReDim Brr(1 To 2000, 1 To 7)
If Not IsArray(Arr) Then Brr(1, 1) = Arr: GoTo 999  '若資料只有一個~~ For j = 1 To UBound(Arr, 2)
For i = 1 To UBound(Arr)
        T = Arr(i, j): If T = "" Then GoTo i01
        C = C + 1: Brr(R + 1, C) = T
        If C = 7 Then C = 0: R = R + 1
i01: Next i
Next j
999: [a13].Resize(R + 1, 7) = Brr
End Sub

TOP

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題