Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 1372|回復(fù): 1
打印 上一主題 下一主題

excl數(shù)據(jù)分類代碼求教!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2023-7-10 10:33:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
把sheet1的數(shù)據(jù)按班級(jí)復(fù)到各自工作表中,代碼死循環(huán)了,求教高手!

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2023-7-13 21:58:28 | 只看該作者
樓主的思路估計(jì)是想一行行復(fù)制粘貼。但這里有一個(gè)問(wèn)題需要解決:粘貼完每一行,都需要記錄被粘貼的位置,否則下次粘貼就會(huì)出現(xiàn)空行。

這樣說(shuō)可能有些難以理解。打個(gè)比方:
第一次,復(fù)制數(shù)據(jù)源的第2行,粘貼到工作表“1”的第2行,這時(shí)候記下這個(gè)位置A。
第二次,復(fù)制第3行,粘貼到工作表“2”的第2行,再記下這個(gè)位置B。
第三次,復(fù)制第4行,粘貼到工作表“1”的位置A的下一行,并更新位置A。
…………
這只是2個(gè)工作表,就要記下2個(gè)位置,不僅需要避免混淆,還需要更新。
因此如果一行行復(fù)制,需要定義一個(gè)字典或者集合,以工作表名稱為鍵名(key),以位置作為鍵值(value),才能完成這個(gè)任務(wù)。
個(gè)人覺(jué)得比較復(fù)雜,因此采用一種更加方便的做法,就是使用自動(dòng)篩選,根據(jù)篩選值的個(gè)數(shù)復(fù)制粘貼,這樣的話,相對(duì)來(lái)說(shuō),效率也會(huì)高一些,逐行復(fù)制粘貼20次,但自動(dòng)篩選只有2次。而且不容易混淆。畢竟一個(gè)班只會(huì)復(fù)制粘貼一次。
代碼如下:
  1. Sub feilei()


  2.     Dim lngRows As Long
  3.     Dim i As Long
  4.     Dim lngClass As Long
  5.     Dim dict As New Dictionary
  6.     Dim key As Variant
  7.     '獲取行數(shù)
  8.     lngRows = Sheet1.UsedRange.Rows.Count
  9.    
  10.    
  11.     '篩選不重復(fù)班級(jí),丟進(jìn)字典里,用于后續(xù)篩選
  12.     For i = 2 To lngRows
  13.         lngClass = Sheet1.Range("C" & i)
  14.         If Not dict.Exists(lngClass) Then
  15.             dict(lngClass) = ""
  16.         End If
  17.     Next
  18.    
  19.    
  20.    
  21.     For Each key In dict.Keys
  22.     '激活工作表
  23.         Sheet1.Activate
  24.     '篩選數(shù)據(jù)
  25.         Sheet1.Range("A1:G" & lngRows).AutoFilter 3, key
  26.     '復(fù)制篩選結(jié)果
  27.         Sheet1.Range("A2:G" & lngRows).Select
  28.         Selection.Copy
  29.         For i = 1 To Sheets.Count
  30.         '如果工作表名稱和篩選條件相同(由于name是文本類型,因此需要使用cstr轉(zhuǎn)為文本,否則將無(wú)法粘貼或者報(bào)錯(cuò))
  31.             If Sheets(i).Name = CStr(key) Then
  32.                 Sheets(i).Activate
  33.                 '激活A(yù)2單元格
  34.                 Sheets(i).Range("A2").Activate
  35.                 '粘貼數(shù)據(jù)后跳出循環(huán),可以減少循環(huán)次數(shù)
  36.                 ActiveSheet.Paste
  37.                 Exit For
  38.             End If
  39.         Next
  40.     Next
  41.     '取消自動(dòng)篩選
  42.     Sheet1.Range("A1:G" & lngRows).AutoFilter
  43.    
  44.    
  45. End Sub

復(fù)制代碼

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-17 00:49 , Processed in 0.169137 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表