dポイントプレゼントキャンペーン実施中!

似たような質問なので二つまとめてさせて頂きますm(_ _)m

質問(1)
A1セルに
AAA【BBB】CCC
と入力されてるとします。
【】の中にあるBBBという文字列だけをコピーしてB1セルにペーストするにはどうしたらいいのでしょうか?

条件
AAAとBBBとCCCは文字列の長さは決まっていません。

質問(2)
セルA1に
有料会員登録1件500円(525円コース)
と入力されてるとします。
「件」と最初の「円」の間にある「500」という数字をコピーしてB1にペーストしたいのですが、どうしたらいいでしょうか?

条件
「件」と「円」の間の数字の部分は2桁の時と3桁の時があります。

仕事量が多くてかなり困っており、VBAで自動化させたいと思います。
どうぞよろしくお願いします。

A 回答 (6件)

こんばんは。



こんな風にすれば出来ます。
MacroTest1 で工夫してください。

ユーザー定義関数は、第一引数は、Range、第二引数は、正規表現のメタ・キャラクタを入れます。Global =False タイプ(検索値がひとつ)の場合なら、ほとんどのものに対応できます。

'-------------------------------------------
Sub MacroTest1()
 Range("B1").Value = PickUp(Range("A1"), "【(.+)】")
 Range("B2").Value = PickUp(Range("A2"), "件([\d,\.]+)円")
End Sub

'-------------------------------------------

Function PickUp(rng As Range, mPattern As String)
Dim Matches As Object

With CreateObject("VBScript.RegExp")
  If mPattern = "" Then
   PickUp = ""
   Exit Function
  End If
  .Pattern = mPattern
  .Global = False
  Set Matches = .Execute(rng.Value)
  If Not Matches Is Nothing Then
   If Matches.Item(0).SubMatches.Count > 0 Then
     PickUp = Matches.Item(0).SubMatches(0)
   Else
    PickUp = Matches.Item(0)
   End If
  End If
 End With
End Function
    • good
    • 1
この回答へのお礼

ありがとうございます!出来ました\(^O^)/
今はまだこのプログラムの意味が分かりませんが、いずれちゃんと理解して更に応用出来るようになりたいと思います!
ありがとうございました!
めちゃくちゃ作業が楽になりした!

お礼日時:2009/08/12 01:02

#5の回答者です。



(1),(2)とも、同じ種類のご質問ですが、#5の回答は、いくつかある内のひとつのパターンですから、あまり深く考えないほうがよいです。私の今回の書き方は、掲示板で覚えた少しイレギュラーな書き方ですが、正規表現は、使いこなせると、とくに、Webサイトのデータを取り出すときなどに有効です。

正規表現とは何か?
http://msdn.microsoft.com/ja-jp/library/ms974570 …


【(.+)】--->「【】」は【 から 】までの文字。「.」何か文字ひとつ。 「+」前の文字がひとつ以上。「( )」は、ひとまとまり。

今回のユーザー定義関数の正規表現で、だいたいの応用が利くようになります。なお、この「正規表現」は、Perl仕様ですが、これだけでパターン集が出ているぐらいです。
    • good
    • 0
この回答へのお礼

正規表現ですか。勉強してみます!
本当に助かりました!ありがとうございます!

お礼日時:2009/08/13 15:14

後半は


有料会員登録1件500円の部分の500を注目して
Sub test01()
x = Cells(2, "A")
p1 = InStr(x, "件")
If p1 = 0 Then
MsgBox "データが不可"
Exit Sub
End If
p2 = InStr(x, "円")
If p2 = 0 Then
MsgBox "データが不可"
Exit Sub
End If
MsgBox Mid(x, p1 + 1, p2 - p1 - 1)
End Sub
====
前半はムードはわかるが、質問では何のことだか判らない。
良く考えてみて。自分の頭では判っているだろうが、読者にはわからないよ。
AAA、BBB、CCCのうちの1つ(BBB)か2つ(AAA,CCC)の特徴を言わないと抜き出せないよ。
特徴とは塊が数字や英字とか決った文字列だとか、
前からの桁数や
特定の記号が前後にある
とか。
    • good
    • 0

Excel200以降なら、Split関数があります。



MsgBox Split(Split(Range("A1").Value, "【")(1), "】")(0)
MsgBox Split(Split(Range("A1").Value, "件")(1), "円")(0)
    • good
    • 1

VBAだと



Sub test()

Range("B1").Value = Mid(Range("A1"), InStr(Range("A1"), "【") + 1, _
InStr(InStr(Range("A1"), "【"), Range("A1"), "】") - InStr(Range("A1"), "【") - 1)

End Sub

Sub test2()

Range("B1").Value = Mid(Range("A1"), InStr(Range("A1"), "件") + 1, _
InStr(InStr(Range("A1"), "件"), Range("A1"), "円") - InStr(Range("A1"), "件") - 1)

End Sub

この回答への補足

おお!出来た出来た!
ありがとうございます!魔法みたいです!
ほかのプログラムと組み合わせるのでVBAを書いて頂けて助かりました!

補足日時:2009/08/12 00:53
    • good
    • 0

関数だと



=MID(A1,FIND("【",A1)+1,FIND("】",A1,FIND("【",A1))-FIND("【",A1)-1)

=MID(A1,FIND("件",A1)+1,FIND("円",A1,FIND("件",A1))-FIND("件",A1)-1)

でいけますけどVBAがいいですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A