0

エクセルVBA初心者ですので、よろしくお願いします。

区切り文字「:」に基づいてセル値を解析しようとしています。区切り文字の前と区切り文字の後の値は配列に格納されるため、WHERE COL1 = [配列の ":" の前の値] AND COL2= [配列の ":" の後の対応する値] 句で配列の値を参照できます。 SQL クエリで。

私のデータは以下のようになります。

T:NYSE
ABX:NASDAQ
V:AIM
(blank)
009123:OTDCXE
(blank)
xxx:dhgjdg

等々。データは固定範囲 A1:A10 に格納されますが、連続していない場合があります。レコードセット .eg を使用して SQL ステートメントを実行したい

for i=0 to [last element in array]
 'run SELECT statement for each element (excluding nulls)
 next

以下は私がこれまでに行ったことであり、機能していません。

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

誰かが私が間違っていることを指摘し、いくつかのガイダンスを提供できる場合. 過去 3 日間を費やして解決策を見つけ、null 以外の値をすべて抽出し、それらを SQL ステートメントで使用できるようにしました。

少なくとも見てくれてありがとう。

編集1:

最後に、いくつか掘り下げて、98%が機能する何かを思いついた.

サンプル入力:

LEG:NYSE
LEG:TAM
SPCC:AIM
ONTPC:ZWSESA
0943292:owndgt
b:a

d:ee

f:aaaaaa

最終出力:

LEG     NYSE
LEG     :TAM
SPCC    C:AIM
ONTPC   ZWSESA
0943292 2:owndgt
b       :a
d       ee
f       aa

「:」の後に完全な文字列を取得できない理由がわかりません。 以下は、上記の出力の完全なコードです

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

編集2:

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
4

1 に答える 1

0

これが私の答えです

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
于 2013-08-11T15:49:43.453 に答える