お世話になります。
現在VBAの勉強としてエクセルでマクロを書いているのですが、セル内に郵便番号や日付を入れたときの書式判定で悩んでいます。
例えば、セルの範囲A2:A10に「000-0000」の形で郵便番号が表示されるように、表示形式を設定したとします。
その際に、表示されている値が 「数値3桁」+「-」+「数値4桁」といった形で表示されていることを判定したい場合、どのように記述する方法があるでしょうか?
ちなみに、私は今順番を関係なく、セルの値を取得した後で前3桁と記号と後ろ4桁に分解し、
それぞれが数値か、それとも「-」かで判定を行っています。
ほかにも方法がありましたら、参考までに知恵をお貸しください。
よろしくお願いいたします。
No.7ベストアンサー
- 回答日時:
こんにちは。
#6 のご回答にありますとおり、セルの表示形式を反映させた、つまりセルに
表示されたそのままのデータを取得する Text プロパティーがあります。
あとは、この程度のチェックなら Like 演算子でもよさそう。
Dim sText As String
sText = Range("A1").Text
If sText Like "###-####" Then
MsgBox "Good Format"
End If
こんな感じ。# は任意の1文字の数字を表します。
アドバイスありがとうございます。
Like演算子、ですか。
なるほど、こういった使い方もできるのですね!!
さっそく試してみたいと思います。
ご意見ありがとうございました。
No.6
- 回答日時:
あまり本に書いてないと思うが
Sub test01()
MsgBox Range("a1").Text
End Sub
やってみてください。
表示形式が設定(適用)された後のセルの状態(見た目)が捉えられるのでは。
だから、それ(その文字列)を対象に考えれば良いのでは。
他に
Sub test01()
MsgBox Range("A1").NumberFormat
End Sub
も考えて見てください。
ーーー
質問に色々書いているが、
エクセルのセルの「値」と、セルの「表示形式」は違うものであることは十分判っているのかな。多分セルの値と表示形式は別の場所にデータを保持していて、シートの表示は、表示するとき両者を合成して表示していると思う。
アドバイスありがとうございます。
そうですね、どちらかというとセルの中に入っている「値」というよりは、
表示形式によって変化した、見た目上の表示を判定したいと考えていました。
もう少し、そういった部分を含めて基礎に戻って勉強をしてみようと思います。
ご意見ありがとうございました。
No.5
- 回答日時:
一例です
A1が対象です
Sub test()
If InStr(Range("a1").Text, "-") = 4 And Len(Range("a1").Text) = 8 Then
MsgBox "郵便番号です"
Else
MsgBox "何でしょう?"
End If
End Sub
参考まで
アドバイスありがとうございます。
なるほど、InStrで「-」が見つかった位置を見て、なおかつそれを含めたテキストの長さが8文字であるかという判定ですね。
この判定に、「-」以外のところが数値になっているかの判定を加えればいけそうですね。
貴重な参考意見、ありがとうございました。
No.4
- 回答日時:
>「数値3桁」+「-」+「数値4桁」といった形で表示されていることを判定したい場合
一例として正規表現で。(セルA1に表示形式で入っているとします)
Sub try()
Dim RegExp As Object
Dim st As String
Set RegExp = CreateObject("VBScript.Regexp")
st = Range("A1").Text
RegExp.Pattern = "\d{3}-\d{4}"
If RegExp.Test(st) Then
MsgBox "郵便番号"
Else
MsgBox "郵便番号ではなさそう"
End If
Set RegExp = Nothing
End Sub
ご参考程度に。
アドバイスありがとうございます。
正規表現、やはりそちらのほうになってしまいますか…(^^;
もしかしたら、とは思ったのですが、ソースを参考に少し資料を探して勉強してみます。
ご意見ありがとうございました。
No.2
- 回答日時:
対象がA1に文字列で入っているとして、式で書くならこんなところでしょうか?
=IF(AND(ISNUMBER(VALUE(LEFT(A1,3))),MID(A1,4,1)="-",ISNUMBER(VALUE(RIGHT(A1,4))),SUBSTITUTE(A1,".","")=A1,SUBSTITUTE(UPPER(A1),"E","")=A1),"郵便番号","郵便番号以外")
アドバイスありがとうございます。
エクセルの関数のほうでのご意見ですか、そちらのほうもあまり勉強が進んでいるともいえませんので、
今後の参考にさせていただきたいと思います。
ありがとうございました。
No.1
- 回答日時:
> セルの値を取得した後で
セル書式設定で「その他」の「郵便番号」を選択しているのですよね?
それなら「値」ではまずいんじゃないですか?(0で始まる郵便番号の場合)
Sub 〒番号()
Dim x As String, buf As Boolean
x = Range("A1").Text
If IsNumeric(Left(x, 3)) Then
If Mid(x, 4, 1) = "-" Then
If IsNumeric(Right(x, 4)) Then
buf = True
End If
End If
End If
MsgBox IIf(buf, "郵便番号と思われます。", "郵便番号じゃないみたい。")
End Sub
アドバイスありがとうござます。
やはり、最初は分解して判定をと考えてしまいますよね。
投稿した後でLike演算子を使う方法を見つけましたので、今はそちらを使用しています。
参考になるご意見をありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
【VBA】【ユーザーフォーム_Lis...
-
【VBA】写真の貼り付けコードが...
-
複数指定セルの可視セルのみを...
-
特定の色のついたセルを削除
-
同じフォルダ内にある複数の閉...
-
【エクセルVBA】FindNextで検索...
-
【ExcelVBA】値を変更しながら...
-
ユーザフォームを使ってのデー...
-
VBA 検索結果の行を取得。上か...
-
Excelで空白セル直前のセルデー...
-
CellEnterイベント仕様について
-
【Excel VBA】一番右端セルまで...
-
VB6で、表示させた時間をExcel...
-
VB2005 DataGridView で選択...
-
オートフィルタの結果をコピー...
-
C# DataGridViewで複数選択した...
-
データのある範囲を選択するVBA...
-
vbaマクロ 実行時エラー '91'...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
Excel UserForm の表示位置
-
Excelで空白セル直前のセルデー...
-
【Excel VBA】一番右端セルまで...
-
【VBA】【ユーザーフォーム_Lis...
-
Excel 範囲指定スクショについ...
-
Excel VBAでCheckboxの名前を変...
-
特定の色のついたセルを削除
-
【ExcelVBA】値を変更しながら...
-
エクセルのカーソルを非表示に...
-
VBA:日付を配列に入れ別セルに...
-
EXCEL VBA 文中の書式ごと複写...
-
入力規則のリスト選択
-
DataGridViewでグリッド内に線...
-
Excel VBA IF文がうまく動作し...
-
関数の引数でrangeを指定したとき
-
C# DataGridViewで複数選択した...
-
Excel VBAで特定の範囲の空白セ...
-
下記のマクロの説明(意味)を...
おすすめ情報