• 締切済み

VBAのLike演算子で、

こんにちは。いつもお世話になっております。 VBAのLike演算子で、 日本語・アルファベット・数字が混ざっている文字列について、 アルファベット・数字のみを選択したいとき、 次のようなことを考えました。 j = 0 Do While Rng.Characters(j) Like "[!a-zA-Z0-9]" Rng.Start = Rng.Start + 1 j = j + 1 Loop しかし、実行してみると、 「指定されたコレクションのメンバは存在しません」 というエラーが返されてしまいます。 私の知識不足かと思いますが、 原因をご存じでしたら、教えていただきたいと思います。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#2の回答者です。 他の方は、Excelだと思っているようですが、私は、あくまでも、Word VBAを前提としてお答えさせていただいております。Range オブジェクトの下に、Characters コレクションがあるのは、Wordです。エラーの内容が違います。 前回、十分にVBAを理解している方だと思って、簡単な回答させていただきましたが、未だ、いろいろつまずいて、完成していないようでしたら、全体的なものを示していただて、その部分をこうしたいと提示していただいたほうが分かりやすいです。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

手探りでやったが、こういうことでよいのかな。 例データ A1セルに 'aasカキク123 と入れた(カキクは半角文字) 実行結果は英数以外のカタカナの カキク(半角)を返した。 !は正規表現の^ですか、「含まれない」ですよね。 Mid関数などで出来ないかと思ったが、Charactersオブジェクトを使ってみた。 ーー Sub test02() Set obj = Range("A1") Dim objChr As Characters j = 1 s = "" Do While j <= Len(obj) Set objChr = obj.Characters(Start:=j, Length:=1) MsgBox objChr.Text If objChr.Text Like "[!a-zA-Z0-9]" Then s = s & objChr.Text j = j + 1 Loop MsgBox s End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 質問とコードの内容が違うようです。 >「指定されたコレクションのメンバは存在しません」 Characters(j)のCharacters は、オブジェクトであって、コレクションがあっても、それで文字列は取れません。ここら辺は、基本的なレベルです。 それはともかく、 >アルファベット・数字のみを選択したいとき、 コードと意図しているまったく内容は違います。全体として、どういう内容かは分かりませんが、Text を取り出すなら、全体を Text を取ればよいのですが、Document を選択をするというなら、違います。なお、以下は、最初に、範囲選択のSelection が必要です。 サンプルを出しておきます。実用には、Find メソッド等を使います。 Sub Test1()   Dim rng As Range   Dim i As Long   Dim st As Long   Dim ed As Long   Dim s As Variant   st = -1      Set rng = Selection.Range      For i = 1 To rng.Characters.Count     s = rng.Characters(i).Text     If s Like "[A-z0-9]" Then     If st = -1 Then st = i - 1     ElseIf st > -1 Then       ed = i - 1       Exit For     End If   Next   rng.SetRange Start:=st, End:=ed   rng.Select End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

以下の様なコードは参考になりますでしょうか。 Sub ボタン1_Click() If ActiveCell.Value Like "*[a-zA-Z0-9]*" Then MsgBox "指定文字を含んでいます" Else MsgBox "指定文字を含んでいません" End If End Sub

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

関連するQ&A

  • 簡単なエクセルVBA

    最近エクセルのVBAを勉強し始めたのですが、 1×1=1 1×2=2 1×3=3  ・  ・ 9×9=81 と出るようにしたいのですが、 Sub kuku() Do While i < 9 i = i + 1   Do While j < 9   j = j + 1   a = i * j   Debug.Print i; "×"; j; "="; a   Loop Loop End Sub としたところ1×9=9までしかでません。 どうすれば上手くループするようになるでしょうか? お願いします。

  • VBA 九九 Do While

    VBAのDo Whileステートメントを使って九九の表をつくりたいのですが、何度やっても途中で詰まり、実行に至りません。 For NextとDo untilではできたと思うのですがDo Whileがどうしてもわからなくて… どなたか助けてください。お願いします。 Sub 九九計算_for() Dim i, j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j Next Next End Sub Sub 九九計算_do_until() j = 1 Do i = 1 Do Cells(j, i).Value = i * j i = i + 1 Loop Until i = 10 j = j + 1 Loop Until j = 10 End Sub

  • VBAにおけるニュートン法

    VBAでx+EXP(x)+sin(x)に初期値を与えてニュートン法で解くプログラムを作りたいのですが、Do loop whileの使い方がいまいちよくわかりません。 教えてくださいお願いします。

  • VBAでのDoWhileの中のDoWhile

    VBAでファイル名取得のマクロを作成しているのですが buf = Dir(C\aa\aaa\, vbDirectory) buf= Dir(C:\aa, vbDirectory) Do While buf <> "" Do While bufa <> "" msg = msg & bufa & vbCrLf bufa = Dir() Loop msg = msg & buf & vbCrLf buf = Dir() Loop がうまく動作しません。 Dirの()が空白なのと、Do While <>の中身が空白のどちらかが原因だと思うのですが Do Whileの中でさらに Do Whileを動作させるにはどのように書けばいいのでしょうか?

  • ACCESS VBAが分からない!この問題ですが

    ACCESS VBAの勉強をはじめました。 下のプロシージャを実行するとメッセージボックスに「2018/08/30」と出るようですが、なんでそうなるのかが分からないんです。 ちなみに Loop は繰り返しでWhileは~間という意味は分かるのですが。。。 よろしくお願いいたします。 Sub Lesson() Dim ret As Date, i As Long ret = #8/29/2018# Do ret = ret + 1 i = i + 1 Loop While i > 3 MsgBox ret End Sub

  • VBAでln関数の計算

    VBAでln関数から以下のようなプログラムを組みましたが、 オーバーフローします。どこが原因でしょうか? 初心者なので初歩的なところで間違えていると思います。 Sub log関数() Dim i As Double Dim t As Double i = 2 Do i = i + 1 t = Log(i) Loop While (t > 10) MsgBox (i & "はin(x)が最初に10を超える数字です") End Sub 値として最初の数字の3でとまってしまいます。 ぜひとも間違いご指摘ください。

  • VBA 桁数が混在するソート

    シートやセルを使わず、VBAのみでクイックソートを実装したいのですが 桁数が混在する列だと正しくソートされません。 1 1 10 10 15 2 等と言う結果になります。 元のデータは外部ファイルで修正をかけたくないので VBA内で格納したデータの桁数を調節する等解決策はありますでしょうか? 以下メソッドです Sub QuickSort1(ByRef argAry As Variant, ByVal lngMin As Long, ByVal lngMax As Long, sortnum As Integer) Dim i As Long Dim j As Long Dim vBase As Variant Dim vSwap() As Variant: ReDim vSwap(UBound(argAry)) vBase = argAry(sortnum)(Int((lngMin + lngMax) / 2)) i = lngMin j = lngMax Do Do While argAry(sortnum)(i) < vBase i = i + 1 Loop Do While argAry(sortnum)(j) > vBase j = j - 1 Loop If i >= j Then Exit Do For i3 = 1 To UBound(argAry) vSwap(i3) = argAry(i3)(i) argAry(i3)(i) = argAry(i3)(j) argAry(i3)(j) = vSwap(i3) Next i = i + 1 j = j - 1 Loop If (lngMin < i - 1) Then Call QuickSort1(argAry, lngMin, i - 1, sortnum) End If If (lngMax > j + 1) Then Call QuickSort1(argAry, j + 1, lngMax, sortnum) End If End Sub

  • VBA ループについて質問です。

    お世話になります。 VBA ループで『2行目を削除して空白になったら終了』がうまくいきません。 ※1行目は固定です。 ※2行目を削除したら、3行目以下が上がって3行目が2行目になります。 ※2行目に何もなくなったらループ終了 ※実際は複数シートで他の作業もあるので、『i』でなく『j』です。 ※複数シートでの作業が出来る記述でおねがいします。 ▼▼▼▼▼▼ Dim j As Long j = 2 Do While Cells(j, 1) <> "" Sheets("◆抽出先 (提灯)").Select Rows("2:2").Select Selection.Delete Shift:=xlUp j = j + 1 Loop ▲▲▲▲▲▲ どうすれば良いでしょうか? すみませんがよろしくお願いいたします。 Windows10 EXCEL 2010

  • 【VB】セルが空になるまで処理を繰り返したい

    Excel VBAを使用してです。 列Aにデータがずらっと入っています。 そのデータを列Bに、 Do while ~loop か Do until ~loopを使って データが無くなるまでコピーするという処理を書きたいのです。 VB歴が浅いためひらめきません。よろしくお願いします。m(__)m

  • 無限ループ VBA IE操作

    VBAです。 とあるサイトで Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub が無限ループに陥ります。 中断して Exit Sub を入れてみましたが、抜けれません。 ページは既に表示済みです。 なぜ無限ループが抜けられないのか、 なぜページが表示されているのにこのコードが繰り返されるのか 何かわかる方よろしくお願いします。

専門家に質問してみよう