我编写了一个非常简单的代码,它返回一个范围内每个活动单元格的最后6个字符。
代码工作得很好,直到找到一个特定的单元格,其中要返回的字符应为:" MARC01"。不幸的是,它返回一个日期类型字符(01.Mrz)。
通过使用普通的excel公式,它工作正常,这就是为什么我希望它也能用于宏。
在这里,您可以看到我的代码,该代码从列#34; A"并在#34; B":
栏中输入 Range("B12").Activate
Do
ActiveCell.Value = Right((ActiveCell.Offset(0, -1).Value), 6)
ActiveCell.Offset(1, 0).Activate
Loop Until ActiveCell.Offset(0, -1).Value = 0
答案 0 :(得分:3)
Excel喜欢将任何看似可能日期的内容更改为日期。为了强制这种情况发生,请在公式前添加$ export PYTHONPATH=.
$ python parser.py
hello
hello
。
"'"
这将迫使它留下文字。不利的一面是,如果它是一个数字,它将被保存为文本。
答案 1 :(得分:3)
Excel喜欢尝试解释某些数据,而不是将其保留原样。它特别适用于看起来像日期和数字条目的字符串。
两种解决方法是
Sub foo()
Range("B12").Activate
Do
ActiveCell.NumberFormat = "@"
ActiveCell.Value = Right((ActiveCell.Offset(0, -1).Formula), 6)
ActiveCell.Offset(1, 0).Activate
Loop Until ActiveCell.Offset(0, -1).Value = 0
End Sub
答案 2 :(得分:0)
有了这个简单的目标,我就不知道你为什么需要VBA循环。
您可以将formular1c1质量设置为WITH Cte AS(
SELECT *,
Rn = ROW_NUMBER() OVER(PARTITION BY ProductCode ORDER BY (SELECT NULL))
FROM Product
)
SELECT
ProductCode = CASE WHEN Rn = 1 THEN c.ProductCode ELSE '' END,
Color
FROM Cte c
ORDER BY c.ProductCode
。
=RIGHT(RC[-1],6)