iT邦幫忙

0

在工作表中自動帶入目錄的資料

  • 分享至 

  • xImage

想請問各位高手們
假如我今天在EXCEL做了一個目錄,目錄中有一列資料為「使用者編號」及「姓名」
以下為範例圖片:
範例

那我想請問的問題是
如果我想在「每一個使用者的工作表」中,編號及姓名都可以自動幫我填入
例如:
每一個使用者的工作表
範例

綠框的部分我希望他自動幫我填入目錄中「陳一」的編號,紅框要幫我填入他的姓名

不知道題目及操作是不是可行的呢?如果目錄資料有好幾百筆的話也能成功嗎?
這是我的主管出給我的題目,叫我要想出怎麼用公式,但我在這題真的卡住了很久,不知道該怎麼進行,請求各位高手相助

看更多先前的討論...收起先前的討論...
柯柯 iT邦新手 3 級 ‧ 2023-05-10 10:13:30 檢舉
sheet 去找他的工作表編號
然後跟這個 https://isvincent.pixnet.net/blog/post/44453662-excel-%E5%BF%AB%E9%80%9F%E5%8F%96%E5%BE%97%E9%80%A3%E7%BA%8C%E7%B7%A8%E8%99%9F%E5%B7%A5%E4%BD%9C%E8%A1%A8%E7%9A%84%E7%9B%B8%E5%90%8C%E5%84%B2%E5%AD%98%E6%A0%BC%E5%85%A7
去搭配?
菩薩慈悲:新的xlsx工作表上限也只有一百多萬筆吧(「好幾百筆的話」。我看成好幾百萬筆。哈哈。是末學拙劣。抱歉) 感恩感恩 南無阿彌陀佛
還有,有人實作過,在上萬筆的資料用複雜的公式已經明顯有效能的問題出現了。
我不通公式,程式倒是簡單就能完成如此的工作。但割雞焉用牛刀。阿彌陀佛

萬筆以內就交給公式前輩菩薩教菩薩您吧。感恩感恩 南無阿彌陀佛
BeEvil_Y iT邦新手 4 級 ‧ 2023-05-10 11:52:36 檢舉
你如果只是要做簽到簿,用合併列印就好了,何必多此一舉。
單純用公式也解不出來,至少要會VBA
謝謝各位~我會利用公式和VBA嘗試看看,謝謝大家!
(我不是要做簽到簿~)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
GGU.IN
iT邦新手 4 級 ‧ 2023-05-10 11:32:50
最佳解答

1.首先抓取目前的表名(陳一)

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

https://ithelp.ithome.com.tw/upload/images/20230510/20126833Gf5XVlkmr6.png
2.抓取C2後在目錄內向左帶出編號

=IFERROR(INDEX(目錄!$A:$C, MATCH($C2, 目錄!$B:$B, 0), MATCH(A$1, 目錄!$A$1:$C$1, 0)-1),"")

https://ithelp.ithome.com.tw/upload/images/20230510/20126833so4hmsKHAk.png

另外可以用VBA大量新增工作表

看更多先前的回應...收起先前的回應...
GGU.IN iT邦新手 4 級 ‧ 2023-05-10 13:20:08 檢舉

補個VBA,取目錄中B2~B?大量新增工作表,並複製"範本"工作表內的資料

Sub AddSheets()
    Dim ws As Worksheet
    Dim i As Integer
    Dim nameRange As Range
    Dim nameCell As Range
    Dim sourceSheet As Worksheet
    
    On Error GoTo ErrorHandler
    
    Set nameRange = ThisWorkbook.Sheets("目錄").Range("B2:B4")
    
    If nameRange.Cells.Count < 1 Then
        MsgBox "未指定工作表名稱儲存格!", vbExclamation
        Exit Sub
    End If
    
    Set sourceSheet = ThisWorkbook.Sheets("範本")
    
    For i = 1 To nameRange.Cells.Count
        Set ws = ThisWorkbook.Sheets.Add(After:= _
                 ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
       
        Set nameCell = nameRange.Cells(i)
        If Not nameCell Is Nothing Then
            ws.Name = nameCell.Value
            sourceSheet.Cells.Copy ws.Cells
        End If
    Next i
    
    Exit Sub
    
ErrorHandler:
    MsgBox "發生錯誤:" & Err.Description, vbCritical
    Exit Sub
End Sub

謝謝您!!!剛剛測試完後已經了解了!真的很謝謝您/images/emoticon/emoticon02.gif

GGU.IN iT邦新手 4 級 ‧ 2023-05-10 14:30:44 檢舉

希望你可以稍微去理解一下大概VBA在寫什麼,就會知道怎麼做
1.須建立一個"範本"工作表填入內容及公式
2.Range記得調整
3.這樣就會抓你Range內的"姓名"大量新增工作表,並且複製"範本"的內容
https://ithelp.ithome.com.tw/upload/images/20230510/20126833YtdQ78qtJh.png

有的!不好意思因為第一次嘗試的時候忘記去修改到範本才會導致失敗
真的很謝謝你!

s86951103
真的很抱歉,您好,我有按照您的公式去操作,是有成功也是我想要的沒錯!
但當我想要嘗試第二次時(有重開一個EXCEL),發現無論怎麼嘗試都會顯示#VALUE

已有嘗試自己排除錯誤但是沒有成功
想請問您知道問題出自於哪嗎?

GGU.IN iT邦新手 4 級 ‧ 2023-05-10 17:04:19 檢舉

你有先存檔嗎 這組公式需要抓實體路徑喔

有!這個我知道!

GGU.IN iT邦新手 4 級 ‧ 2023-05-10 17:07:11 檢舉

應該重開就有了吧

我有重開新的EXCEL 也是一樣的情況
謝謝你!我再繼續試嘗試看

我要發表回答

立即登入回答