2016-02-19 10 views
5

In è possibile creare una matrice di tipo variant da una gamma in questo modo:Creare matrice variante con testo al posto di Valore

Dim x As Variant 

x = Range("A1:Z1").Value 

Ciò, ovviamente, mettere le .Value proprietà nella matrice. Sto cercando di fare la stessa cosa ma ottenere la proprietà .Text delle celle, ma non penso sia possibile.

Dim x As Variant 

x = Range("A1:Z1").Text '// <~~ type mismatch 

La ragione è la seguente, ho una riga di dati in questo modo:

|------A------|------B------|------C------| 
1| 01-Jan-2003 27-Feb-2005 15-Sep-2015 

voglio uscita la riga in un file di testo con un delimitatore pipa, attualmente I' m di utilizzare questo:

With WorksheetFunction 
    x = .Transpose(.Transpose(Cells(1, 1).Resize(1, 3).Value)) 
End With 

Print #1, Join(x, "|") 

che funziona, ma è sempre la .Value che è formattato come gg/mm/aaaa così l'uscita assomiglia questo:

01/01/2003|27/02/2005|15/09/2015 

Q: Posso mantenere la formattazione utilizzando questo metodo senza dover analizzare/ciclo ogni valore nella matrice prima?

+2

Utilizzare un ** Per ** Loop. –

+0

Sto cercando di evitare di dover eseguire il ciclo dei valori, se possibile, in realtà si tratta di un gruppo di file considerevolmente grandi, quindi un ciclo avrebbe un impatto significativo sul tempo di elaborazione. Ho aggiornato la mia domanda per riflettere sul fatto che non era immediatamente chiaro tbf –

risposta

2

Non molto elegante e non sono sicuro di quanto bene funzionerebbe alla rinfusa ma evita un loop. È possibile inserire l'output finale in una stringa e sostituire:

Dim x As Variant, y As String 

x = Range("A1:Z1") 

With WorksheetFunction 
    x = .Transpose(.Transpose(ActiveSheet.Cells(1, 1).Resize(1, 5).Value)) 
End With 

y = Join(x, "|") 

y = Replace(y, "/01/", "-Jan-") 
y = Replace(y, "/02/", "-Feb-") 
y = Replace(y, "/03/", "-Mar-") 
y = Replace(y, "/04/", "-Apr-") 
y = Replace(y, "/05/", "-May-") 
y = Replace(y, "/06/", "-Jun-") 
y = Replace(y, "/07/", "-Jul-") 
y = Replace(y, "/08/", "-Aug-") 
y = Replace(y, "/09/", "-Sep-") 
y = Replace(y, "/10/", "-Oct-") 
y = Replace(y, "/11/", "-Nov-") 
y = Replace(y, "/12/", "-Dec-") 

Debug.print y 
+1

In realtà ho finito per dover eseguire il ciclo in quanto c'erano caratteri intermittenti di spazi bianchi che dovevano riordinare con 'Trim $()' ma questo sarebbe stato sicuramente accettabile soluzione quindi lo accetterò –

+1

Potrebbe anche fare un mini 'For i = 1 To 12' loop/replace che sarebbe ancora più veloce del looping attraverso tutti i valori nella matrice –