所有工作表中的vba循环texttocolumns

时间:2019-01-22 00:13:31

标签: excel vba loops

因此,在工作簿中,我有很多工作表,我想使用texttocolumns作为日期,该日期通常类似于“ 11/22/2018 10:59:59 AM”,我只希望它使用带有定界文本到列的MDY。分隔符必须为false。

    #include <iostream> 
    using namespace std;

    int main()
    {
    cout << "Please enter a height for the cone of the tree. [3 - 15]: ";
    int height;
    cin >> height;

if(height < 3 || height > 15)
{
    cout << "ERROR: Value entered is out of bounds." << endl;
    system("pause");
    exit(0);
}

int level = 0;
int space = 0;
int slashes = 0;
int base = 0;
int wood = 0;
int trunk = 0;

for (int level = 0; level < height; level++) //First "Cone" For Loop
{   
    for (int space = height - level - 1; space > 0; space--)  //Second "cone" for loop
        cout << ' ';
    for (int slashes = 0; slashes < 2 * level + 1; slashes++)  //Third "cone" for loop
        cout << '/';
        cout << endl;
}
for (int base = 0; base < 2 * height; base++)
    cout << '-';
    cout << endl;
for (int trunk = 0; trunk < (height / 2); trunk++)
{
    for( int wood = 0; wood < height - 1; wood++)
        cout << ' ';
        cout << '|' << '|';
        cout << endl;
}




system ("pause");
return 0;
 }

 Actual:                    

     /                                     
    ///
   /////
  ///////
 /////////
///////////
------------
     ||
     ||
     ||
 Expected:
     /\
    /  \
   /    \
  /      \
 /        \
/          \
------------
     ||
     ||
     ||

尝试运行此程序时出现错误。我需要更改列“ I”和“ C”,并且结果必须在同一列中。感谢您是否可以提供帮助,因为我整周都在尝试不同类型的循环,但没有任何效果。如果我删除了循环,这一项工作...

以下是示例数据: Sample Data

2 个答案:

答案 0 :(得分:0)

固定宽度可能更合适。您的样本数据留下了一些未解决的问题,但我假设使用mmddyyyy(而不是mdyyyyy)日期格式,并且该数据要么从第1行开始,要么在第1行具有标题标签,且字符数不得超过10个。

For Each ws In ActiveWorkbook.Worksheets
    Select Case ws.Name
        Case "General", "Verification", "OEM Plant Summary"
            'No Code here if excluded
        Case Else

            With ws.Range("C:C")
                .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
                               FieldInfo:=Array(Array(0, xlMDYFormat), Array(10, xlSkipColumn))

            End With

            With ws.Range("I:I")
                .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
                               FieldInfo:=Array(Array(0, xlMDYFormat), Array(10, xlSkipColumn))

            End With

    End Select
Next ws

答案 1 :(得分:0)

为什么需要使用TextToColumns?我很想将文本转换为正确的日期(意味着日期序列号),然后以希望显示日期的任何方式设置列的格式。这种方法的优点是,如果您想稍后知道但不显示它,则可以保留日期中包含的时间值。

但是,由于您打算操纵文本,因此我认为下面的代码效率更高。请尝试。

Sub ReformatDate()

    Const FirstDataRow As Long = 1          ' change as appropriate

    Dim Ws As Worksheet
    Dim Rng As Range
    Dim Arr As Variant
    Dim C As Long
    Dim i As Long

    For Each Ws In Worksheets
        If InStr(1, ",General,Verification,OEM Plant Summary", "," & Ws.Name, _
                 vbTextCompare) = 0 Then
        With Ws
            For C = 3 To 9 Step (9 - 3)         ' columns C & I
                Set Rng = .Range(.Cells(FirstDataRow, C), _
                                 .Cells(.Rows.Count, C).End(xlUp))
                Arr = Rng.Value
                For i = 1 To UBound(Arr)
                    If Len(Arr(i, 1)) Then Arr(i, 1) = Split(Arr(i, 1))(0)
                Next i
                Rng.Value = Arr
                .Columns(C).AutoFit
            Next C
        End With
    Next Ws
End Sub