Excel VBAでのIF条件についての質問

このQ&Aのポイント
  • エクセルVBAでのIF条件の構成方法について教えてください。
  • 上記のマクロを使用すると、(1)と(2)の条件は実行できますが、(3)の条件は2回実行する必要があります。一度の実行で全ての*(半角)と*(全角)を削除する方法はありますか?
  • また、(1)(2)に加えて、*(半角)や*(全角)が文字の前後についている場合も削除したいです。
回答を見る
  • ベストアンサー

エクセル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の作り方も間違っていれば、それもご教授ください。 よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

方法1:「あい*うえお」も「あいうえお」にしてよい場合 sub macro1()  selection.replace what:="~*", replacement:="", lookat:=xlpart, matchbyte:=false end sub 方法2:アタマとオワリに限って除去したい場合 sub macro2()  dim c as range  for each c in selection   do while strconv(left(c, 1), vbnarrow) = "*"    c = mid(c, 2)   loop   do while strconv(right(c, 1), vbnarrow) = "*"    c = left(c, len(c) - 1)   loop  next end sub

kidibotkbg
質問者

お礼

早急の答えありがとうございます。 このようなやり方は全く思いつきませんでした・・ 勉強になりました。 ありがとうございました。

関連するQ&A

  • Excel VBA IF文がうまく動作しないわけがわかりません…

    未熟な私ですが… セルC2の文字列の6・7桁目に入っている文字により、8桁目の文字を 置き換えるものをつくりました。 例えば、セルのC2に、IRCD-311234 という値があれば IRCD-31A234 にしなさいというものです しかし、 ElseIf の条件式にあてはまるものがでてきても、 すべて最初のIFの条件式にしてしまい、Elseifに反応してくれません。 ****************************************************** Sub 変換() Dim DAT As Range Dim CAR As String If Mid(Range("C2").Value, 6, 2) = 31 Or 32 Or 33 Then For Each DAT In Range("A1:P40")     CAR = CStr(DAT) If Left(CAR, 5) = "IRCD-" Then    CAR = Left(CAR, 7) & "A" & Right(CAR, Len(CAR) - 8)  DAT.Value = CAR End If Next ElseIf Mid(Range("C2").Value, 6, 2) = 37 Or 38 Or 39 Then For Each DAT In Range("A1:P40") CAR = CStr(DAT) If Left(CAR, 5) = "IRCD-" Then CAR = Left(CAR, 7) & "B" & Right(CAR, Len(CAR) - 8) DAT.Value = CAR End If Next  End If  End Sub ****************************************************** 本やネットを見ているのですが、何が悪いのか私にはわかりません…。 どうかご指導をお願いいたします。

  • エクセルのマクロについて

    Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "ア") = 0 Then If InStr(.Cells(i, "D"), "ア(半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub このエクセルマクロはC列に「ア」があって、D列に「ア(半角)」の文字がない場合はメッセージというマクロなのですが、このマクロをア~ンまで同じ作業をしたいのですが、ひとまとめにマクロを組む事はできるのでしょうか?できる場合どのようにすれば良いでしょうか? 下記のようにして見たのですができませんでした。 Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "[ア-ン]") = 0 Then If InStr(.Cells(i, "D"), "[ア-ン](半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub

  • スペースが認識されません(エクセルVBA)

    空白文字に囲まれた文字を抜き出すマクロを製作したいのですが うまくいかず困っています。お助けください。 例えば、以下のような文字がA1セルに入力されているような場合に使用しています。 ”ab c d” f1 = Cells(i, "A") Cells(i, "A") = Mid(f1, InStr(f1, " ") + 1, InStr(InStr(f1, " ") + 1, Mid(f1, InStr(f1, " ") + 1), " ")) このマクロを動作させると、一つ目のスペースは認識されるのですが 二つ目のスペースは認識される場合とされない場合があります。 原因を調査するために以下のようなコードを上記マクロの下に追記したところ MsgBox Mid(f1, InStr(f1, " ") + 1) & " " & InStr(InStr(f1, " ") + 1, Mid(f1, InStr(f1, " ") + 1), " ") 表示は cd 0 のようになります。二つ目のスペースが認識されていないようです。 また、エクセルに数式を入力すれば、上記の式でも認識しておりますが 他の操作との関係もあって、できればVBAで処理したいのです。 データはテキストデータから取り込んでおります。 実際にはセルには漢字や仮名、数字などのデータが混在しております。 エラー回避のために試した方法としては以下の2つです。 1.文字列として変換する方法 Cells(1, "A")=Format(f1, "@") 2.スペースの全角半角をそろえる方法 (下記の文では全角を半角にしておりますが、その逆も試しました) If Cells(1 ,"A") = Cells(1 "A") Like "* *" Then Cells(1, "A") = Replace(Cells(1, "A"), " ", " ") End If どちらを行っても改善はみられませんでした。 どこに間違いがあるのか、思い当たらず苦戦しています。 よろしくお願いいたします。 (エクセル2003、VISTA)

  • \はエクセルでは全角?

    半角文字の\はエクセル(VBA)では全角扱いなのでしょうか? 添付のマクロを実行すると結果は"全角だろう"になります。 \はStrConvでvbWideを指定しても全角になりません。 全角の¥はStrConv/vbNarrowで半角になります。 どういう理由でこうなっているのでしょうか? \以外にもこのような文字があるのでしょうか? ご存知の方、教えていただけないでしょうか。 Sub Macro1() ch1 = "\" ch2 = StrConv(ch1, vbWide) If ch1 = ch2 Then Debug.Print "全角だろう" Else Debug.Print "半角だろう" End If End Sub

  • IFステートメントで半角でも全角でもtrueとさせ

    IFステートメントで半角でも全角でもtrueとさせるには? Sub test1() Dim str As String str = "ABC"’←全角のA If str Like "*A*" Then ’←半角のA MsgBox "Aがあります" End If End Sub これで、半角Aもメッセージを表示させたいのですが、 マッチバイトみたいなのってありますか?

  • 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が入っており空欄になるまで同じ処理をしたいのですがどのように変更すれば作動しますでしょうか?

  • 【ExcelVBA】IF条件を満たしているのに、IF条件のところで止まってしまう

    Sub test1() 変数1 = IsEmpty(Range("C1")) If Range("A1") > 0 And Range("B1") = 0 And 変数1 = True Then   test2 End If End Sub 止まったときのデバッグでの表示は Range("A1")は「100」(セルの中身) Range("B1")は「0」(セルの中身) 変数1はRange("C1")がエラー表示なので「True」 すべての条件を満たしているのですが、 IF条件のところで止まってしまいます。 (IF条件のところの1行が黄色くハイライトになっている状態) 止まったデバッグの後に、F5を押して実行させると、 IF条件の続きから実行されて、test2が実行されて処理が終了します。 何で、IF文のところで一度止まってしまうのかわかりません。

  • 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 文字に半角が含まれているか確認する方法

    VBAで文字に半角が含まれているか調べる方法を教えて頂けないでしょうか?全角が含まれているかのチェックはできたのですが。。。 下記は全角が含まれているかのチェックです。 If Asc(Mid(文字列, i, 1)) < 0 Or Asc(Mid(文字列, i, 1)) > 256 Then   処理 End If

  • ▲ExcelのVBA▼困っています

    何度もVBAで質問させてもらい助けてもらっています。 懲りずにまた質問ですが… 下のプログラムは"●"が跳ね返るものなのですが… ●の後を■と▲が追うようなプログラムにするには なにを追加すればいいのでしょうか…?; どなたか教えて下さい;;お願いします;; Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim maru As String, yoko As String, tate As String Sub 描画() Cells(X, Y).Value = maru End Sub Sub 削除() Cells(X, Y).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If End Sub Sub main() maru = "●" X = 1 Y = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub

専門家に質問してみよう