
お世話になります。
現在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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBA セルの書式設定 2 2022/03/30 10:48
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
特定の色のついたセルを削除
-
Excel UserForm の表示位置
-
【Excel VBA】一番右端セルまで...
-
VBA:日付を配列に入れ別セルに...
-
Excelで空白セル直前のセルデー...
-
【Excel VBA】マクロで書き込ん...
-
【VBA】【ユーザーフォーム_Lis...
-
CSVファイルを読み込んだらセル...
-
C# DataGridViewで複数選択した...
-
CellEnterイベント仕様について
-
エクセル、マクロで番号を読込...
-
EXCEL VBA 文中の書式ごと複写...
-
エクセル VBA ボタンをクリック...
-
【ExcelVBA】値を変更しながら...
-
Excel 範囲指定スクショについ...
-
データのある範囲を選択するVBA...
-
【VBA】写真の貼り付けコードが...
-
文字数に応じてfont-sizeを自動...
-
DataGridViewでグリッド内に線...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
特定の色のついたセルを削除
-
【Excel VBA】一番右端セルまで...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
VBA:日付を配列に入れ別セルに...
-
C# DataGridViewで複数選択した...
-
Excel UserForm の表示位置
-
入力規則のリスト選択
-
Excel 範囲指定スクショについ...
-
エクセル、マクロで番号を読込...
-
DataGridViewでグリッド内に線...
-
Excel VBAで特定の範囲の空白セ...
-
CellEnterイベント仕様について
-
Excel VBAでCheckboxの名前を変...
-
【ExcelVBA】値を変更しながら...
-
データグリッドビューの結合セ...
-
下記のマクロの説明(意味)を...
おすすめ情報