• ベストアンサー

VBAで条件付文字の抜き取り

エクセル2003です。 文字列="○○○○○○○○○○○○AA●●●●●○○○○○○○" もし「AA」があるならば 一番左の「A」から7文字取得し 文字列="AA●●●●●" としたいですがどうすればいいでしょうか? Sub test() 文字列="○○○○○○○○○○○○AA●●●●●○○○○○○○" If InStr(文字列, "AA") > 0 Then End If End Sub からどうすればいいでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

当方VBAは苦手なので参考まで Sub test() 文字列 = "○○○○○○○○○○○○AA●●●●●○○○○○○○" If InStr(文字列, "AA") > 0 Then MsgBox Mid(文字列, InStr(文字列, "AA"), 7) End If End Sub

noname#150498
質問者

お礼

希望通りできました! ご回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [VBA] セル内の文字を取得してファイルOPEN

    EXCEL VBAにてご質問があります。 セル A  1 C:\001.PDF  2 C:\002.PDF     ・     ・     ・ セル:A1~に入っている文字列を実行する(PDFを開く)にはどうすればよろしいでしょうか。 A1だけであれば、 Sub TEST() Dim aTE As String aTE = Range("A1").Value If Dir(aTE) <> "" Then With CreateObject("WScript.Shell") .Run """" & aTE & """" End With End If End Sub 上記で、いけると思いますが、複数(任意)になるとわかりません。 VBAは、始めたばかりで、まだ、右も左も分からない超初心者ですが、 どなたか、教えて頂けないでしょうか。 よろしくお願いいたします。

  • 条件による行挿入VBAの統合

    Bookごとのデータの内容により次の3つをその都度使い分けていますが これをひとつのVBAに統合したいのですが書き方を教えてください。 (当方詳しくないのでこのVBAも教えられたままのもので自作ではありません) ※A列データのうちタイトル行には■を先頭に入れてあります。 ●「■」があればすべて分割(■タイトルの上の行に1行挿入) Sub 全分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then Rows(r).Insert End If Next End Sub ●タイトルに(1)または(2)が含まれる場合は (1)の上で分割(■の上の行に1行挿入)、(2)のあるA列はセル消去 Sub かっこ2有り分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then If InStr(Cells(r, "A").Value, "(2)") > 0 Then Cells(r, "C").ClearContents End If If InStr(Cells(r, "A").Value, "(1)") > 0 Then Rows(r).Insert End If Cells(r, "A").ClearContents End If Next End Sub ●上記混在の場合(かっこありタイトルとかっこなしタイトルが混在) Sub 混在分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then If InStr(Cells(r, "A").Value, "(2)") > 0 Then Cells(r, "A").ClearContents End If If InStr(Cells(r, "A").Value, "■") > 0 Then Rows(r).Insert End If End If Next End Sub ※かっこ有りに(3)もある場合、(2)と同じ処理 3つを統合した場合の分類のルール A列に■のあるタイトルの処理 ■のあるタイトルごとにタイトルの上に1行挿入 ただしタイトルに(2)(3)が含まれる場合は、上に行挿入せずそのタイトル部分(A列)のセル消去 A列の状況 ■タイトル データ1 データ2 データ3 ■タイトル(1) データ1 データ2 データ3 ■タイトル(2) データ4 データ5 データ6 ■タイトル データ1 データ2 データ3 A列の処理状況 (行挿入) ■タイトル データ1 データ2 データ3 (行挿入) ■タイトル データ1 データ2 データ3 (空白) データ4 データ5 データ6 (行挿入) ■タイトル データ1 データ2 データ3 なおデータの数字(連番)はD列に入れてありますが、 上記ルールにより■のあとや(2)(3)のとき同一タイトルなら連番にしてあるので この1の行を分割の判定としてもいい Office2013/Windows7

  • VBA 列が空白なら別のマクロへ移動したい

    いつもお世話になっております。 ある列(例としてはA列)に「Rose」というデータが入っていたり無かったりしています。(他の列には何かしらのデータが入っています。) A列に何も入っていなかった場合、別のマクロ(例として「test2」)へ移行するように組みたいのですが、空白の認識が上手くいきません。ご教授お願いいたします。 Sub test1() r = Range("65536").End(xlUp).Row For i = 2 To r If InStr("Rose", Cells(nLine, 1)) = "" Then Call test2 Exit Sub End If Next End Sub 環境はwindowsXP Excel2003です。 よろしくお願いいたします。

  • VBA Evaluate関数 型が一致しません

    Excel2003 VBAのEvaluateで以下の数式を実行すると エラー「型が一致しません」となってしまいます。 類似の質問を検索していろいろ参考にしてみたのですが 解決できなかったので質問させてください。 Sub test() Dim aa, bb, cc As String Dim y As Byte y = 1 With Sheets("Sheet1") aa = ".Cells(y, 1) > 0" bb = Left(aa, InStr(aa, "y") - 1) cc = Mid(aa, InStr(aa, "y") + 1) If Evaluate(bb & y & cc) Then ←ここでエラーになります。 y = 2 End If End With End Sub .Cells(1, 1)には10が入力されています。 宜しくお願い致します。

  • エクセルvba IFについて(複数条件)

    エクセルvbaでのifの構成について教えてください。 (1)*あいうえお   →あいうえお (2)あいうえお*   →あいうえお (3)*あいうえお*   →あいうえお     に変換させたいです。 以下のマクロを作りました。 Sub test() Dim c As Range For Each c In Selection.Cells If InStr(c, "*") = 1 Then c = Mid(c, InStr(c, "*") + 1) ElseIf InStrRev(c, "*") > 0 Then c = Left(c, InStrRev(c, "*") - 1) End If Next End Sub これだと(1)(2)はできるのですが、(3)は2回実行しないと全ての*が削除できないです。 1回の実行で「あいうえお」ができるようにするにはどうしたらよいのでしょうか。 本当は、 ****あいうえお**  →あいうえお のように、*(半角)や*(全角)が文字の前後についている場合、すべての*(半角)と*(全角)削除したいのですが(できれば1回の実行で)、そのようなことは可能なのでしょうか。 midやleftの作り方も間違っていれば、それもご教授ください。 よろしくお願いします。

  • VBA 指定文字列が出てきたら、左の文字は削除する

    お世話になっております。 Excel2003を使用しております。 指定文字列が出てきたら、左にある文字は全て削除したいと思っております。 例) 番号:0001  名前: 佐藤 太郎   趣味:散歩 ↓「名前:より左は削除」 名前: 佐藤 太郎   趣味:散歩 また、出来たら指定文字列より右にあるものも削除できたら良いなと思っております。 例) 番号:0001  名前: 佐藤 太郎   趣味:散歩 ↓「趣味:より右は削除」 番号:0001  名前: 佐藤 太郎 色々試してみています。 今後もたくさんのプログラムに使っていくことも考え、配列に入れることも考えています。 LeftDeleteMoji=Array("名前:") RightDeleteMoji=Array("趣味:") やりたいこととしては、                 (例)番号:0001  名前: 佐藤 太郎   趣味:散歩 左から指定文字列手前まで抜き出す とか    (例)「名前:」 名前: 佐藤 太郎   趣味:散歩 右から指定文字列まで抜き出す とか       (例)「趣味:」 番号:0001  名前: 佐藤 太郎 指定文字列と指定文字列の間を抜き出す とか (例)「名前:,趣味:」名前: 佐藤 太郎 があります。 A列を上から順番に行っていき、 必要ない部分はスルーして、必要な部分のみ抜き出し、 別シートに書き込む。 これを行おうと思っています。 If InStr(.Range("A" & i).Value, NeedData(Num)) > 0 And Len(.Range("A" & i).Value) > 0 then で文字列が含まれているか確認していたのですが、 配列の設定方法なのか、色々良く分からなくなってしまいまいました。 -------------------------------現在のプログラム NeedData = Array("", "名前:", "名前:", "趣味:") For i = 1 To MaxRow '重要データ保存 If Num > UBound(NeedData) Then Num = 0 End If If InStr(.Range("A" & i).Value, NeedData(Num)) > 0 And Len(.Range("A" & i).Value) > 0 Then '含む場合の動作 If NeedData(Num) = "" Then If InStr(.Range("A" & i).Value, NeedData(Num + 1)) > 0 Then EndData = InStr(.Range("A" & i).Value, NeedData(Num + 1)) ThisWorkbook.Worksheets("回答連絡メール内容").Range("A" & TESTRow) = Left(.Range("A" & i).Value, EndData - 1) '左から指定文字が出てくるまで! Num = Num + 2 TESTRow = TESTRow + 1 End If Else StartData = InStr(.Range("A" & i).Value, NeedData(Num)) + Len(NeedData(Num)) EndData = InStr(.Range("A" & i).Value, NeedData(Num + 1)) ThisWorkbook.Worksheets("回答連絡メール内容").Range("A" & TESTRow) = Mid(.Range("A" & i).Value, StartData, EndData) '左から指定文字が出てくるまで! Num = Num + 2 TESTRow = TESTRow + 1 End If End If Next ーーーーーーーーーーー------------------- 入力されているデータ(元のデータ)は決まりごとがあり、 必ずその文字データはあります。(順番も合っています) 上記プログラムは、配列が空白だったら、配列の2個目を検索して 右にある必要の無いデータは削除する。 そのような流れにしようと思っていました。 話がそれましたが、もっと良い(分かりやすい)プログラム方法がある気がします。 現状、一応完成?というところまできては居ますが、 もし、失敗した場合、どこが原因がハッキリしない感じになってしまっています。 左から指定文字列手前まで抜き出す    (例)「名前:」 名前: 佐藤 太郎   趣味:散歩 右から指定文字列まで抜き出す       (例)「趣味:」 番号:0001  名前: 佐藤 太郎 指定文字列と指定文字列の間を抜き出す (例)「名前:,趣味:」名前: 佐藤 太郎 良い方法があれば教えて下さい! よろしくお願い致します!

  • エクセルVBA 重複を表示したい

    エクセルVBA 重複を表示したい A列で重複すると警告するコードを以下のように作成しました。 これを修正してA列で重複して、なおかつB列でも重複した場合警告するコードにしたいのです。 添付した図では「同姓同名あり、確認してください、鈴木一郎、山口」と表示したいのです。 ご教授よろしくお願いします。 Sub test() Dim myRange As Range Dim 同一flag As Boolean Dim MsgStr As String For Each myRange In Range("A2:A10") If WorksheetFunction.CountIf(Range("A2:A10"), myRange) > 1 Then If 同一flag = False Then 同一flag = True If InStr(1, MsgStr, myRange) = 0 Then MsgStr = MsgStr & myRange & vbCrLf End If End If Next If 同一flag = True Then MsgBox "同姓同名あり" & Chr(13) & _ "確認してください" & Chr(13) & _ vbCrLf & MsgStr Else End If End Sub

  • vbaの繰り返し処理について

    vbaです。 Sub Test1() Dim Str As String Dim Pnt1 As Long Dim Pnt2 As Long Str = Range("A1") Pnt1 = InStr(Str, "重 http://") If Pnt1 <= 0 Then Exit Sub Pnt2 = InStr(Pnt1, Str, "要") If Pnt2 <= 0 Then Range("B1") = Mid(Str, Pnt1 + 2) Else Range("B1") = Mid(Str, Pnt1 + 2, Pnt2 - (Pnt1 + 2)) End If End Sub という式でA1からA2.A3と下にURLが入っており空欄になるまで同じ処理をしたいのですがどのように変更すれば作動しますでしょうか?

  • VBAについて教えて下さい。

    エクセル2003を使用してます。 ("Sheet1")のB列をダブルクリックすると、 ("Sheet2")の("AA100")を表示するようにしたいのですが、 ■の部分がエラーが出て、色々変更して試してるのですが駄目です。 どう言う風に、書けばいいのかわかりません。 どなたか教えて頂けませんか? 下記VBAです。 ──────────────────────────────── Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column <> 2 Then Exit Sub Sheets("Sheet2").Activate ■Range("AA100").Select End Sub ──────────────────────────────── よろしくお願いします。

  • VBA 文字セルに数値を一緒に表示させるには

    OSはXPpro、 Excelは2003を使用しています。 図の様な表で、F列の様な内容で、D列にC列の数値と合わせて表示させたいのですが、 Sub test() Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 4) = "一部" Then Cells(i, 4) = Cells(i, 4) + Cells(i, 3) End If Next i End Sub ですと、『型が一致しません』と出てデバックになってしまいます。 文字の数値を合わせるにはどの様にすればいいでしょうか? ご教示お願い致します。

専門家に質問してみよう