Excel 如何为单元格赋值?

Excel 如何为单元格赋值?,excel,vba,Excel,Vba,我正在尝试导入一个文本文件并在Excel中处理它 第一步是将数据分成两组:标题和内容 我创建了两个工作表。然后导入文本数据。然后确定数据文件的高度、宽度和项数 试图将标题数据复制到其中一个工作表时出现问题。我没有得到任何价值 我已尝试指定为值: Worksheets("TIME").Range(Cells(j, k)).Value = Range(Cells(i, k)).Value 作为固定值: Worksheets("TIME").Range(Cells(j, k)).Value = 1

我正在尝试导入一个文本文件并在Excel中处理它

第一步是将数据分成两组:标题和内容

我创建了两个工作表。然后导入文本数据。然后确定数据文件的高度、宽度和项数

试图将标题数据复制到其中一个工作表时出现问题。我没有得到任何价值

我已尝试指定为值:

Worksheets("TIME").Range(Cells(j, k)).Value = Range(Cells(i, k)).Value
作为固定值:

Worksheets("TIME").Range(Cells(j, k)).Value = 1
我在回路上放置了一个计数器,它们工作正常

On Error Resume Next
Worksheets.Add.Name = "RAW"
Worksheets.Add.Name = "TIME"
Sheets("RAW").Select

'Import and copy data to RAW sheet. It is working so I did not copy it.

Range("A1").End(xlToRight).Select
WidthFile = ActiveCell.Column
Range("A1").End(xlDown).Select
HeightFile = ActiveCell.Row
Range("A1").Select
NumberObs = Application.WorksheetFunction.CountIf(ActiveSheet.Range _
              (Cells(1, 1), Cells(HeightFile, 1)), Range("A1").Value)
Sample = Range("A1").Value
j = 1

For i = 2 To HeightFile
    If Range(Cells(i, 1)).Value = Sample Then
        For k = 1 To WidthFile
            Worksheets("TIME").Range(Cells(j, k)).Value = _
                               Range(Cells(i, k)).Value
        Next
        j = j + 1
    End If
Next
我希望将原始工作表上的行作为导入数据,该行与“时间”工作表上复制的“原始”工作表上的第一个单元格匹配。我有一张空白的工作表

我在原始工作表中得到的数据文件如下:

时间工作表的预期结果应为:
时间工作表预期结果样本

建议使用
对象
并在单个对象上执行多个语句时使用:即,使用:

With Range("A1")
   WidthFile = .End(xlToRight).Column
   HeightFile= .End(xlDown).Row
End With
.Cells(j, k).Value
与此相反:

Range("A1").End(xlToRight).Select
WidthFile = ActiveCell.Column
Range("A1").End(xlDown).Select
HeightFile = ActiveCell.Row
.Range(Cells(j, k)).Value
还请注意,返回一个
范围
,因此请使用以下选项:

With Range("A1")
   WidthFile = .End(xlToRight).Column
   HeightFile= .End(xlDown).Row
End With
.Cells(j, k).Value
与此相反:

Range("A1").End(xlToRight).Select
WidthFile = ActiveCell.Column
Range("A1").End(xlDown).Select
HeightFile = ActiveCell.Row
.Range(Cells(j, k)).Value
我对您提供的代码做了一些调整。试试这个:

Sub test()
Dim wsRaw As Worksheet
Dim wsTime As Worksheet
Dim lRows As Long, lCols As Long
Dim lNbrObs As Long, vSample As Variant
Dim j As Long, i As Long, k As Long

    Rem Add these lines after the worksheets had been added
    With ThisWorkbook
        Set wsRaw = .Worksheets("RAW")
        Set wsTime = .Worksheets("TIME")
    End With

    With wsRaw

        lRows = .Cells(1).End(xlDown).Row
        lCols = .Cells(1).End(xlToRight).Column
        vSample = .Cells(1).Value2
        lNbrObs = Application.WorksheetFunction _
            .CountIf(.Cells(1).Resize(lRows), vSample)

        For i = 2 To lRows
            If .Cells(i, 1).Value2 = vSample Then
                j = 1 + j
                For k = 1 To lCols
                    wsTime.Cells(j, k).Value2 = .Cells(i, k).Value2

    Next: End If: Next: End With

    End Sub

建议使用
对象
并在单个对象上执行多个语句时使用:即,使用:

With Range("A1")
   WidthFile = .End(xlToRight).Column
   HeightFile= .End(xlDown).Row
End With
.Cells(j, k).Value
与此相反:

Range("A1").End(xlToRight).Select
WidthFile = ActiveCell.Column
Range("A1").End(xlDown).Select
HeightFile = ActiveCell.Row
.Range(Cells(j, k)).Value
还请注意,返回一个
范围
,因此请使用以下选项:

With Range("A1")
   WidthFile = .End(xlToRight).Column
   HeightFile= .End(xlDown).Row
End With
.Cells(j, k).Value
与此相反:

Range("A1").End(xlToRight).Select
WidthFile = ActiveCell.Column
Range("A1").End(xlDown).Select
HeightFile = ActiveCell.Row
.Range(Cells(j, k)).Value
我对您提供的代码做了一些调整。试试这个:

Sub test()
Dim wsRaw As Worksheet
Dim wsTime As Worksheet
Dim lRows As Long, lCols As Long
Dim lNbrObs As Long, vSample As Variant
Dim j As Long, i As Long, k As Long

    Rem Add these lines after the worksheets had been added
    With ThisWorkbook
        Set wsRaw = .Worksheets("RAW")
        Set wsTime = .Worksheets("TIME")
    End With

    With wsRaw

        lRows = .Cells(1).End(xlDown).Row
        lCols = .Cells(1).End(xlToRight).Column
        vSample = .Cells(1).Value2
        lNbrObs = Application.WorksheetFunction _
            .CountIf(.Cells(1).Resize(lRows), vSample)

        For i = 2 To lRows
            If .Cells(i, 1).Value2 = vSample Then
                j = 1 + j
                For k = 1 To lCols
                    wsTime.Cells(j, k).Value2 = .Cells(i, k).Value2

    Next: End If: Next: End With

    End Sub

我会避免在代码中使用
Select
Active
,也可以得到最后一行和最后一列,我会选择像
Dim WidthFile一样长的文件,然后选择
WidthFile=Range(“A1”)。结束(xlRight).Row
我会避免在你的代码中使用
选择
激活
,也可以得到最后一行和最后一列,我会选择像
Dim WidthFile一样长的
,然后选择
WidthFile=Range(“A1”).End(xlRight)。Row
确实是一种干净的方法。谢谢我已经接受了你的想法,但仍然不起作用。在“时间”工作表上,我没有值,它是空的。答案中的代码符合您提供的代码的意图,为了确保输出符合您的预期,我们需要确切地知道“预期结果是什么”。因此,请编辑您的帖子,以便在两个工作表中都包含您的数据样本,指示之前和之后的状态。这是一个非常干净的方法。谢谢我已经接受了你的想法,但仍然不起作用。在“时间”工作表上,我没有值,它是空的。答案中的代码符合您提供的代码的意图,为了确保输出符合您的预期,我们需要确切地知道“预期结果是什么”。因此,请编辑您的帖子,以便在两个工作表中都包含您的数据样本,指示之前和之后的状态。