Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2019)
標準モジュールの中にエクセルの関数組み込み
投稿日時: 23/04/02 14:13:58
投稿者: 初心者VBA大好き

お世話になっております
 
やりたいことは
 
文字の中に東が入っていたら、東京東営業部
 
文字の中に西が入っていたら、東京西営業部
 
でなければ、東京営業部
 
に変換したいのですが、
わかる方おしえてくれませんでしょうか
 
B列      C列
東京東 東京東営業部
東京西 東京西営業部
東京   東京営業部
 
東京東A 東京東営業部
東京西B 東京西営業部
東京A 東京営業部
 
A1東京東 東京東営業部
2B東京西 東京西営業部
A東京1 東京営業部
 
下記の関数を標準モジュールにいれて実行したいのですが、
 
=IF(ISBLANK(C6),"",IF(COUNTIF(C6,"*東京東*"),"東京東",IF(COUNTIF(C6,"*西*"),"東京西","東京"))&"営業部")
 
検索など調べてやったところ
 
アプリケーション定義またはオブジェクト定義エラーです。
と表示されてしまいます。
 
おしえてくれませんでしょうか
 
Range("B3:B10").Formula = "=IF(COUNTIF(C3:C10,""*東京東*""),""東京東"",IF(COUNTIF(C3:C10,""*西*""),""東京西"",""東京"")))"
 
 
 

回答
投稿日時: 23/04/02 14:22:44
投稿者: WinArrow

「東営業部」→「営業部」
「西営業部」→「営業部」
に変換すればよいでしょう。

回答
投稿日時: 23/04/02 14:39:47
投稿者: WinArrow

WinArrow さんの引用:

「東営業部」→「営業部」
「西営業部」→「営業部」
に変換すればよいでしょう。

 
↑は間違いです。
 
標準モジュールに
 
Function 変換(ByVal RC As String)
    Select Case True
        Case ""
            変換 = ""
        Case RC Like "*東京東*"
            変換 = "東京東営業部"
        Case RC Like "*東京西*"
            変換 = "東京西営業部"
        Case Else
            変換 = "東京営業部"
    End Select
End Function
 
セルC1
=変換(B1)

投稿日時: 23/04/02 14:47:45
投稿者: 初心者VBA大好き

ご返信ありがとうございます。
標準モジュールに入れて実行しましたが、
マクロの登録画面がでてきました。
なにも動作いたしませんでした。
 
やり方がわるいのでしょうか。

回答
投稿日時: 23/04/02 16:04:38
投稿者: simple

B列の文字列をもとに変換した文字列をC列に入れたいのですね?
サンプルはそうなっていますが、トライしたコードは列が逆になっていますよ。
それはさておき。
 
既に頂いている案は、いわゆるユーザー定義関数で対応するという案です。
・標準モジュールに置いた Functionプロシージャを、ワークシート上で使うのです。
・C3セルに =変換(B3) と入力すれば、C3に結果が得られます。
 
-----------------
学習材料に他の案も上げておきましょう。
どれかベストのものだけということもないので。
引き出しは多く持っておいても邪魔にはなりません。
 
(1)トライされたものですが、(BとCを入れ替えています)

Range("C3:C10").Formula = "=IF(COUNTIF(B3:B10,""*東京東*""),""東京東"",IF(COUNTIF(B3:B10,""*西*""),""東京西"",""東京"")))"
右辺はB3だけを使った式にします。
内部で、自動的に4行以下は増殖してくれます。
 
(2)こんな風に書くのが普通でしょうか。
Sub test1()
    Range("C3:C10").Formula = "=IF(ISBLANK(B3),"""",IF(COUNTIF(B3,""*東京東*""),""東京東"",IF(COUNTIF(B3,""*西*""),""東京西"",""東京""))&""営業部"")"
End Sub 

 
(2)ダブルクオーテーションを使うときには二つ続ける必要があります。
   それを避けようとすれば、こんな書き方もあります。
 
Sub test2()
    Dim s As String
    s = "=IF(ISBLANK(B3),'',IF(COUNTIF(B3,'*東京東*'),'東京東',IF(COUNTIF(B3,'*西*'),'東京西','東京'))&'営業部')"
    s = Replace(s, "'", """")
    '''' Debug.Print s  ''内容を確認するとよいでしょう。
    Range("C3:C10").Formula = s
End Sub

あとは3行目だけ書いて、後の行はコピーペイスとするというのも現実的です。
参考にしてください。

回答
投稿日時: 23/04/02 16:09:38
投稿者: WinArrow

初心者VBA大好き さんの引用:
ご返信ありがとうございます。
標準モジュールに入れて実行しましたが、
マクロの登録画面がでてきました。
なにも動作いたしませんでした。
 
やり方がわるいのでしょうか。

 
どのような操作をしたのか分かりませんが、
ユーザー定義関数を提供したつもりです。
(B列の文字列を変換前として、C列に変換後を返す)

投稿日時: 23/04/02 16:18:40
投稿者: 初心者VBA大好き

ありがとうございました。
もやもやが解決しました。ありがとうございました。
とてもスッキリしました。