2017-07-13 6 views
-2

私は数千の行のデータを操作する必要があります。それはのようなものに見えるExcel VBAは最初の3つの数字をコンマで囲んでいます

:私は左になりたいので

001_sample.com, 002_XML3.com, 003_Example532.com 
004_Example.com 
005_Example392.com, 006_sample399.com 

など..

を私は最初の3つの数字を必要としています。

001, 002, 003 
004 
005, 006 

ご協力いただければ幸いです。私はMidとLeft機能を試しましたが、私はそれを正しく得ることはできません。

この範囲の各Cについて...私はもともと何をやっていた

である( "E1:E5000")

If InStr(c.value, "_") > 0 Then 
    c.value = Left(c.value, InStr(c.value, "_") - 1) 
End If 
    If InStr(c.value, " ") > 0 Then 
    c.value = Left(c.value, InStr(c.value, " ") - 1) 
End If 

次のC

はあなたの助けありがとうございました。

+2

[ask]をお読みください。あなたの疑問は、「私はこのデータを持っています。私はXYZが必要です。私のためにしてください。 *あなたが試したことを私たちに見せてください。 –

答えて

0

はあなたがやりたいだろう迅速かつ汚いUDFです:

Function mySplit(rng) As String 
Dim splt() As String 
Dim i As Integer 
If rng.Count > 1 Then Exit Function 
splt = Split(rng, ",") 
For i = LBound(splt) To UBound(splt) 
    splt(i) = Left(Application.WorksheetFunction.Trim(splt(i)), 3) 
Next 
mySplit = Join(splt, ", ") 

End Function 

は、ブックに添付モジュールでそれを入れてセルA1に値がある場合は、これを使用することができますあなたは、式のようにそれを呼び出します。

=mySplit(A1) 

enter image description here


は、Office 365 Excelを持っているなら、あなたは、この配列数式を使用することができます。

=TEXTJOIN(", ",TRUE,LEFT(TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",999)),999*(ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,",",""))+1))-1)+1,999)),3)) 

は、それが編集モードを終了するときはCtrl-Shiftキーを押しながら入力する代わりに入力して確認する必要が配列数式であること。正しく実行された場合、Excelは{}を数式の周りに置きます。

enter image description here

+0

こんにちはスコット、完璧に動作します。どのように私はこれをサブルーチンに変換できますか?あなたの例では、プログラムを実行して、クリックしてドラッグすることなく列Cを列Aに表示させることができれば理想的です。 – Jake

+0

範囲を反復処理するサブルーチンを作成し、この関数を呼び出して各範囲を渡します。それはあなたが望む場所に割り当てることができる文字列を返します。 –

+0

"個人的な"ワークブック内ではどのように機能しますか?私が個人的なワークブックの中にいない状態でプログラムを実行したとき、それは正常に機能しましたが、私の主なコードに追加されたときに問題に遭遇しました。 – Jake

0

データの保存方法を指定していません。ここで

Dim value As String, numeric As String 
value = Range("A1").Value 
numeric = LEFT(value, 3) 
0

あなた件のデータが列Aにある場合、それが動作します。

Sub test() 
    Dim vDB, vR() As String, vSplit 
    Dim rngDB As Range 
    Dim n As Long, i As Long, j As Integer 
    Set rngDB = Range("a1", Range("a" & Rows.Count).End(xlUp)) 'fix your column a~~> your column 
    vDB = rngDB 
    n = UBound(vDB, 1) 
    ReDim vR(1 To n, 1 To 1) 
    For i = 1 To n 
     vSplit = Split(vDB(i, 1), ",") 
     For j = 0 To UBound(vSplit) 
      vSplit(j) = Split(vSplit(j), "_")(0) 
     Next j 
     vR(i, 1) = Join(vSplit, ",") 
    Next i 
    rngDB = vR 

End Sub 
+0

Hi Dy.Lee、ありがとう助けて。私は私のプログラムに合うようにあなたの例を修正しました。私はしかし、このコードは、最初の3桁をつかんで、残りを無視して質問があります。たとえば、私は001、と残されています。境界を調整しようとしましたが、最初の3つの数字だけをもう一度取得しています。そのための推奨事項はありますか? – Jake

+0

@Jake、あなたが望む結果を示してください。 –

関連する問題