エクセルVBAについてお尋ねします。

2つの任意の文字列を比較して、特定の記号(例えば○など)の部分に書かれている文字列を抽出するマクロ(関数でもOKです)を探しています。

具体例
①A1に「ABCDEF○MN」という文字列をあらかじめ入力しておく
②B1に「ABCDEFGHIJKLMN」という文字列を入力
③マクロを実行。
④C1に「GHIJKL」が表示される

文字で説明するのは難しかったので図を用意しておきました。
http://hatena88.web.fc2.com/excel.html

実際に動くマクロを作っていただくとうれしいです。
以上よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2006/07/15 05:46:00
  • 終了:2006/07/15 07:23:00

回答(3件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/07/15 06:48:49

ポイント40pt

Function chk(a1 As String, a2 As String) As String

Dim b1 As Long

Dim a3 As String

b1 = InStr(a1, "○")

a3 = Left(a2, b1 - 1)

a3 = a3 & Right(a2, Len(a1) - b1)

chk = a3

End Function


標準 Module1 に上記を記述し、

使い方は、

=chk(A1,B1)

という感じで、セルに入れます。

A1が○がついた文字列ですね。

id:taroemon

ご回答ありがとうございます。

試してみます。

2006/07/15 06:58:27
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/07/15 06:57:08

ポイント10pt

あ、逆でしたね。

Function chk2(a1 As String, a2 As String) As String

Dim b1 As Long

Dim b2 As Long

b1 = InStr(a1, "○")

a3 = Mid(a2, b1, Len(a2) - Len(a1) + 1)

chk2 = a3

End Function

こうすれば 中身だけです。

id:taroemon

「コンパイルエラー END SUB」が必要ですと言われてしまいました。

おそらく回答者さんにとっては説明不要の部分ということで、

省略されたのだと思いますが、当方初心者ですので、

どうすればよいか教えていただくか、

上記に変わるプログラムを作っていただけるとうれしいです。

2006/07/15 07:14:22
id:rikuzai No.3

りくっち回答回数1366ベストアンサー獲得回数1412006/07/15 07:18:04

ポイント50pt

この内容なら既存の関数で処理ができると思います。

例示の通りの設定として、

C1=MID(B1,FIND("○",A$1),LEN(B1)-FIND("○",A$1)-(LEN(A$1)-FIND("○",A$1)-1))

以下フィルコピー可です。


これは参照するA1が固定の場合として作成していますので、

固定でない場合は「$」(絶対参照)を取って使ってください。

id:taroemon

ご回答ありがとうございます。

これ以上ないというくらい完璧でした。

2006/07/15 07:21:46
  • id:taknt
    「コンパイルエラー END SUB」

    これは SUBから始まる プログラムだからです。

    Function ~~
    で始めた場合は、そのようなエラーは出ません。


    つまり、モジュールのファイルに 余計なものが 入ってたと推定されます。
    SUB で始まる行のものがあるとか、または、他のプログラムが中途になってしまっているとか。


    私の環境では、上記のエラーが出ませんから。


    ま、VBAとあったので、VBAで回答しただけですが
    中身は、たいしたことは やってないので、VBAは使わなくてもいいかもしれませんが、VBAでこういうこともできる!というのを理解してもらえればいいかなと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません