如果特定文本值,VBA修改代码以在列中添加文本

时间:2017-08-29 13:26:38

标签: vba excel-vba excel

下午好,

以下代码仅将工作表名称添加到列单元格范围D2-D5,而不管单元格D2-D5中的文本是什么。

我是否可以获得修改代码的指导,如果在D栏中有一个特定的单词“Category”或“Store”,它会将工作表名称和“_”添加到单元格值中,该单元格将是“类别“”存储“而不仅仅适用于以下代码的单元格D2-D5?

e.g:

Sheet1_Category Sheet1_Store

 ws.Range("D2").Value = ws.Name & "_" & ws.Range("D2").Value
                ws.Range("D3").Value = ws.Name & "_" & ws.Range("D3").Value
                ws.Range("D4").Value = ws.Name & "_" & ws.Range("D4").Value
                ws.Range("D5").Value = ws.Name & "_" & ws.Range("D5").Value
                DoEvents
                ws.Copy
                ActiveWorkbook.SaveAs sheetDirectory & Application.PathSeparator & ws.Name & "_" & wbName
                DoEvents
                ActiveWorkbook.Close
                validWs = True
        End If
    Next ws

2 个答案:

答案 0 :(得分:0)

它会使用IFINSTR之类的

If instr(1,ws.Range("D3").Value,"CATEGORY")>0 then 
   ws.Range("D3").Value = ws.Name & "_" & ws.Range("D3").Value
end if

或者您可以使用like

if ws.Range("D3").Value like "*CATEGORY*" then

或者您可以使用range("D:D").find

这将有助于http://www.cpearson.com/excel/findall.aspx

答案 1 :(得分:0)

我已经考虑到上面生成以下修改过的代码:

  categoryData = ws.Range("D1").Resize(ws.UsedRange.Rows.count, 1)
                For i = 1 To UBound(categoryData)
                    If categoryData(i, 1) = "store" Then categoryData(i, 1) = ws.Name & "_" & categoryData(i, 1)
                    If categoryData(i, 1) = "category" Then categoryData(i, 1) = ws.Name & "_" & categoryData(i, 1)
                Next i
                ws.Range("D1").Resize(ws.UsedRange.Rows.count, 1) = categoryData
                DoEvents
                ws.Copy
                ActiveWorkbook.SaveAs sheetDirectory & Application.PathSeparator & ws.Name & "_" & wbName
                DoEvents
                ActiveWorkbook.Close
                validWs = True
        End If
    Next ws