2016-04-01 22 views
0

私は過去4日間にスタック交換コミュニティのメンバーと仕事をしていましたが、私はVBAで広範囲に働いていました(vBAは4日間使用していました:))。私は提示された日付を取ってフォーマットを標準化する必要がある問題がありました(日付はシート全体で異なりました)。 vba - set data in cell to what date is being displayedvba - 範囲ループ提供Jan1900日付エラー

これは私が達成しようとしていたもののために働いていました。細胞にデータが含まれていない場合、デフォルトでは01/Jan/1900になるという副作用がありました。

コードは以下のとおりです。

timestart = 1  #Column 1 
completeBad = 2 #Column 2 
timeSet = 24  #Column 24 
completeTime = 25 #Column 25 
lastrow = 1000 

Range(Cells(2, timeSet), Cells(lastrow, completeTime)).NumberFormat = "@" 
Range(Cells(2, timeSet), Cells(lastrow, timeSet)).NumberFormat = "@" 
Range(Cells(2, timestart), Cells(lastrow, timestart)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(2, timestart), Cells(lastrow, timestart)).Address(0, 0) & ",""dd/mmm/yyyy""),)") 
Range(Cells(2, completeBad), Cells(lastrow, completeBad)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(2, completeBad), Cells(2, completeBad)).Address(0, 0) & ",""dd/mmm/yyyy""),)") 
For Q = 2 To lastrow 
    Cells(Q, timeSet).Value = Cells(Q, timestart).Value 
    Cells(Q, completeTime).Value = Cells(Q, completeBad).Value 
next Q 

ここでは何も起こりません。 Justsはセルの書式/テキストを設定し、テキスト用に設定されたセルにデータをコピーします。

timestartおよびcompleteBadのセルにデータがない場合、これにより、多くの細胞が表示されます(01/Jan/1900)。

私はこれを各セルにループさせようとしています。私のコードは以下の通りです:

timestart = 1  #Column 1 
completeBad = 2 #Column 2 
timeSet = 24  #Column 24 
completeTime = 25 #Column 25 
lastrow = 1000 
For Q = 2 To lastrow 
If Cells(Q, timestart) <> "" Then 
    Range(Cells(Q, timestart), Cells(Q, timestart)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(Q, timestart), Cells(Q, timestart)).Address(0, 0) & ",""dd/mmm/yyyy""),)") 
    Cells(Q, timeSet).Value = Cells(Q, timestart).Value 
End If 
If Cells(Q, projCom) <> "" Then 
    Range(Cells(Q, completeBad), Cells(Q, completeBad)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(Q, completeBad), Cells(Q, completeBad)).Address(0, 0) & ",""dd/mmm/yyyy""),)") 
    Cells(Q, completeTime).Value = Cells(Q, completeBad).Value 
End If 

私は、少なくともrangeでコードが私のためにデータを修正したように、単一のセルを選択するために、rangeを使用しようとしました。

これは私のすべてのセル(私の日付の列の私の呼び出し)の#VALUE!を返します。私は一度に1つのセルだけを変更するために複数の方法を試みましたが、私は#VALUE!を受け取っています。それとも、私のコードにエラーがあります。私のループではうまくいかない別の例は以下の通りです。誰かが私が上記の完全なコードまたは私のコードを以下のコードを呼び出すことで間違っていることにいくつかの光を当てることができます(range私のforループで使用された置き換え、

Cells(Q, timestart).Value = Evaluate("""'"" & INDEX(TEXT(" & Cells(Q, timestart).Address(0, 0) & ",""dd/mmm/yyyy""),)") 
+0

を**#列1/2/25分の24 **は、実際に私のコードの一部ではありません。私は誰にとっても読みやすさのためにこれを含めました。タイプミスがある場合は、恐ろしい忍者のタイプのスキルでしょう。 – bluerojo

答えて

2

だから、これは空白は無視されます:

timestart = 1  '#Column 1 
completeBad = 2 '#Column 2 
timeSet = 24  '#Column 24 
completeTime = 25 '#Column 25 
lastrow = 1000 
With Sheets(looping) 
    With .Range(.Cells(2, timestart), .Cells(lastrow, timestart)) 
     .Value = Evaluate("""'"" & INDEX(IF(" & .Address(0, 0) & "<>"""",TEXT(" & .Address(0, 0) & ",""dd/mmm/yyyy""),""""),)") 
    End With 
    With .Range(.Cells(2, completeBad), .Cells(lastrow, completeBad)) 
     .Value = Evaluate("""'"" & INDEX(IF(" & .Address(0, 0) & "<>"""",TEXT(" & .Address(0, 0) & ",""dd/mmm/yyyy""),""""),)") 
    End With 
End With 
+0

あなたは素晴らしいです!どうもありがとうございました。もう一度:) – bluerojo

+1

素敵ですが、ちょうど予防策です... [This](http://stackoverflow.com/questions/18962890/2-ways-for-clearcontents-on-vba-excel-but-1-work-fine -why) –

+0

@SiddharthRout OPが親オブジェクトを範囲オブジェクトに割り当てる必要があることに同意します。残りのコードを見ることなく、何らかの前提を立てることは困難でした。 –