質問:エクセルでアルファベットじゃない値を条件分岐する方法

このQ&Aのポイント
  • エクセル2010を使用している場合、A列に入力された値の先頭文字がアルファベットでない場合に条件分岐する方法を教えてください。
  • 現在のコードは、26個のIFステートメントを使用して1文字目がアルファベットでない値をチェックしていますが、これを簡潔に書く方法はありませんか?
  • 条件分岐を行う際に、アルファベット以外の文字で始まる値をチェックする方法について教えてください。
回答を見る
  • ベストアンサー

アルファベットじゃないなら

初めまして。よろしくお願いします。 エクセル2010を使用しています。 例題としてA列に abc 123 あいう 一二三 という値が入っているのですが、”先頭文字(左から一文字目)がアルファベットじゃないのなら” という条件で条件分岐するにはどうすればいいでしょうか? Sub もし() Dim MyRow As Long For MyRow = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Left(Range("a" & MyRow), 1) <> "a" Then MsgBox "1文字目がアルファベットで始まっていません!" End If Next MyRow End Sub これでできるのですが、アルファベットは26個あるから、IFステートメントを26個作るしかないのでしょうか?

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

失礼 #2 です。 A-z だと [\^]_ が含まれてしまいますので "[!a-zA-Z]*" に訂正してください。

slgrbekqc3
質問者

お礼

[!a-zA-Z]* にした方がいいのですか。そうします。

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

次のようにしてもよいでしょう。 Sub もし() Dim MyRow As Long For MyRow = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Asc(UCase(Range("A" & MyRow))) < 60 Or Asc(UCase(Range("A" & MyRow))) > 90 Then MsgBox "1文字目がアルファベットで始まっていません!" End If Next MyRow End Sub アルファベットを全角文字にして文字コードを判断しています。

slgrbekqc3
質問者

お礼

皆さんとは違う方法ですね。 いろんな回答ありがとうございます。

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

sub macro1()  dim r as long    for r = 1 to range("A65536").end(xlup).row  if not left(cells(r, "A"), 1) like "[a-z,A-Z]" then   msgbox cells(r, "A") & " is not match"  end if  next r end sub みたいな。

slgrbekqc3
質問者

お礼

like "[a-z,A-Z]" でも可能なのですね。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

半角のアルファベットの大文字小文字のチェックなら Sub もしもし() Dim MyRow As Long For MyRow = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Range("a" & MyRow).Value Like "[!A-z]*" Then MsgBox MyRow & " の1文字目が『半角』アルファベットで始まっていません!" End If Next MyRow End Sub とか。 小文字だけで良いなら、"[!A-z]*" → "[!a-z]*"

slgrbekqc3
質問者

お礼

Like "[!A-z]*" これでうまくできました。ありがとうございます。

回答No.1

Asc 関数を使った不等式で If 文を書いてみてください。Asc の意味は、VBE でどこかに asc とタイプし、F1 キーを押してヘルプを見てください。なお「A」と「a」は異なるコードとなります。

slgrbekqc3
質問者

お礼

asc関数を使えばいいのですね。 大文字小文字も考慮して考えてみます。

関連するQ&A

  • ワイルドカードにしたくない

    例えばシートに aaa iii *********** eee ooo と入って場合、「***********」ならヒットさせたいのですが Sub test() Dim myRow1 As Integer With Sheets("Sheet1") For myRow1 = 1 To .Cells(Rows.Count, "A").End(xlUp).Row If .Cells(myRow1, 1) Like "***********" Then MsgBox "ありました" End If Next myRow1 End With End Sub これだと、aaaの時点でヒットしてしまいます。 If .Cells(myRow1, 1) Like "~***********" Then にすると、***********の行の時もヒットしません。 ***********を文字列としてvbaで検索する方法はありますか?

  • プロシージャー名を変数にはできない?

    シートに test1 test2 test3 として、 -------------------------------- Sub Sample() Dim myRow As Long Dim procedure As String For myRow = 1 To Cells(Rows.Count, "A").End(xlUp).Row procedure = Cells(myRow, 1) Call procedure Next myRow End Sub Sub test1() End Sub Sub test2() End Sub Sub test3() End Sub -------------------------------- こういう事ってできないのでしょうか? シートの文字を読み取ってプロシージャーを実行できれば、順番変えたり、要らないプロシージャーを消したりを、シート上で管理できるから楽なのになと思ったのですが。 これをやろうとすると、procedureというプロシージャーがないから Sub、Function、または Property が必要です。 になってしまいます。

  • VBAについて

    現在マクロ勉強中です。 教えて頂きたいのは、登録ボタンで指定セルの台帳への転記する方法です。 Private Sub cmdToroku_Click() Dim myrow As Integer Option Explicit With ActiveSheet If .Range("A4").Value = "" Then myrow = 1 Else myrow = .Range(Cells(.Rows.Count, 1).End(xlUp).Address).Row + 1 End If .Cells(myrow, 1).Value = TextBox1.Value End With End Sub 上記ですと、開いているシートのA1に入力されてしまいます。 別シートへ転記したい場合どのあたりを修正すればよいのでしょうか? お力お借りできれば幸いです。

  • シート内の特定のセルの範囲が変化した時、

    シート内の特定のセルの範囲が変化した時、 まずA列の最大値を求めて、その後A列とD列のそれぞれの条件にあった行のA列に 最大値+1を表示させるようにしたいのですが動作しません。 なぜ動かないか教えて下さい。 参考までに、そのプログラムを記載します。 宜しくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row <= 3 Or Target.Row > 65000 And Target.Column = 4 Then Dim i, j, max As Integer max = 0 For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row If max < Range("A" & i).Value Then max = Range("A" & i).Value End If Next i For j = 3 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(j, 1) = "" And Not Cells(j, 4) = "" Then Cells(j, 1) = max + 1 End If Next j End If End Sub

  • このVBAコードの解説をお願いします。

    特定の行の中で同じものが続いたらセルを結合する、ということがやりたくて 以下のコードをネット上から探してきました。 上記の動作は実現できたのですが、自分でこのコードをみてもイマイチわかりません。 お分かりになる方、できれば1行ずつ解説してください。 よろしくお願いします。 Sub Sample() Dim myRng As Range, myRow As Long Set myRng = Range("A1") For myRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(myRow, 1) If .Value = .Offset(1).Value Then Set myRng = Union(myRng, .Offset(1)) Else Application.DisplayAlerts = False myRng.Merge Application.DisplayAlerts = True Set myRng = .Offset(1) End If End With Next 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

  • 質問No.2259731で教えて頂いたコードを訳して欲しい

    昨日質問し、回答を頂いたものです。 もう少しで作業が上手くいきそうなのですが 教えて頂いたコードの各工程の意味(処理)がわからず 止まっています。 一つずつ調べてはいますが、かなり時間がかかっていて とても今日中に終わりそうになくて焦っています。 急いでいるもので、すいませんがどなたか下のコードの各行が どのような意味か、訳をつけて頂けないでしょうか。 Sub Test() Dim myCol As Integer, myVal Dim LRow As Long, myRow As Long With ActiveSheet  LRow = .Cells(65536, 1).End(xlUp).Offset(1, 0).Row  For myCol = .Range("IV1").End(xlToLeft).Column To 3 Step -1    myVal = 0    myRow = .Cells(65536, myCol).End(xlUp).Row    If myRow = 1 Then     .Columns(myCol).Delete    Else     Do While myRow > 1 And .Cells(myRow, myCol).Value <> "●"       myVal = myVal + .Cells(myRow, myCol).Value       myRow = myRow - 1     Loop     .Cells(LRow, myCol) = myVal    End If  Next myCol End With End Sub ちなみに元の質問内容は http://oshiete1.goo.ne.jp/kotaeru.php3?q=2259731 です。

  • Excelでwatabeさんに複数のセルを参照

    Excel2007でwatabe007さんに以前に作って頂いたこのようなソースがあります。 Sub Test4() Dim LastO As Long, LastG As Long Dim i As Long, str As String Range("D3", Cells(Rows.Count, "F").End(xlUp)).ClearContents LastO = Cells(Rows.Count, "O").End(xlUp).Row Range("A3:C3").Value = Cells(LastO, "O").Resize(, 3).Value str = Range("A3").Value & Range("B3").Value & Range("C3").Value For i = 3 To LastO   If str = Cells(i, "O").Value & Cells(i, "P").Value & Cells(i, "Q").Value Then     LastG = Cells(Rows.Count, "D").End(xlUp).Row + 1     If LastG < 3 Then LastG = 3     Cells(LastG, "D").Resize(, 3).Value = Cells(i + 1, "O").Resize(, 3).Value   End If Next End Sub これにいつも格子をつけて文字がセンターになるようにしたいですがどうすればよろしいですか?解答よろしくお願いいたします。

  • マクロ 入力する文字に色を付けたい

    Sub CountUp(ByVal mCol1 As String, mCol2 As String) Dim LastRow1 As Long Dim LastRow2 As Long Dim mRow As Long With Sheets("プレーヤー") LastRow1 = .Cells(Rows.Count, mCol1).End(xlUp).Row LastRow2 = .Cells(Rows.Count, mCol2).End(xlUp).Row If LastRow1 > LastRow2 Then mRow = LastRow1 Else mRow = LastRow2 End If If LastRow1 = 1 Then LastRow1 = 2 End If .Cells(mRow + 1, mCol1).Value = .Cells(LastRow1, mCol1) + 1 End With End Sub このコードに文字の色の指定をしたいです Selection.Font.ColorIndex = 3を入れたら赤色文字で入力できるかなと思ったのですがうまくいきませんでした(エラーにはならないのですが、色が付かなかったです)

  • フィルタオプションの設定の条件における文字について

    フィルタオプションの設定の検索条件範囲で指定した条件が半角・全角や大文字・小文字にかかわらず抽出するということはできますか? 商品情報というブックがあり、抽出シート(1枚目)と2枚目のシートにデータが入っています。 2枚目のシートのフィールド名を抽出シートのA1を基準に貼り付けています。 条件をA1:I3あたりに入力し、2枚目のシートの条件に合うものを抽出シートのA5以降に取り出すマクロを書いています。次回マクロを起動させたときにA5以降にデータがあれば削除させます。 いろいろな方に教えていただいて下記のようにできあがったのですが、ちょっと問題があって 質問しています。 Dim myRow1 As Long, myRow2 As Long myRow1 = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row myRow2 = Sheets("抽出").Range("A" & Rows.Count).End(xlUp).Row If myRow2 >= 5 Then Sheets("抽出").Range("A5:I" & myRow2).ClearContents Sheets("抽出").Range("A5:I" & myRow2).ClearFormats Sheets(2).Range("A1:I" & myRow1).AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("抽出").Range("A1").CurrentRegion, _ CopyToRange:=Sheets("抽出").Range("A5"), Unique:=False End Sub 現状では元データが全角だと半角で入力すると抽出されず、元データが小文字だと大文字は抽出されません。 いちいち元データの状態を把握しての検索になってしまいます。 このマクロを修正して全角・半角もしくは小文字・大文字にかかわらず抽出できるようにすることは可能でしょうか? どなたかご存知の方がいらっしゃれば教えていただけないでしょうか?

専門家に質問してみよう