- ベストアンサー
VBAで。
お世話になります。 ややこしい質問かも知れませんが、 エクセルで、ある列(一列)に、7500行くらい 文字が記入されており、その文字は全部で20桁近く あります。その文字の初めから5~7桁あとに_アンダーパーが有、 またその後に文字や数字が10桁くらい入っています。 やりたい事は、アンダーパーまで5~7桁ある文字だけ抜き出し 右隣の列に書き出す。 又は、今書かれてる列にアンダーパー以降の文字を 削除する。 VBAでどういう記述をすれば良いかお教え頂きたく 宜しくお願い致します。 記 ○○○○○○_○○○○○○○
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これは普通のシート関数でも出来る課題(Find関数)。なぜまたVBAかな。 (1)VBAでも 1字1字アンダーバーを探す (2)アンダーバーでSplit (3)Instr関数で探す などが考えられる (2)(3)は Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d For i = 1 To d p = InStr(Cells(i, "A"), "_") If p <> 0 Then Cells(i, "B") = Mid(Cells(i, "A"), 1, p - 1) End If Next i End Sub Sub test02() d = Range("A65536").End(xlUp).Row MsgBox d For i = 1 To d p = Split(Cells(i, "A"), "_") Cells(i, "B") = p(0) Next i End Sub
その他の回答 (2)
- hotosys
- ベストアンサー率67% (97/143)
こんなのはどうでしょうか? 何行あるかわかっていて数式残していいなら Sub sample() Range("B1:B7500").Formula = "=LEFT(A1,FIND(""_"",A1)-1)" End Sub 行数不定で値にしたい場合は Sub sample2() Dim tmp() As Variant With Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Offset(0, 1) .Formula = "=LEFT(A1,FIND(""_"",A1)-1)" '以降2行で数式を数値化 tmp = .Value .Value = tmp End With End Sub p.s. 必ずアンダーバーがあるのか、無い場合はどうするのかがわかりませんが、必要に応じてFormulaの式を変更してください。
お礼
ありがとうございました。 参考になりました。
- okormazd
- ベストアンサー率50% (1224/2412)
次のユーザー定義関数でどうでしょう。 donocell:もとのデータのセル delimit:区切り文字 banme:何番目の区切りか。 Function bunri(donocell, delimit, banme) bunri = Split(donocell, delimit)(banme - 1) End Function
お礼
ありがとうございます。 参考になりました。
お礼
ありがとうございます。 大変参考になりました。