- ベストアンサー
エクセルVBA
初心者でレベルが低いですがよろしくお願いします。 VBAでエクセルのセル内の文字列を読み込んでその中の文字を検索し、ヒットしたときにそのヒットした文字だけを変換して取得することが可能でしょうか?? 列 A1に hanamiti/1234 という文字列が入っていて この文字列の中の / を検索し、あった時に _ に変更する。 結果 hanamiti_1234 として取得した。 ということができるのでしょうか? ご教授お願いいたします・。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その機能としてはReplace関数があります。 Replace("hanamiti/1234","/","_") とすると、hanamiti_1234 が返ります。 ※照合に条件を付けられるようなので、詳しくはVBEのヘルプをご覧ください。 なお、VBAを使わなくても、ワークシート関数として SUBSTITUTE という同じ働きの関数があります。
その他の回答 (3)
- sendaitaro
- ベストアンサー率25% (6/24)
これで、動作します。 Sub test() Dim Henkan As String ' Worksheets("Sheet1").Select '■Replace関数です。 Henkan = Replace(Cells(1, 1), "/", "_") ' MsgBox Henkan End Sub 動作確認しました。
- taroken_yuken
- ベストアンサー率0% (0/1)
Replace関数はVB6からなのでもしバージョンの古いとありません。自分で作れば済みますが。 ベタベタに書いてみました。 Public Function Test() Dim s1 As String s1 = Sheet1.Cells(1, 1) 'セルA1の値を取得 s1 = Change_String(s1) '取得した文字列を変換 End Function Private Function Change_String(s1 As String) As String Dim lngLp As Long Dim Ret As String For lngLp = 1 To Len(s1) If Mid(s1, lngLp, 1) = "/" Then Ret = Ret & "_" Else Ret = Ret & Mid(s1, lngLp, 1) End If Next Change_String = Ret End Function
- merlionXX
- ベストアンサー率48% (1930/4007)
文字列そのものを置き換えるのではなく、変換後の文字列を取得できればいいのですか? それでしたら、文字列がSheet1にある場合、取得後の文字列をSheet2に転記させるマクロです。 Sub test() For Each c In Sheets("Sheet1").UsedRange If Len(Replace(c, "/", "")) < Len(c) Then x = Replace(c, "/", "_") n = n + 1 Sheets("Sheet2").Cells(n, 1) = x End If Next End Sub
お礼
みなさんありがとうございます。 やってみました!!動きました!! 代表させてもらってこちらにしか書きませんが皆さんありがとうございます。