Je suis un novice totale avec Excel VBA alors s'il vous plaît ours avec moi. J'essaye d'analyser les valeurs de cellules basées sur le délimiteur ":". La valeur avant le délimiteur et après le délimiteur sera stockée dans un tableau afin que je puisse référencer les valeurs de tableau dans WHERE COL1 = [valeur avant ":" dans tableau] AND COL2 = [valeur correspondante après ":" dans tableau] clause dans une requête SQL.lire le contenu de la cellule dans Excel, analyser en fonction de délimiteur et insérer dans le tableau
Mes données ressemble ci-dessous:
T:NYSE
ABX:NASDAQ
V:AIM
(blank)
009123:OTDCXE
(blank)
xxx:dhgjdg
et ainsi de suite. Les données sont stockées dans une plage fixe A1: A10 mais peuvent ne pas être contiguës. Je voudrais exécuter l'instruction SQL en utilisant un jeu d'enregistrements .eg
for i=0 to [last element in array]
'run SELECT statement for each element (excluding nulls)
next
Voici ce que je l'ai fait jusqu'à présent et il ne fonctionne pas:
Sub test3()
Dim MyArray()
'Dim MyArray()
Dim MyRange As Range
Dim RowCount As Long
Dim ColCount As Long
Dim R As Long
Dim C As Long
Set MyRange = Range("A1:a10") ' <-- Adjust!!!
RowCount = 10 ' <-- Adjust as necessary
ColCount = 1 ' <-- Adjust as necessary
ReDim MyArray(1 To RowCount, 1 To ColCount)
For R = 1 To RowCount
For C = 1 To ColCount
MyArray(R, C) = MyRange(R, C).Value
Next C
Next R
'Following was done only for debugging purpose
For i = 1 To UBound(MyArray)
For j = 1 To UBound(MyArray)
Sheets(1).Cells(i + 20, j).Value = MyArray(i, j).Value
Next j
Next i
End Sub
Si quelqu'un peut indiquer ce que je fais incorrect et fournir quelques conseils. J'ai passé mes trois derniers jours à trouver une solution afin que je puisse extraire toutes les valeurs non nulles et les utiliser dans l'instruction sql.
Merci beaucoup d'avance pour au moins regarder.
Edit 1:
Enfin, fait quelques recherches autour et est venu avec quelque chose, dont 98% travaille.
entrée de l'échantillon:
LEG:NYSE
LEG:TAM
SPCC:AIM
ONTPC:ZWSESA
0943292:owndgt
b:a
d:ee
f:aaaaaa
Sortie finale:
LEG NYSE
LEG :TAM
SPCC C:AIM
ONTPC ZWSESA
0943292 2:owndgt
b :a
d ee
f aa
Je ne sais pas pourquoi je ne reçois pas la chaîne complète après ":". Ci-dessous mon code complet pour la sortie ci-dessus
Sub test2()
Set ws = ThisWorkbook.Sheets("Sheet1")
MyArray = ws.Range("A1:A10")
Range("A11:A30").ClearContents
ReDim newarr(LBound(MyArray) To UBound(MyArray))
For i = LBound(MyArray) To UBound(MyArray)
If MyArray(i, 1) <> "" Then
j = j + 1
newarr(j) = MyArray(i, 1)
End If
Next i
ReDim Preserve newarr(LBound(MyArray) To j)
For R = 1 To UBound(newarr) ' First array dimension is rows.
ws.Cells(R + 12, 1).Value = newarr(R)
Next R
'Store values preceding and succeeding the delimiter in two arrays
ReDim lftarray(LBound(newarr) To UBound(newarr))
ReDim rtarray(LBound(newarr) To UBound(newarr))
For i = LBound(newarr) To UBound(newarr)
lftarray(i) = Split(newarr(i), ":")
rtarray(i) = Right(newarr(i), InStr(1, newarr(i), ":"))
Next i
ReDim Preserve lftarray(LBound(newarr) To i)
ReDim Preserve rtarray(LBound(newarr) To i)
'Print values before ":"
For i = LBound(lftarray) To UBound(lftarray) ' First array dimension is rows.
ws.Cells(i + 24, 1).Value = lftarray(i)
Next i
'Print values after ":"
For i = LBound(rtarray) To UBound(rtarray)
ws.Cells(i + 24, 2).Value = rtarray(i)
Next i
End Sub
Edit2:
Sub test2()
Set ws = ThisWorkbook.Sheets("Sheet1")
MyArray = ws.Range("A1:A10")
Range("A11:A30").ClearContents
ReDim newarr(LBound(MyArray) To UBound(MyArray))
For i = LBound(MyArray) To UBound(MyArray)
If MyArray(i, 1) <> "" Then
j = j + 1
newarr(j) = MyArray(i, 1)
End If
Next i
ReDim Preserve newarr(LBound(MyArray) To j)
For R = 1 To UBound(newarr) ' First array dimension is rows.
ws.Cells(R + 12, 1).Value = newarr(R)
Next R
'Store values preceding and succeeding the delimiter in two arrays
ReDim lftarray(LBound(newarr) To UBound(newarr))
ReDim rtarray(LBound(newarr) To UBound(newarr))
For i = LBound(newarr) To UBound(newarr)
lftarray(i) = Split(newarr(i), ":")
rtarray(i) = Right(newarr(i), Len(newarr(i)) - InStr(1, newarr(i), ":"))
Next i
ReDim Preserve lftarray(LBound(newarr) To i)
ReDim Preserve rtarray(LBound(newarr) To i)
'Print values before ":"
For i = LBound(lftarray) To UBound(lftarray) ' First array dimension is rows.
ws.Cells(i + 24, 1).Value = lftarray(i)
Next i
'Print values after ":"
For i = LBound(rtarray) To UBound(rtarray)
ws.Cells(i + 24, 2).Value = rtarray(i)
Next i
End Sub
Vous pouvez mettre les valeurs de plage directement dans le tableau avec la déclaration MonTableau = MyRange. Voir l'explication ** [ici] (http://www.cpearson.com/excel/ArraysAndRanges.aspx) **. – chuff
Merci d'avoir regardé mon problème. J'ai fait référence à cette ressource et je suppose que c'est l'un des meilleurs moyens d'avoir des données dans un tableau si aucun traitement sur les données d'entrée n'est requis. Mais j'ai besoin de diviser() les valeurs afin qu'elles soient dans un format utilisable. D'où la question. – vbalite
Donc, le problème que vous avez est avec la scission, pas avec l'obtention des données dans le tableau? – chuff