2016-05-13 11 views
1

私は、次の文字列があります。VBA分割小数点以下2つの文字によって文字列

配当
34.3228.1028.0028.0028.0028.0028.0028.0029.5030.50

そして私は、私は34.32としてそれを得ることができますので、それを分割しているよ、28.1028.00を等は次にExcelの行に配置されます。私の問題は、特に私からそれを廃棄テーブルデータイムは、それが例えばドルの形式であるため、それを小数点の右側の2つの文字を分割しているよということで:

Picture on website

これは何私であります再び試みたが、している私は、小数点以下2つの文字に基づいて、それを分割する方法が分からない:

Dim eTR As Object, cTR As Object, a As Integer 
Set cTR = doc.getElementsByTagName("tr") 
a = 0 

For Each eTR In cTR 
If Left(eTR.innerText, 9) = "Dividends" Then 
    TR = doc.getElementsByTagName("tr")(a).innerText 
    Debug.Print TR 
    'Debug.Print a 

End If 
a = a + 1 


Next 

Dim s As Variant 
s = (Split(TR, ".")(1)) 
Cells(1, 2).Value = s 
Cells(1, 3).Value = s(1) 
Cells(1, 4).Value = s(2) 
Cells(1, 5).Value = s(3) 
End Sub 

私は次のコードで(それが画像上に見えるように)個々のテーブルのデータを取得するにも疲れがあります。

'get divs/share 
chk = 0 
dividends: 
Dim eTR3 As Object, cTR3 As Object 
Set cTR3 = doc.getElementsByTagName("td") 
g = 0 

For Each eTR3 In cTR3 
If Left(eTR3.innerText, 9) = "Dividends" Then 
    TR5 = doc.getElementsByTagName("td")(g).innerText 
    r = 1 
    i = g + 10 
    For h = g To i Step 1 
    TR5 = doc.getElementsByTagName("td")(h).innerText 
    Cells(s + 4, r + 1).Value = TR5 
    r = r + 1 
    Next h 
End If 
g = g + 1 
Next 

しかし何らかの理由で、私はその行に属していないランダムな表のデータ入力を続けていました。その周りの方法として、私はテーブルの行をつかんで、文字列を分割することを考えました。

ありがとうございました!

tom

+0

はすでにエクセルで文字列のですか?エクセル式が利用可能だった場合は適切か、具体的にはVBAをお探しですか? –

+1

何か試しましたか?あなたのコードはどこですか?私たちに*あなたにそれを書いてほしいですか? –

+0

の前に3文字以上を持つことはできますか?あなたの前に2文字未満しか持てませんか? ?合計10個の数字が分かれていますか? –

答えて

1

VBAなしのExcelソリューション。

文字列がA列にあり、引き抜く文字列内に10個の数字があるとします。

列Mで

又は右使用にさらに:

=FIND(".",$A$1,L1+1) 

この式の左側の列は空であることを確認します。右の列を10列分コピーします。私のテストケースではV列になりました。これはすべての位置を返します。文字列にあなたが十分に遠くまでコピーすると、最終的にそれ以上のエラーがないことを示すエラーが返されます。見つかる文字列にそれはあなたのデータの開始で、パターンがまだ開始されていないよう

=MID(A1,5,M1-2) 
'or if you want it as a number and not a string 
=MID(A1,5,M1-2)*1 

そのユニークな:B列に

は、以下の式を使用します。あなたは、DATAが4文字の長さであるため、最初の数字は常に5文字目から始まることがわかります。 M1-2は、小数点の位置に基づいて何文字を返すかを指示します。列Cの使用において

パターンが繰り返さ右ので、コピーすることができ、この式:右の9時間および列Kにテストケースでは、基本的に間の距離を測定していることを

=MID($A1,N1-(N1-M1-3),(N1-M1)) 
'or if you want it as a number and not a string 
=MID($A1,N1-(N1-M1-3),(N1-M1))*1 

コピー。現在の10進数から戻ってくる文字数と、その数として返される文字数を決定します。

これで、列Aに挿入した新しい文字列ごとにB1:V1をコピーできます。完了したら、好きなときに値をコピーして貼り付けることができます。私はスペースを節約し、すべてのポイントを表示するには、画像内互い違いの列に結果を持っている概念

証明。また、あなたがセルをフォーマットしないかぎり、シングルテールまたはダブルテールゼロのエクステンションの終わりの数字の一部が表示されないので、その点を注意してください。画像の行2では結果が文字列として返され、行4では結果が数値として返されます。

enter image description here

+0

純粋なVBAソリューションが必要な場合は、ここでVBAに変換することができます。また、VBAソリューションが必要な場合は、タグをExcelからExcelに変更する必要があります。 –

+0

返信いただきありがとうございます!ええ、これは間違いなくアイデアを集めるのに役立ちます。 – Default001

+0

私はVBAルートではスプリットが始まると思いますが、配列要素のそれぞれから文字をスワップして番号を作成する必要があります。お尻の少しの痛みかもしれません。あなたは、あなたがどこに来るのかを数えた後にあなたのカウントが+2に達するまで、あなたのストリングを踏んでいく方が良いでしょう。その文字列をその点に格納して、新しい文字列を作成します。 –

0

VBAは考えた:

私はこの概念についてのあなたのリンクをテストするための文書が、何を持っていけない

:いくつかがあるかもしれないので、

Sub test() 
Dim eTR As Object, cTR As Object 
Dim a As Integer 
Dim s() As Variant 

Set cTR = doc.getElementsByTagName("tr") 
ReDim s(1) 

a = 0 

For Each eTR In cTR 
    If Left(eTR.innerText, 9) = "Dividends" Then 
     TR = doc.getElementsByTagName("tr")(a).innerText 
     Debug.Print TR 
     'Debug.Print a 
     s(a) = doc.getElementsByTagName("tr")(a).innerText 
    End If 
    a = a + 1 
    ReDim Preserve s(a) 
Next 

'this range needs to be equal in size to your array. 
Range(Cells(1, 2), Cells(1, a+1)).Value = s 

End Sub 

VBAは私の強いポイントではありません巨大な構文の問題がありますが、配列/セルに直接書き込むことでどこに行くのか分かりますか?あなたはあなたの弦を作る同じ場所でそれを行います。

1

テクニカルが必要な場合は、小数点2桁が必要です。
アイデアのために@Forward Edに感謝します。

てみてください:

' This sub is example to call splittext() function 
Sub test() 
Dim retArr() As String 

retArr = splittext("Dividends34.3228.1028.0028.0028.0028.0028.0028.0029.5030.50") 

' us reArr to do other stuff here 
End Sub 


Function splittext(str) As String() 
Dim startPos As Integer 
Dim splitArr() As String 
Dim arrSize As Integer 

str = Replace(str, "Dividends", "") 

startPos = 1 
arrSize = 0 
Do While InStr(startPos, str, ".") > 0 
    ReDim Preserve splitArr(arrSize) 

    splitArr(arrSize) = Mid(str, startPos, InStr(startPos, str, ".") + 3 - startPos) 
    arrSize = arrSize + 1 
    startPos = InStr(startPos, str, ".") + 3 
Loop 

splittext = splitArr 
End Function 
関連する問題