なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

VBAでExcelのセル内の文字列置換

f:id:nazuna_0124:20170403224602p:plain

悩んでいるブログの方向性のひとつに

職業訓練で習ってない、関係もあまりない内容を書いてよいかがあります。

ブログのタイトルがタイトルだけに……。


VBAならいっぱいネタがあるのですけれども。

選択肢はこんなかんじ。


  • 気にせず書く
  • もう一つブログを作る
  • ブログのタイトルをIT雑記系に変更しちゃう


あまり深入りしない程度に気になったのだけ、とりあえず書いてみます。


akashi-keirin.hatenablog.com


今回はこちらのお題に便乗させていただきます。

記載されてるコードがよくわからなくて悔しかったので

わたしならどう作るかなーって考えてみました。


動作はこんなかんじ

クリックした瞬間に(*)がぶっ飛んでちょっとした感動があります。


f:id:nazuna_0124:20170409112911g:plain


思いついた(思い出した)方法は2つです。

InStrで"(“の場所を特定。Left関数で抽出(こっちは複数かっこに対応できません)

Replaceメソッドワイルドカードを利用。


gifの動作はreplaceのほうです。


コードはこちら

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim obj
    
    For Each obj In Selection
    
    ''Replaceメソッドを使う--------
       obj.Replace what:="(*)", Replacement:=""
    ''----------------------------

    ''InStrを使う------------------
        'ifで分岐しないとエラーでます。
        'If InStr(obj.Value, "(") > 0 Then
            'obj.Value = Left(obj.Value, InStr(obj.Value, "(") - 1)
        'End If
    ''------------------------------
    Next
    
End Sub


Sheet1を右クリック>コード表示>WorksheetをSelectionChange

ここに貼り付けると利用できます。(シートのとこに全コピーでもおっけー)


すぐ思いついたのはInStrですねー。そして、存在しないとエラー出すのをわすれて

あわててifを付け足しました


Replaceの注意点は、Replace関数はワイルドカード使えません

RangeオブジェのReplaceメソッドは使えます。


ぉぉぉ! 昔はこの説明じゃ何いってるかわからなかった!

Rangeクラス(オブジェクト?)メソッドを作った人に感謝!とか言えてしまいます。


1行で済みますし、なんかかっこいいのですが、

引数がいっぱいあって正直よくわかりません


gifのとおり動作がなんとなく気持ちいいです。

VBAerが魔法使いのように思われる所以ですね!