Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Excel VBA-用于处理范围的数组更改单元格的格式_Arrays_Excel_Vba_Format - Fatal编程技术网

Arrays Excel VBA-用于处理范围的数组更改单元格的格式

Arrays Excel VBA-用于处理范围的数组更改单元格的格式,arrays,excel,vba,format,Arrays,Excel,Vba,Format,我使用一个数组来处理我在表格中的值(和文本): Dim arr As Variant arr = Application.ActiveSheet.UsedRange 'do stuff Application.ActiveSheet.UsedRange = arr 但是,这有一个副作用:当将数组转储回单元格时,Excel的默认行为会更改单元格格式。例如,存储为以“0”开头的文本的数字将转换为数字,“0”将被删除。或将“1-11”等文本转换为日期(“11月1日”);可能还有一些我还没有发现的

我使用一个数组来处理我在表格中的值(和文本):

Dim arr As Variant

arr = Application.ActiveSheet.UsedRange
'do stuff
Application.ActiveSheet.UsedRange = arr
但是,这有一个副作用:当将数组转储回单元格时,Excel的默认行为会更改单元格格式。例如,存储为以“0”开头的文本的数字将转换为数字,“0”将被删除。或将“1-11”等文本转换为日期(“11月1日”);可能还有一些我还没有发现的

如果我监视“局部变量”窗口,字符串将作为字符串保留在数组中,直到最后一刻,因此卸载会把事情搞砸

有没有办法避免这种行为

编辑:我也试过:

Application.ActiveSheet.UsedRange.Value = arr
Application.ActiveSheet.UsedRange.Value2 = arr
Application.ActiveSheet.UsedRange.text = arr

每个都有相同的结果。

您可以使用valuetype选项保留格式设置等:11是xlRangeValueXMLSpreadsheet

Sub CopyWithFormat()
Dim var As Variant
var = Range("A8:A11").Value(11)
Range("C8:C11").Value(11) = var
End Sub
但这将使修改数组中的值变得困难。 因此,循环数组添加'

Sub CopyWithFormat2()
    Dim var As Variant
    Dim j As Long
    var = Range("A8:A11").Value
    For j = 1 To UBound(var)
        If VarType(var(j, 1)) = vbString Then var(j, 1) = "'" & var(j, 1)
    Next j
    Range("C8:C11").Value = var
End Sub
也尝试

YourRangeVariable.NumberFormat = "@"

YourRange.Value=Your Array

这将首先将范围转换为文本。在使用01-11这样的值时对我很有效,并且省去了循环操作。

为什么不在粘贴数组之前将格式复制到一张空表中,然后再粘贴(仅限格式)到范围中?我也想到了,但文本已经更改了;将格式粘贴回去不会在电话号码前添加“0”;此外,转换为日期时,文本已存储为日期序列号(例如,-“1-11”已转换为值42746;粘贴格式不会将其更改回“1-11”)然后,你必须在数组中的所有值前面添加一个
,你不想被识别为数字,但希望保留为文本。有关更多信息,请阅读:@Ralph:我不知道这些文本是什么;文本会周期性地变化;我说的是数十万个数据点,它们是非常随机的n格式方面第一个选项确实使处理值变得困难。第二个选项仅在我专门处理字符串时有效;如果我混合了数字和字符串,它会将所有内容转换为字符串。在将值加载到数组之前,我需要保留单元格的任何格式。我不需要更改单元格式当我测试它时,第二个选项不会将数字转换为字符串,并正确处理数字和字符串以及货币、文本、日期、数字等格式的混合。(确定不会复制数字的小数点格式,但它们会复制为数字)。如果您继续将数字转换为字符串,请提供一些测试数据。我已更正,您是对的;我在代码中的.text尝试仍然失败