• ベストアンサー

VBAで。

お世話になります。 ややこしい質問かも知れませんが、 エクセルで、ある列(一列)に、7500行くらい 文字が記入されており、その文字は全部で20桁近く あります。その文字の初めから5~7桁あとに_アンダーパーが有、 またその後に文字や数字が10桁くらい入っています。 やりたい事は、アンダーパーまで5~7桁ある文字だけ抜き出し 右隣の列に書き出す。 又は、今書かれてる列にアンダーパー以降の文字を 削除する。 VBAでどういう記述をすれば良いかお教え頂きたく 宜しくお願い致します。     記 ○○○○○○_○○○○○○○

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

これは普通のシート関数でも出来る課題(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

miruchoko
質問者

お礼

ありがとうございます。 大変参考になりました。

その他の回答 (2)

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

こんなのはどうでしょうか? 何行あるかわかっていて数式残していいなら 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の式を変更してください。

miruchoko
質問者

お礼

ありがとうございました。 参考になりました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

次のユーザー定義関数でどうでしょう。 donocell:もとのデータのセル delimit:区切り文字 banme:何番目の区切りか。 Function bunri(donocell, delimit, banme) bunri = Split(donocell, delimit)(banme - 1) End Function

miruchoko
質問者

お礼

ありがとうございます。 参考になりました。

関連するQ&A