VBA初心者が指定先頭文字列の抽出と加工に取り組む方法

このQ&Aのポイント
  • VBA初心者が、指定先頭文字列の抽出と加工に取り組んでいます。
  • 質問者は、指定の条件に一致する文字列に色をつけたいと考えています。
  • 質問者は、単純な検索ではなく先頭文字を指定する方法について教えてほしいと求めています。
回答を見る
  • ベストアンサー

指定先頭文字列の抽出と加工

昨日からVBAに取り組んでいるVBA初心者です | B | 1|AABB| 2|BCBC| 3|BDBD| 4|AABC| 5|DEDE| この中から頭がAAのものに色をつけたいのですが どのようにしたらよいでしょうか? よろしくお願いします 単純にBBBBの文字列をB列から検索して色をつけるというのは 以下のようでやっていますが先頭文字を指定してそれに該当する 文字列の指定の仕方がわかりません。 どうかよろしくご教授のほどお願いします Sub testsub() Dim c As Object Dim myKey As String, fAddress As String myKey = "BBBB" With ActiveSheet.Range("b:b") Set c = .Find(What:=myKey, LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, MatchByte:=False) If Not c Is Nothing Then fAddress = c.Address Do c.Interior.ColorIndex = 1 '背景 赤 c.Characters.Font.Color = vbWhite '文字 白 c.Characters.Font.Bold = True '太字 Set c = .FindNext(c) If c.Address = fAddress Then Exit Do Loop End If End With ' End Sub

  • shiko
  • お礼率43% (86/199)

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

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

案として。 findで探さずに、B列を1行目からデータのある最終行まで1個ずつ、 先頭が"AA"かどうかを見て該当するなら背景を赤に換えてます。 やりかたはそれぞれだと思いますが参考になれば良いです。 先頭が"AA"かどうかはleft関数を使い、 If Left(Cells(1 + i, 2).Value, 2) = "AA" Then で判定しています。(左から2文字を取り出し"AA"か判定) (サンプルコード)------------------- Sub TEST() Dim lastRow, i As Integer ThisWorkbook.Worksheets(1).Activate lastRow = Cells(Rows.Count, 2).End(xlUp).Row For i = 0 To lastRow - 1   If Left(Cells(1 + i, 2).Value, 2) = "AA" Then     Cells(1 + i, 2).Interior.Color = 255   End If Next i End Sub

shiko
質問者

補足

ありがとうございます ほんとに素人なので試すだけでも時間かかって・・・ とりあえず、サンプルで提示させて頂いた状態ではうまくいきました。 これで全然OKなのですが 本番?用のデータではうまく反映されなくて少してこずっています もう少しやってみたいと思っております

その他の回答 (1)

回答No.2

本番用ファイルにどう実装されてどこがうまくいっていないか分かればアドバイスできるかも知れませんので、原因不明状態になりましたら言ってください。

関連するQ&A

  • 文字列で渡された式

    質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================

  • ☆文字列を抜き取る★

    テキストファイルに GetPoint = ErrMsg("おはよう",target) の行があるとします。 ダブルクオートでくくられた文字列だけを出力させたい場合 下記コードでどこが間違っているでしょうか?? 今のままだと全てのコードが出力になるんですよ。。。 アドバイスをいただけると幸いです。 Sub Main() Dim iFileNumber As Integer iFileNumber = FileSystem.FreeFile() Open "C:temp\sample.txt" For Input As #iFileNumber Dim stResult As String Dim stSerch As String Dim point As Long Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine If Instr(stResult,Chr(34)) > 0 Then If Instr(stResult,Chr(34)) > 0 Then v = stResult End If End If Loop Close #iFileNumber End Sub

  • Excel VBAで文字列の部分一致の文字列を表示

    以前、こちらで頭5文字までの一致で文字列を表示するVBAを教えて頂きました。今回はFINDなどの部分一致での文字列を表示することをしたいのですが、ご教示いただけますと幸いです。 下記はSheet1のA3に文字を5文字以内いれるとSheet2のC列からピックアップしてSheet1のA列に文字列を表示する及びSheet2のB列のデータをSheet1のC列に表示させるVBAです。 Sub Test2() Dim Ws1 As Worksheet, Ws2 As Worksheet Dim SData As String, i As Long, VRet As Variant Dim c As Range, LastRow As Long Set Ws1 = Sheets("Sheet1") Set Ws2 = Sheets("Sheet2") SData = CStr(Ws1.Range("A3").Value) If SData = "" Then Exit Sub i = 5 LastRow = Ws1.Cells(Rows.Count, "A").End(xlUp).Row If LastRow < i Then LastRow = i End If Ws1.Range(Ws1.Cells(i, "A"), Ws1.Cells(LastRow, "C")).ClearContents With Ws2 For Each c In .Range(.Cells(1, "C"), .Cells(Rows.Count, "C").End(xlUp)) VRet = InStr(1, CStr(c.Value), SData, vbTextCompare) If VRet = 1 And Len(c.Value) >= 10 Then Ws1.Cells(i, "A").Resize(1, 2).Value = c.Resize(1, 2).Value 'とりあえずSheet2のB列のデータ(C列のデータに同期したデータ)をSheet1のC列に Ws1.Cells(i, "C").Value = .Cells(c.Row, "B").Value i = i + 1 End If Next End With End Sub 宜しくお願い致します。

  • エクセルマクロで、書式が違っても文字列を評価する方法

    文字列書式のセルと、標準書式のセルの数字文字列を比較したいのですが、うまくいきません。 書式が違うと、range.textも違う値になってしまうようです。 結局、現状では一度文字列変数の中に一度いれてから処理していますが、もっと他によい方法はないでしょうか? ------------------------------- If range1 = range2 Then  ・・・・・ End If ------------------------------- Dim temp1 As String Dim temp2 As String If temp1 = temp2 Then ・・・・・・ end If ------------------------------

  • 指定した文字列が含まれる行を削除する

    データの照合をしています。 指定した文字列が、「O列」に入っていたら、その行を削除し、 行をつめる というようなマクロを組みたいのですが、エラーがかかってしまいます。 (下のVBは、ネットで公開されていたのを使用させていただいております。) Sub Macro1() Const col As String = "A" '文字列が入力されている列 Dim idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列は?", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then   For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, col).Value, keyWord) > 0 Then '    If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then       Rows(idx).Delete     End If   Next idx End If End Sub 「下から3行目のNEXTに対応するforがない」とエラーがでます。 ご教授、お願いいたします。

  • 文字列の括弧について(初心者)2

    文字列の括弧について(初心者) http://oshiete1.goo.ne.jp/kotaeru.php3?q=1110818 の質問の続きなのですが、 文字列の中で( )を1セットで使う方法を教えてもらったので自分の使用するプログラムに少し直したのですが、やはり2つ以上の括弧(カッコ)にも対応しなければならなくなりました。 どのようなプログラムになるのでしょうか? 私はInstrは文字列を左からよんでいって最初にある指定した文字(下記の例だと"("など)の場所を何文字目か示してくれるだけなので1つの括弧にしか対応できないと考えています。 なので文字列の中に指定した文字が何個含まれているか調べて、それぞれ何文字目か示してくれるプログラムが あればできると考えています。 どうか教えてください、おねがいします。 ↓今のプログラム Dim bucketL as Long Dim bucketR as Long Dim a as String Dim b as String a=Text1.text bucketL = InStr(a, "(") bucketR = InStr(a, ")") If bucketL < bucketR And bucketL * bucketR <> 0 Then Text2.text = "OK" End If

  • VBAで特定の文字以降の文字列の色の変更をしたい

    エクセルで特定の複数の特定の文字の色を変更したいです。 複数の文字列の色の変更の仕方については調べたのですが 変更したい文字列が複数でそれぞれ色指定が異なります。 内、ひとつは 『セル内の"→"以降の文字列』 を指定して 文字色を赤に変更したいのです。 変更したい文字列 『★とYY』を青に変えるのは下記で できました。 (1) 『セル内の"→"以降の文字列』 を指定して文字色を赤に変更 (2) 範囲指定を開いているシート全体にする という部分を加えたいです。 よろしくお願いいたします。 Sub Sumple() Dim myReg As Object Dim Match As Variant Dim r As Range Dim st As String Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "★|YY" myReg.Global = True For Each r In Range("A1:C10")    ' ←範囲はActiveSheetにしたい st = r.Value If myReg.Test(st) Then For Each Match In myReg.Execute(st) r.Characters(Start:=Match.Firstindex + 1, Length:=Match.Length).Font.ColorIndex = -3394816 ' フォントカラーを青 Next End If Next Set myReg = Nothing End Sub

  • 文字列の取り出し方

    今、Visual Basic 2008を使用しています。 textbox2とtextbox3があり、textbox2に複数行にまたがる文字列があります。 この文字列の中で、listbox1の中にある項目の文字列が入ってる場合はカンマ区切りで文字列の後ろにつなげたいのですが、うまくいきません。 具体的には あいうえお あかさたな いろはにほ というtextbox2の内容について、listbox1内に あ い という2つの項目があった場合、 あいうえお,あ,い あかさたな,あ いろはにほ,い という結果をtextbox3に書き出すという内容です。 Dim addtag As String = "" Dim i As Integer For Each part As String In TextBox2.Text.Split(vbCrLf) If part <> "" Then For i = ListBox1.Items.Count - 1 To 0 Step -1 If part.Contains(ListBox1.Items(i)) = True Then addtag = addtag & "," & ListBox1.Items(i) End If Next part = part & addtag TextBox3.Text = TextBox3.Text & part & ControlChars.NewLine part = "" addtag = "" End If Next というプログラムを組んでいますが、どこが間違っているのかわからず、煮詰まってしまいました。 プログラムは初心者で、根本から違っていたら恥ずかしい限りですが、どうかよろしくお願いします。

  • Excel VBAの文字列と数値の分類

    txtファイルで取り込んだ2行にまたがっている数値・英文字・ひらがななどを、数値だけのtxtファイルとそれ以外のtxtファイルを別々に作成し、保存するプログラムを組みたいのですが、よく分かりません。 ちなみに、使っているOSとAPはWinXP、Excel2003です。 InputData.txtの内容 A34bFg7p0 あ 1ylut890 B45LK4L え Number.txtの完成形 34701890454 String.txtの完成形 AbFgp あ ylutBLKL え '変数の宣言 Dim myFile As String Dim CC As Integer Dim XX As Integer Dim WW As Variant Dim str As String Dim tempStr As String Dim B As String Dim C As String myFile = Dir("InputData.txt") 'ファイルの読み込み If myFile = "InputData.txt" Then Open myFile For Input As #1 Do While Not EOF(1) Input #1, myText Loop '書き込みファイルの作成 Open "Number.txt" For Output As #2 Open "String.txt" For Output As #3 '数字・文字列の分類 CC = Len(myFile) For XX = 1 To CC str = Mid(myFile, XX, 1) If str >= 0 And str <= 9 Then B = B & str Else C = C & str End If Next Print #2, B Print #3, C Close #1, #2, #3 'エラーメッセージの表示 Else MsgBox "ファイルは存在しません。" End If ここまでやっている状態です。よろしくお願いします。

  • セル内の文字列強調

    検索してセル内の任意の文字のみを強調(赤太字など)させることは出来ますでしょうか。 任意の文字については複数の文字列を一気に検索、強調表示させたいのです。 一文字の場合は下記で動作させることができました。 ◆文字列“a”のみに色を付ける -------------------------------- Sub test02() Dim c As Range For Each c In Selection s = 1 Do x = InStr(s, c, "a") If x = 0 Then GoTo p02 c.Characters(x, 1).Font.ColorIndex = 3 MsgBox x s = x + 1 Loop While Not x = 0 p02: Next End Sub -------------------------------- 複数の文字に色をつけるところでまだ悩んでいます。 やり方がわからず恐縮ですが、お教え頂けると有難いです。