|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
我给DeepSeek的提问是:
这里上传了一个Excel文件,其中A:E是原数据,A1:E1是表头,下方各单元格中均为5个字母组成的港口代码,E列的单元格中可能有多个港口代码,以“,”分隔,如果只剩下一个港口代码,则不需要“,”。需要增加一个按钮控件,添加上文字“点击运行”,后续需要点击该按钮运行宏,因为我使用WPS办公软件,所以现在需要使用WSP宏编辑器,宏的内容如下:1、如果E列中有“VNSGN”且同一行的A列或D列有“KHPPH”,则把E列中该行的“VNSGN”删除,若此时该单元格只有“VNSGN”,单元格填上#,若单元格有多个港口则仅删除VNSGN,同时确保没有多余的“,”。2、如果E列中有“JPYOK”且同一行的A列或D列存在非JPYOK的其它的JP开头的港口,例如JPHHE、JPSDJ等,则把E列中该行的“JPYOK”删除,若此时该单元格只有“JPYOK”,单元格填上#,若单元格有多个港口则仅删除JPYOK,同时确保没有多余的“,”。
3、要考虑以上两种情况同时满足的情况。注意:第一,G1:K13是运行结果的示例,运行结果请直接体现在E列。第二,真实数据可能有无限行,附件中仅节选了一部分。
DeepSeek回复的代码如下:(但我运行没有任何反应,大牛们能帮我看一下吗?)
function ProcessData() { try { const sheet = Application.ActiveSheet; const lastRow = sheet.Range("E65536").End(xlUp).Row; let modifiedCount = 0; for (let i = 2; i <= lastRow; i++) { // 获取当前行数据 const cellE = sheet.Cells.Item(i, 5); let originalE = cellE.Text.replace(/\s/g, ""); // 清理空格 const portA = sheet.Cells.Item(i, 1).Text.trim(); const portD = sheet.Cells.Item(i, 4).Text.trim(); let modified = false; // 条件1:删除VNSGN(当A或D列有KHPPH时) if (originalE.includes("VNSGN") && (portA === "KHPPH" || portD === "KHPPH")) { originalE = ProcessString(originalE, "VNSGN"); modified = true; } // 条件2:删除JPYOK(当A或D列有JP开头非YOK时) const hasJP = (portA.startsWith("JP") && portA !== "JPYOK") || (portD.startsWith("JP") && portD !== "JPYOK"); if (originalE.includes("JPYOK") && hasJP) { originalE = ProcessString(originalE, "JPYOK"); modified = true; } // 特殊双重删除逻辑(用户示例第10行) if ((portA === "KHPPH" || portD === "KHPPH") && hasJP) { originalE = ProcessString(originalE, "VNSGN"); originalE = ProcessString(originalE, "JPYOK"); modified = true; } // 更新单元格并记录修改 if (modified) { cellE.Value2 = originalE === "" ? "#" : originalE; modifiedCount++; } } // 显示处理结果 Application.Alert(`处理完成!共修改 ${modifiedCount} 行数据。`, xlInformation); } catch (e) { Application.Alert("运行错误: " + e.message, xlCritical); }}function ProcessString(inputStr, removeKey) { if (!inputStr || inputStr === "#") return "#"; const arr = inputStr.split(",") .filter(item => item.trim() !== removeKey) .map(item => item.trim()); return arr.length > 0 ? arr.join(",") : "#";}
|
|