2015-10-05 12 views
5
C formatlı HH (levha CSV olarak dışa gibi metin olarak biçimlendirilmiş) Süresine sahip olduğu

Kolon: dd: ss.vba: Zaman String kısmının yerine

C1, C2, C3 düzeyleri 09:17:00 sırasıyla

15:29:00 kadar sadece "son değiştirmek gerekir, Zaman 09:15:00, 09:16:00 vardır: 00 "bölümünde bütün ": örneğin 10:00:00 veya 11:00:00 veya 12:00:00

Bu, 59"

--- CATCH --- kolon C olacak değerler doğrudan değiştirmek anlamına gelir ": 00" ile ": 59" bozuk kesin 10'o saatinin değerleri 11'o saat vb ..

Sütun C w dolu olacak ediyorum binlerce veri noktası var. Benim mantık aşağıda sanırım çalışmaz:

{

Dim secrep As String 
LastRow = Cells(Rows.Count, "C").End(xlUp).Row 
Secsz = Range("C1:C" & LastRow).Select 
seczero = Right(Secsz, 2) 
secrep = Replace(Secsz, ":00", ":59") 

}

i yukarıdaki kodu yanlış ama bu ben ile gelebilir olduğunu biliyoruz. tam yardım bu mantık için

istek ..

DÜZENLEME: açıklamakta oldukça ayrıntılı değildi. değeri 00:00 ile sona etmezse 10:00:59, 11:00:59, 12:00:59

cevap

2

sonra :59

olarak güncellemeye: Hatta bu tam saat değerleri gibi deÄŸiÅŸtirecektir gerekir
Dim cell As Range 

For Each cell In Range("C1", Range("C1").End(xlDown)) 
    If Right$(cell.Value, 5) <> "00:00" Then 
     cell.Value = Left$(cell.Value, 6) & "59" 
    End If 
Next 

Düzen, yerine sadece son00:

Dim cell As Range 

For Each cell In Range("C1", Range("C1").End(xlDown)) 
    cell.Value = Left$(cell.Value, 6) & "59" 
Next 
+0

teşekkürler Alex. Benim hatam açıklamakta oldukça ayrıntılı değildi. ": 00" dan ": 59" 'Sağ $ (cell.Value, 5) <> "00:00" Then' bu bölümü yerine kaçarsa tam saat değerleri için 10:00:00 gibi, 11:00:00 vb . 10:00:59, 11:00:59, 12:00:59 Talebi relook – Vaibhav

+0

Ah güncellenen Yakaladım pls için: Hatta bu tam saat değerleri gibi deÄŸiÅŸtirecektir gerekir. zaman ve Alex K. Bu seferki düzenlenmiş çabalarına –

+0

teşekkürler mükemmel çalıştı. :) – Vaibhav

2

Sen doğru yoldasın. Önce dizeyi ayırmanız, ikinci yarıda değiştirmeniz ve daha sonra birleştirmeniz gerekir.

Function ReplaceEnd(s As String, endCount As Integer, replaceWhat As String, replaceWith As String) 
    Dim baseString As String 
    Dim replaceString As String 

    baseString = Left(s, Len(s) - endCount) 
    replaceString = Right(s, endCount) 

    ReplaceEnd = baseString & Replace(replaceString, replaceWhat, replaceWith) 
End Function 

Düzenleme: Örnek kullanımını:

secrep = ReplaceEnd(Secsz, 3, ":00", ":59") 
+0

ben yanlış yapıyorum ama zaman sütun C hala hepsi var ne olduğundan emin değil: 00 (son 3 karakter) değiştirilmeyen. Herhangi bir hata almadı. Herhangi bir ipucu dostum? – Vaibhav

+0

Değiştirilen dizeyi hücreye mi eklediniz? Örneğin.Aralık ("C1: C" & LastRow) .Value = secrep – DanL

+0

Evet, bunu yaptım. Sadece zamanla değişmeyen bir dosya hatası yoktu. Aynı şeyi bir kez daha deneyeceğim. – Vaibhav

0

Kullanım bölünmüş fonksiyonu ve daha sonra analiz etmek ve değiştirmek Burada bazı hata işleme ile geliştirmek isteyebilirsin genel amaçlı fonksiyon.

Private Sub CommandButton1_Click() 
    Dim ws   As Excel.Worksheet 
    Dim lastRow  As Long 
    Dim szTimeParts() As String 
    Dim lRow   As Long 

    lRow = 1 
    lastRow = ws.Cells(ws.Rows.count, "C").End(xlUp).Row 

    Set ws = ActiveWorkbook.Sheets("Sheet1") 
    ws.Activate 

    'Loop through the rows 
    Do While lRow <= lastRow 

     'Make sure we have a value to read into our string 
     If ws.Range("C" & lRow).Value <> "" Then 
      szTimeParts = Split(Trim(ws.Range("C" & lRow).Value), ":") 
      If szTimeParts(1) <> "00" Then 
       ws.Range("C" & lRow).Value = szTimeParts(0) & ":" & szTimeParts(1) & ":59" 
      End If 
     End If 
     lRow = lRow + 1 
    Loop 

End Sub 
+0

Paylaşım için teşekkürler. Bir şey eksik olabilir, bu kodu başka bir makroya ekledim (veri temizleme işleminde bir aşama olduğu için) ve ortaya çıkan son csv'de hiçbir değişiklik yoktu. Emin değilim neden. Sana daha iyi anlatabileceğim bir şey var mı? veya kodu yanlış uyguladıysam – Vaibhav

+0

Bu sadece açık çalışma kitabındaki değişiklikleri yapar. Manuel olarak kaydetmeniz veya alt kısımdaki ActiveWorkbook.Save gibi bir kaydetmeniz gerekecektir. – MatthewD

+0

İşte csv olarak kaydetme hakkında bilgi http://stackoverflow.com/questions/10551353/saving-excel-worksheet-to-csv-files-with-filenameworksheet-name-using-vb – MatthewD

1

bu kullanabilirsiniz:

Public Function AlterTime(rInputRange As Range) 

    Dim oCell As Range 

    For Each oCell In rInputRange.Cells 
     oCell = TimeSerial(Hour(oCell), Minute(oCell), 59) 
    Next oCell 

End Function 
+0

Merhaba Baş Verlaat, deneyeyim. Sadece yazıyı sütun olarak biçimlendirdiğim ve Zaman Formatına müdahale etmeyi istemediğim bir başarım. Nedeni, csv olarak dışa aktarıldığında excel spoils tarih-saat değerleridir. Yani kodunuzun size yardımcı olup olmayacağından emin değilsiniz. İzin ver deneyeyim. – Vaibhav

+0

Merhaba. Bir metin (Val, "ss: dd") işlevini tekrar yazabilirsiniz, böylece tekrar metin olacaktır. Bu yaklaşımın yararı, yanlış gitmeyeceğidir, çünkü gerçek zaman yeniden inşa edilir. –