こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAで

いつもお世話になります。

if文で、”【任意の数字】”カッコつきの数字だけのセルを判別するにはどうすればいいのでしょうか?

宜しくお願いします。

投稿日時 - 2004-12-14 14:59:00

QNo.1126651

暇なときに回答ください

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

No.1です。

No.1の補足欄について。
Ifの条件のIsNumericのところを以下のように変更して下さい。

IsNumeric(Mid(temp, 2, Len(temp) - 2))

IsNumeric(Mid(temp, 2, Abs(Len(temp) - 2)))

投稿日時 - 2004-12-14 18:20:37

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(11)

ANo.11

Debug.Print "a123a" Like "a[0-9][0-9][0-9]a"
Debug.Print "a12a" Like "a[0-9][0-9]a"
Debug.Print "a1a" Like "a[0-9]a"

とすれば違います?
aのところを変えて or でつなげばよいのでは?

投稿日時 - 2004-12-15 23:24:35

お礼

皆さん回答有難うございました。
解決しました。

質問を出す一義は解決するか如何かですが、それに付随する回答の方が役に立つ事もあるのも事実です。ですから質問から派生した回答を頂けるのも有難いです。
(要は質問が煮詰まってないという事もありますが。。。)

投稿日時 - 2005-01-17 11:49:28

ANo.10

No.1、5、6です。

No.7に対して。
No.5の回答を読み直してみると、かなり失礼な書き方をしているように思えました。
その点は、まず謝りたいと思います。

それから、後半の既出回答うんぬんの件ですが、ちょっと表現の仕方が悪かったようです。
既出回答を流用して、かつご自身の新しい情報を付加すること自体を言っているのではありません。
まるで、それまでの回答が存在しないかのように書くのが、どうか?と思うのです。
それで、既出回答をあまりご覧になっていないという風に思えたのです。
(いつもではないです、もちろん。)
一言「既出ですが」のように添えられたら、と思います。
imogasiさんの(特にVBAの)回答はすばらしいので、ちょっと残念に思っていました。

もう一度、No.5の言い方は失礼でしたので、謝罪します。
これでお気を悪くされずに、ますますすばらしい回答をされていかれることを、切に願います。

あと、質問者さんには、関係ないことで場所を取って申し訳なかったです。

投稿日時 - 2004-12-15 09:22:03

ANo.9

#8訂正します

●数字チェック
 ○小数点を考慮する
  IsNumericでチェック(NO1さんロジック)
 ○小数点を考慮しない
  1文字分ループで"0123456789"にあるかどうかを調べます(InStrでチェック)

投稿日時 - 2004-12-14 18:50:13

ANo.8

単純に
"【"と"】"があって、その中身が数字"0123456789"であるセルでよいのでしょか?

●"【"と"】"のチェック
"【"と"】"があるかはInStrです
逆パターン("】123【")、
文字が無いがない("【】")のチェックが必要であればチェックしましょう

●数字チェック
1文字分ループでIsNumericで調べますたら良いですが、"."も数字となるので、"0123456789"にあるかどうかを調べます
これもInStrでOK
(小数点考慮ならIsNumericでOKです)

これでどうでしょうか?

※上記仕様は"AA【0123】BBB"も対応できるますが、そこまで必要で無ければNo1さんのロジックでOKです

※お願い
具体例がないので、みんな混乱していると思いますよ

投稿日時 - 2004-12-14 18:43:13

ANo.7

#3から#5のご意見に対し、
>No.2の方の回答(つまり私の回答)を訂正する意図がまったくもって不明です。
#2のご回答を「訂正」する意図は全くありませんでした。
質問を読んで、文章の意味が判らなかったから、#3を書いて、まあその(1)かなと推測して、思い直して#4を
上げました。
>都合のよいものだけのような気がしますが
今考えると【】に囚われてしまって、中の数字だけ抜き出すことに目が行って、ロジックが不完全でしたね。済みません。ただ【】が前後に必ずあると言う前提(そういうケース)なら使えるかも。上げた例は悪いが。訂正版
Sub test01()
For i = 1 To 4
s = Cells(i, "A")
If Left(s, 1) = "【" And Right(s, 1) = "】" Then
n = Mid(s, 2, Len(s) - 2)
If IsNumeric(n) Then
MsgBox "数字です"
Else
MsgBox "数字でない"
End If
Else
MsgBox "【】がない"
End If
Next i
End Sub
>回答する際は、既出回答を全部確認してから投稿することを勧めます。
完全とはいかないですが、見てます。
>既出とかぶる回答が多すぎますよね?
私は中身(回答のコアになるやり方など)ばかりで、回答をしないするを考えてません。勿論それが大きいですが、説明の表現とかにおいても、質問者に役立ちそうだと思えば、自分が回答を書きたかったら入れているのもあります。そういう主義です。
そういうのが、為になったかどうかは、ご質問者が評価するのではないですか。またそういうタイプの回答は、そこは質問者がよく考えていて、評点対象外に評価(即ち評価されない)されたりされているケースが多いですね。
いつも鋭く深い内容のご回答を上げられているおられて、ご尊敬しているmaruru01さんに言われるのは残念ですが、当方浅学ですが、まあ好きで時間を奉仕して回答をあげているOKWEBですので、今後ともよろしく。
ご質問者には、済みません。

投稿日時 - 2004-12-14 18:38:29

ANo.5

No.1です。

No.4のimogasiさんへ。
>(1)を(1)【123】のような【】で前後を囲まれた数値のセル
>と解釈して
理解出来ません。
No.2の方の回答(つまり私の回答)を訂正する意図がまったくもって不明です。
No.4のコードでは、
「a123」
「123b」
「1234」
「<123>」
も全部OKになります。
データ例は、都合のよいものだけのような気がしますが。
わざわざ、前後の「【」「】」の判定を省略したのはどういうつもりなんでしょうか?

ついでに、もう一言。
回答する際は、既出回答を全部確認してから投稿することを勧めます。
(既出とかぶる回答が多すぎますよね?)

投稿日時 - 2004-12-14 16:34:44

ANo.4

#3です。#2を訂正。
(1)を(1)【123】のような【】で前後を囲まれた数値のセル
と解釈して
Sub test01()
For i = 1 To 4
n = Mid(Cells(i, 1), 2, Len(Cells(i, 1)) - 2)
If IsNumeric(n) Then
MsgBox "数字です"
Else
MsgBox "数字でない"
End If
Next i
End Sub
データ例
【12343】
12  --->アポストロフィつき
ad
【123s】
1だけ「数字です」

投稿日時 - 2004-12-14 16:00:46

ANo.3

>、”【任意の数字】”カッコつきの数字だけのセル
と言う条件はどう解釈したら良いのでしょうか
(1)【123】のような【】で前後を囲まれたセル
(2)【任意の数字】という文字列かまたは1234のような数字のセル。

投稿日時 - 2004-12-14 15:48:36

補足

回答有難うございます。

1番でお願いします。
【】で前後を囲まれた数字のセルです。

投稿日時 - 2004-12-14 17:51:47

ANo.2

#1さんの大部分流用ですが(笑)
一応、複数個あるところから抽出するように見えるので、ループ加えてみました。

ループ終点の65536は好きな数字で(笑)
列方向にも検索するなら、Cells(intI, 1)の1を変数にして、ループを二重にまわしてください。

* * * * * * * * * * * * * * * * * * * * * * *

'A列を検索
For intI = 1 To 65536

temp = Cells(intI, 1)
If temp <> "" Then
If Left(temp, 1) = "【" And _
Right(temp, 1) = "】" And _
IsNumeric(Mid(temp, 2, Len(temp) - 2)) Then
res = MsgBox("行 = " & intI)

End If

End If

Next intI

投稿日時 - 2004-12-14 15:42:53

補足

回答有難うございます。

早速試してみたのですが、1さんと同じくセルが1字のときエラーになるみたいです。

何とかならないでしょうか。
宜しくお願いします。

投稿日時 - 2004-12-14 17:55:39

ANo.1

こんにちは。maruru01です。

ベタなやり方ですと、こんな感じ


temp = Range("A1").Value

If Left(temp, 1) = "【" And Right(temp, 1) = "】" And IsNumeric(Mid(temp, 2, Len(temp) - 2)) Then
  MsgBox "OK"
Else
  MsgBox "NG"
End If

投稿日時 - 2004-12-14 15:16:34

補足

回答有難うございます。

質問の仕方が悪かったみたいです。
検索するセルには空白、文字、数字とカッコ付き数字が存在します。

この状態でカッコつきの数字だけを判別したかったのですが、空白でも文字でも数字でもないとすれば良いと思ったんですが、その仕方も分からないんです。(TT)。でもカッコ付き数字も文字なんですよね。

早速試してみたのですが、セルが1字のときエラーになるみたいなのですが、セル値が上記の為1字のときもあるわけです。

何とかならないでしょうか。
宜しくお願いします。

投稿日時 - 2004-12-14 17:34:40

あなたにオススメの質問