昱得資訊工作室
麻辣學園
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?
2008-07-07, 07:55:48
首頁 說明 登入 註冊 贊助論壇 想當作者?
新聞: 會員注意!!麻辣家族討論區[通用版規],請詳閱!!


+  麻辣家族討論區
|-+  MS Office 系列
| |-+  EXCEL
| | |-+  Excel程式區 (版主: hsieh)
| | | |-+  請教一下大家,這個功能如何能達到呢?!
0 會員 以及 1 訪客 正在閱讀本篇主題. « 上一篇主題 下一篇主題 »
頁: [1] 2 向下 列印
作者 主題: 請教一下大家,這個功能如何能達到呢?!  (閱讀 1036 次)
byeagan
小學生
*
離線 離線

文章: 4


請教一下大家,這個功能如何能達到呢?!
« 於: 2008-04-28, 14:31:44 »

在我的附件中有一個excel檔,sheet1是尚未經過處理的檔案,sheet2是經過手動處理的檔案
,我已經爬文過一遍了,但是還是沒有找到能夠轉化這兩個格式的VBA範例檔,功能為把sheet1的資料自動產生到sheet2,而且為sheet2要的格式,能否請各位先進給一點提示,讓小弟解決此問題。

sheet1:

姓名:
王大華
生日:
1997/12/12
星座:
雙子座
住址:
桃園縣平鎮市中正路1號

姓名:
李大為
生日:
1995/8/12
星座:
雙魚座
住址:
台北縣板橋市中山路5號

姓名:
陳小春
生日:
2005/2/11
星座:
獅子座
住址:
高雄縣岡山鎮明德路10號

sheet2:

姓名:   生日:              星座:   住址:
王大華   1997/12/12   雙子座   桃園縣平鎮市中正路1號
李大為   1995/8/12   雙魚座   台北縣板橋市中山路5號
陳小春   2005/2/11   獅子座   高雄縣岡山鎮明德路10號

* 問題.xls (19 KB - 已被下載 14 次.)
已記錄
hsieh
版主
*
在線 在線

會員性別: 男
文章: 3697



Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #1 於: 2008-04-28, 14:59:29 »

程式碼:
Sub nn()
Dim A As Range, Arr(65536, 4), s&, r&, i%, j%
With Sheet1
r = 1
  While r < .[A65536].End(xlUp).Row
    Set A = .Cells(r, 1): j = 0
    For i = 2 To A.CurrentRegion.Rows.Count Step 2
    Arr(s, j) = A.CurrentRegion(i, 1)
    j = j + 1
    Next
  r = r + 9: s = s + 1
  Wend
End With
Sheet2.[A2:D65536] = ""
Sheet2.[A2].Resize(s, 4) = Arr
End Sub
已記錄

回答滿意嗎?
  記得告訴我哦!!
GBKEE
47年次
高中生
*
離線 離線

文章: 192



Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #2 於: 2008-04-28, 15:20:14 »

Sub test()
Dim X As Integer, C As Range
X = Sheet2.Range("A65536").End(xlUp).Row + 1
For Each C In Sheet1.Range("A1:A" & Sheet1.Range("A65536").End(xlUp).Row)
  If C = Sheet1.Range("A1") Then
    Sheet2.Cells(X, "A") = C.Offset(1, 0)
    Sheet2.Cells(X, "B") = C.Offset(3, 0)
    Sheet2.Cells(X, "C") = C.Offset(5, 0)
    Sheet2.Cells(X, "D") = C.Offset(7, 0)
    X = X + 1
  End If
Next
End Sub
已記錄
oobird
凸槌的木工
論壇維護群
*
離線 離線

文章: 4229


Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #3 於: 2008-04-28, 16:35:03 »

提供一個較基礎的循環:
Sub yy()
Dim i%
Sheet2.[a2:d65536] = ""
With Sheet1
For i = 1 To (.[a65536].End(xlUp).Row + 1) \ 9
Sheet2.Cells(i + 1, 1).Resize(1, 4) = Array(.Cells(9 * (i - 1) + 2, 1), .Cells(9 * (i - 1) + 4, 1), .Cells(9 * (i - 1) + 6, 1), .Cells(9 * (i - 1) + 8, 1))
Next i
End With
End Sub
已記錄

結廬待慧君;為使大家少猜題,請在附件中詳細說明 要求 和 效果,解決問題效率高。
GBKEE
47年次
高中生
*
離線 離線

文章: 192



Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #4 於: 2008-04-28, 20:52:03 »

oobird版主的程式在 資料龐大時剎那間就完成
但是版主程式在 I>3641 時發生溢位 原本版主 宣告 I AS Integer 資料型態範圍為 -32,768 到 32,767 是不應該 發生溢位才對 經修改 宣告 I As Long 後可行
同樣的資料本人所寫的程式慢了很多 程式裡 宣告 X AS Integer 沒有發生溢位為何
能否請教 oobird版主 解惑一下 謝謝
已記錄
oobird
凸槌的木工
論壇維護群
*
離線 離線

文章: 4229


Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #5 於: 2008-04-28, 21:11:20 »

因為3641除9非整數。
此例是假設每一筆列數相同。也就是每9列為一筆。
再者上面代碼只是基礎循環的例子,速度並不快的。
已記錄

結廬待慧君;為使大家少猜題,請在附件中詳細說明 要求 和 效果,解決問題效率高。
GBKEE
47年次
高中生
*
離線 離線

文章: 192



Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #6 於: 2008-04-29, 06:35:10 »

因為3641除9非整數。
感謝oobird版主解說 
因為3641除9非整數 發生溢位問題
可是 For i = 1 To (.[a65536].End(xlUp).Row + 1) \ 9 
I是除9後的I全部是整數 oobird版主解說我就無法理解
已記錄
oobird
凸槌的木工
論壇維護群
*
離線 離線

文章: 4229


Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #7 於: 2008-04-29, 10:58:12 »

哦,那就應是a列超過32767列吧?因為取i值時是/9後的值,未/9之前的數字大於32767也會溢出的,必須定義成long類型。要不然就分開兩行寫。
已記錄

結廬待慧君;為使大家少猜題,請在附件中詳細說明 要求 和 效果,解決問題效率高。
byeagan
小學生
*
離線 離線

文章: 4


Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #8 於: 2008-04-29, 14:22:52 »

非常謝謝各位先進的回答。但是大家好像誤會我的意思,我是想說在一片散亂的資料中,如果遇到
"姓名:"這個cell就自動抓取它下一個cell的資料,而"生日:"、"星座"、"地址:"也是雷同,而如果可以再加上每一筆資料的序號就太好了,只是我沒這個貪心,我最主要是不懂第一個功能要如何寫?

我再附件中再附上範例檔,希望各位先進可以幫忙解答一下。謝謝。


* 問題.xls (30 KB - 已被下載 8 次.)
已記錄
oobird
凸槌的木工
論壇維護群
*
離線 離線

文章: 4229


Re: 請教一下大家,這個功能如何能達到呢?!
« 回覆文章 #9 於: 2008-04-29, 15:00:12 »

沒人誤會,是你沒說清楚,而且你給的資料太整齊,所以讓人白費心血。
附件中王大華有兩筆,你是否要去重複?
已記錄

結廬待慧君;為使大家少猜題,請在附件中詳細說明 要求 和 效果,解決問題效率高。
頁: [1] 2 向上 列印 
« 上一篇主題 下一篇主題 »
跳到:  


本頁花了 0.126 秒, 以及 20 次的資料庫查詢.