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