我有一個偶爾來自新客戶和不同供應商的檔案。檔案沒有設定標準。每個客戶的列數各不相同,但在檔案中始終存在一個客戶名字列、姓氏列和 ID 列,其中前導零。通常,前導零會被洗掉,因此檔案需要重新格式化該列,如果該欄位碰巧發生,我通常必須手動完成并創建一個單獨的列來執行“= TEXT(F2,”00000000“)”位于該客戶的 F 列。
有什么方法可以創建 VBA 腳本以從輸入框中獲取用戶輸入以指向列字母/數字,然后將該范圍設定為變數,然后我可以在公式中使用輸入?還是更好更簡單的方法?到目前為止,我還沒有在我的搜索中找到這樣做的人(也許是因為我沒有考慮更好的方法?)。
注意:我知道我將公式作為字串執行,因此它正在以這種方式讀取變數 - 不確定如何將該范圍甚至選定的單元格地址帶入公式中參考。我希望它類似于
名字 | 姓氏 | ID
約翰 | 能源部 | 123
然后腳本添加列 ID Re-Formatted:
First Name | 姓氏 | 身份證 | ID 重新格式化
約翰 | 能源部 | 123 |
但我不知道如何讓用戶選擇 ID 列,以便在執行“=TEXT(rng,"00000000") 后使用重新格式化列中的前導零自動填充和格式化" :
名字 | 姓氏 | 身份證 | ID 重新格式化
John | 能源部 | 123 | 00000123
感謝您的任何指點和幫助!
Sub Test()
Dim rng As Range
Set ws = ActiveSheet
'Add a column for the ID to be reformatted with leading zeros
With ws
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Cells(1, LastCol 1).Value = "ID Re-Formatted"
.Cells(LastCol 1).Select
.Cells(LastCol 1).EntireColumn.AutoFit
End With
'Get A Column Address From The User for the Original ID Column
On Error Resume Next
Set rng = Application.InputBox( _
Title:="ID Column Selection", _
Prompt:="Select column containing ID", _
Type:=8)
On Error GoTo 0
Range(Cells(2, LastCol 1), Cells(LastRow, LastCol 1)).Formula = "=TEXT(rng,""00000000000"")"
End Sub
uj5u.com熱心網友回復:
要將 Range 物件放入您的公式中,您只需要使用連接即可。在 處停止字串"=TEXT(",然后使用&任一側連接 Range 物件。然后,您只需要"在公式的其余部分之前再添加一個。它看起來如下所示。
Range(Cells(2, LastCol 1), Cells(LastRow, LastCol 1)).Formula = "=TEXT(" & rng & ",""00000000000"")"
更新:對不起,rng確實包含內容,您可以使用rng.Address,但正如您所指出的,您總是得到相同的單元格參考。那是因為當人們選擇單元格時,它選擇它作為絕對參考。這不是最優雅的方法,但這會洗掉$. 您正在將范圍地址讀入字串變數,然后將 $ 替換為空。這有效地改變了您對相對的參考。
Dim rngStr As String
rngStr = rng.Address
rngStr = Replace(rngStr, "$", "")
然后在你的公式中,使用rngStr而不是rng
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/451471.html
