似たような質問なので二つまとめてさせて頂きますm(_ _)m
質問(1)
A1セルに
AAA【BBB】CCC
と入力されてるとします。
【】の中にあるBBBという文字列だけをコピーしてB1セルにペーストするにはどうしたらいいのでしょうか?
条件
AAAとBBBとCCCは文字列の長さは決まっていません。
質問(2)
セルA1に
有料会員登録1件500円(525円コース)
と入力されてるとします。
「件」と最初の「円」の間にある「500」という数字をコピーしてB1にペーストしたいのですが、どうしたらいいでしょうか?
条件
「件」と「円」の間の数字の部分は2桁の時と3桁の時があります。
仕事量が多くてかなり困っており、VBAで自動化させたいと思います。
どうぞよろしくお願いします。
No.5ベストアンサー
- 回答日時:
こんばんは。
こんな風にすれば出来ます。
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
ありがとうございます!出来ました\(^O^)/
今はまだこのプログラムの意味が分かりませんが、いずれちゃんと理解して更に応用出来るようになりたいと思います!
ありがとうございました!
めちゃくちゃ作業が楽になりした!
No.6
- 回答日時:
#5の回答者です。
(1),(2)とも、同じ種類のご質問ですが、#5の回答は、いくつかある内のひとつのパターンですから、あまり深く考えないほうがよいです。私の今回の書き方は、掲示板で覚えた少しイレギュラーな書き方ですが、正規表現は、使いこなせると、とくに、Webサイトのデータを取り出すときなどに有効です。
正規表現とは何か?
http://msdn.microsoft.com/ja-jp/library/ms974570 …
【(.+)】--->「【】」は【 から 】までの文字。「.」何か文字ひとつ。 「+」前の文字がひとつ以上。「( )」は、ひとまとまり。
今回のユーザー定義関数の正規表現で、だいたいの応用が利くようになります。なお、この「正規表現」は、Perl仕様ですが、これだけでパターン集が出ているぐらいです。
No.4
- 回答日時:
後半は
有料会員登録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)の特徴を言わないと抜き出せないよ。
特徴とは塊が数字や英字とか決った文字列だとか、
前からの桁数や
特定の記号が前後にある
とか。
No.3
- 回答日時:
Excel200以降なら、Split関数があります。
MsgBox Split(Split(Range("A1").Value, "【")(1), "】")(0)
MsgBox Split(Split(Range("A1").Value, "件")(1), "円")(0)
No.2
- 回答日時:
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を書いて頂けて助かりました!
No.1
- 回答日時:
関数だと
=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がいいですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Excel(エクセル) エクセルで教えて下さい。 2 2022/05/18 13:00
- Excel(エクセル) 関数を用いて表示したセルの内容を、見えている形でコピーする方法 2 2022/09/14 16:36
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
セルから一部だけを抜き出して隣のセルにコピーしたい
Excel(エクセル)
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
VBA 数値を文字列として貼付したい
Excel(エクセル)
-
-
4
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
5
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
VBAを使って検索したセルをコピーして別の場所に貼り付ける。
Visual Basic(VBA)
-
8
エクセルのセル内の文字の一部だけを別の列に移したい。
Excel(エクセル)
-
9
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
10
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
13
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
14
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
15
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
16
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
17
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
-
18
毎回変わる範囲を検索し、コピペするマクロについてご教示ください。
Excel(エクセル)
-
19
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
20
エクセルである行以下全部を削除する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「何とかで始まり、何とかで終...
-
VBA EXCEL あるセルの中の一...
-
入力された文字列が、LD22000を...
-
バッチファイルの正規表現を利...
-
「abcで始まらない」を正規表現...
-
正規表現の否定先読みで、複数...
-
【abc】に【完全一致】する正規...
-
マクロ・VB得意な人へ。指定し...
-
正規表現にて文字数をチェック...
-
拡張子の正規表現
-
VBにおける文字列の部分一致検索
-
文字と数字の判定
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
vba アクティブシートの名前変...
-
Excel VBAでPDFファイルをMicro...
-
エクセルで数値を全角文字(カ...
-
住宅にカナを入力する際に丁目...
-
EXCELからCSVにすると余計なカ...
-
全角英数字の必要性が理解できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「何とかで始まり、何とかで終...
-
VBA EXCEL あるセルの中の一...
-
「abcで始まらない」を正規表現...
-
バッチファイルの正規表現を利...
-
正規表現の否定先読みで、複数...
-
角カッコが含まれてるかどうか...
-
正規表現 英数字を1つ以上含む...
-
C++でofstreamに空白を含む文字...
-
正規表現について
-
XML::Xpathで部分一致検索をす...
-
マクロ・VB得意な人へ。指定し...
-
正規表現で、ある文末に不一致...
-
正規表現にて文字数をチェック...
-
拡張子の正規表現
-
指定した文字列を複数含むとい...
-
正規表現 <>で囲まれたメー...
-
Perl CSVファイルの複数条件で...
-
文字連続の検出手段
-
CASLIIの穴埋め問題について。
-
英数字混じり8文字以上の正規表現
おすすめ情報