如何在VBA数组中修改字符串类型的TRUE、FALSE值?
解决VBA处理字符串型TRUE/FALSE不生效的问题
问题根源
当使用Value2读取单元格时,Excel会自动将字符串形式的"TRUE"/"FALSE"转换为VBA的布尔型常量(True/False)。后续通过LCase(CStr(arr(i,c)))转换得到的小写字符串,写回单元格时又会被Excel自动识别为布尔值,默认显示为大写的TRUE/FALSE,导致视觉上看起来没有变化。
解决方案
方法一:读取纯文本+设置文本格式写入
先遍历单元格读取纯文本内容存入数组,避免自动转换;写入前设置单元格为文本格式,确保内容按字符串显示:
Sub True_False() Dim ws As Worksheet: Set ws = ActiveSheet Dim rng As Range, arr, lastRow As Long, i As Long, c As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set rng = ws.Range("A2:E" & lastRow) ' 初始化数组,逐个读取单元格文本内容 ReDim arr(1 To rng.Rows.Count, 1 To rng.Columns.Count) For i = 1 To rng.Rows.Count For c = 1 To rng.Columns.Count arr(i, c) = rng.Cells(i, c).Text Next c Next i ' 转换为小写 For i = 1 To UBound(arr, 1) For c = 1 To UBound(arr, 2) arr(i, c) = LCase(arr(i, c)) Next c Next i ' 设置单元格为文本格式,避免自动转换 rng.NumberFormat = "@" rng.Value = arr End Sub
方法二:添加单引号强制文本写入
转换后给字符串添加单引号前缀,强制Excel将内容识别为文本,避免自动解析为布尔值:
Sub True_False() Dim ws As Worksheet: Set ws = ActiveSheet Dim rng As Range, arr, lastRow As Long, i As Long, c As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set rng = ws.Range("A2:E" & lastRow) arr = rng.Value2 For i = 1 To UBound(arr, 1) For c = 1 To UBound(arr, 2) ' 转小写后加单引号,强制Excel按文本处理 arr(i, c) = "'" & LCase(CStr(arr(i, c))) Next c Next i rng.Value = arr End Sub
两种方法区别
- 方法一最终单元格内容为纯小写字符串(无前缀),单元格格式为文本。
- 方法二写入的内容带单引号前缀(编辑时可见,单元格显示时隐藏),直接显示小写的true/false。
内容的提问来源于stack exchange,提问作者Leedo
相关产品推荐
相关产品推荐

