“如何创建工作表的动æ€è§†å›¾ï¼ˆè¿‡æ»¤å™¨ï¼‰â€ - è·Ÿè¿›

时间:2014-12-17 23:24:35

标签: excel excel-vba excel-formula vba

在previous question中,æ供了一个解决方案,用于在å•ç‹¬çš„工作表上创建主列表的动æ€å­é›†ã€‚我需è¦åšä¸€äº›éžå¸¸ç›¸ä¼¼çš„事情,但似乎无法根æ®æˆ‘的具体需è¦ä½¿è§£å†³æ–¹æ¡ˆé€‚应其他问题。

我的情况是我有35个å¸æˆ·è¦è°ƒå’Œã€‚æ¯ä¸ªå¸æˆ·éƒ½æœ‰ä¸€ä¸ªå”¯ä¸€çš„五ä½æ•°å­—。主数æ®åˆ—表有6列。我想为35个å¸æˆ·ä¸­çš„æ¯ä¸ªå¸æˆ·åˆ›å»ºä¸€ä¸ªå·¥ä½œè¡¨ï¼Œæ¯ä¸ªå·¥ä½œè¡¨åªä¼šæå–第三列与特定工作表å¸æˆ·åŒ¹é…的行。

进一步é˜è¿°ã€‚我们åªæ‹¿ä¸‰å五个中的三个。我们将使用40000,40100å’Œ40200.六列是“æ¡ç›®IDâ€ï¼Œâ€œæ—¥æœŸâ€ï¼Œâ€œå¸å·â€ï¼Œâ€œå€Ÿè®°â€ï¼Œâ€œä¿¡ç”¨â€å’Œâ€œå‚考â€ã€‚

在工作表1“40000â€ä¸Šï¼Œæˆ‘想拉出六列数æ®ï¼Œä»…用于“å¸å·â€=我的工作表å称(40000)的行。在第二个工作表,å为“40100â€ï¼Œæˆ‘åªæƒ³åœ¨â€œå¸å·â€åˆ—中为包å«â€œ40100â€çš„è¡Œæå–六列数æ®ï¼Œåœ¨ç¬¬ä¸‰ä¸ªå·¥ä½œè¡¨ä¸Šï¼Œç§°ä¸ºâ€œ40200â€ï¼Œæˆ‘想在“å¸å·â€åˆ—中æå–包å«â€œ40200â€çš„六列数æ®ã€‚

上一个答案æ供了一ç§åœ¨å•ç‹¬çš„工作表上创建å­é›†çš„方法,但键值与主数æ®åˆ—表在åŒä¸€å·¥ä½œè¡¨ä¸Šã€‚我希望在æ¯ä¸ªå·¥ä½œè¡¨ä¸Šåˆ—出键值,这样我就ä¸éœ€è¦ä¸ºæ¯ä¸ªå¸æˆ·æ供完整的数æ®åˆ—表。

编辑: This is the initial question/answer我在上é¢çš„问题中æ到过。我喜欢使用“排åâ€çš„底层解决方案,但就åƒæˆ‘上é¢è¯´è¿‡çš„那样,如果键值å¯ä»¥åœ¨æ¯ä¸ªå·¥ä½œè¡¨ä¸Šï¼Œæˆ‘会很喜欢它,å³40000,40100,40200等等,而ä¸æ˜¯ä¸»æ•°æ®åˆ—表。关键值是工作表å称,å³å¸å·ï¼ˆ40000,40100ç­‰......)

床å•å·²ç»å­˜åœ¨ã€‚æ¯ä¸ªæœˆæˆ‘åªæ‰“开上个月的工作表,将其ä¿å­˜ä¸ºæˆ‘的新月份,并用新月份的数æ®è¦†ç›–æ•°æ®ã€‚

éžå¸¸æ„Ÿè°¢ä»»ä½•å¸®åŠ©ã€‚

谢谢ï¼

1 个答案:

答案 0 :(得分:1)

通过几个嵌套循环很容易实现。

关键è¦ç´ æ˜¯ï¼šèŽ·å–æ¯ä¸ªå·¥ä½œè¡¨çš„最åŽä¸€è¡Œï¼Œå¹¶å¾ªçŽ¯é历行,工作表和列,使用IF语å¥æœ‰æ¡ä»¶åœ°æµ‹è¯•å¸å·æ˜¯å¦ä¸Žå·¥ä½œè¡¨å称匹é…。

让我们从头到尾看一下。跟éšè¯„论:

<强> 1。循环æµè§ˆæºè¡¨ï¼Œæ¯ä¸€è¡Œ

<强> 2。é历æ¯ä¸ªå·¥ä½œè¡¨ä»¥æŸ¥æ‰¾tempAccount值与工作表å称的匹é…

第3。找到匹é…åŽï¼Œå¾ªçŽ¯é历从一个工作表å¤åˆ¶åˆ°ä¸‹ä¸€ä¸ªå·¥ä½œè¡¨çš„所有6列。

<强>试验:

Private Sub AccountsToSheets()

Dim lastRow As Long         'Last Row on source sheet
Dim lastTRow As String      'For last Target Row
Dim target As String        'For temp name
Dim tRow As Long            'Target Row

Dim source As String        'Source Sheet Name
Dim tempAccount As String   'Variable for account number
Dim ws As Worksheet         'For looping through worksheets

    '----SETUP VARIABLES----;
    source = "Sheet1"           'Define Name of Source Sheet HERE
    lastRow = Sheets(source).Range("A" & Rows.count).End(xlUp).row

    '----BEGIN LOOP THROUGH SOURCE SHEET----'
    For lRow = 2 To lastRow
        tempAccount = Sheets(source).Cells(lRow, "C").Text

        '--BEGIN LOOP THROUGH WORKSHEETS TO CHECK FOR MATCH--'
        For Each ws In Worksheets
            If ws.Name <> source Then           'Eliminate checking Source Sheet
                If ws.Name = tempAccount Then   'Use sheet that's name matches tempAccount
                    target = ws.Name
                    lastTRow = Sheets(target).Range("A" & Rows.count).End(xlUp).row
                    tRow = lastTRow + 1         'Set the row value on target sheet

                    '--LOOP THROUGH ALL COLUMNS AND COPY DATA--'
                    For lCol = 1 To 6
                        Sheets(target).Cells(tRow, lCol) = Sheets(source).Cells(lRow, lCol)
                    Next lCol
                End If
            End If
        Next ws
    Next lRow
End Sub

enter image description here enter image description here enter image description here enter image description here

相关问题