日付のセルを検索するために、以下のような処理をさせていますが、日付だけのセルが検索できません。
【例】(1)は検索できますが、(2)が検索されません。
(1) 2010/03/05が誕生日
(2) 2010/03/05
(※(1)、(2)共に検索できるようにしたいと思っています。)
Dim FoundCell as Variant
Dim search_words as String
search_words = "20??/*/"
Set FoundCell = Cells.Find(what:=search_words,After:=ActiveCell,
LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False, MatchByte:=False)
※Excel2003を使用しています。
A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
#6です。
こんな記述もあるかも。
Sub test03()
Dim cv As Variant
Dim c As Variant
Dim maru As Long
Dim d As Long
Dim search_words As String
search_words = "20??/*/*"
cv = ActiveSheet.UsedRange
For Each c In cv
If IsEmpty(c) Then
'何もしない
ElseIf c = "○" Then
maru = maru + 1 '○セル発見
ElseIf c Like search_words Then
d = d + 1 '日付セル発見
End If
Next c
MsgBox maru & " : " & d
End Sub
ご回答いただきまして、ありがとうございます。
UsedRange、For Each~Next、Like、を使うことで非常にシンプル
で分かり易いコードになるんですね。
是非、使わせて頂きます。
はじめて、「教えて!goo」に質問させて頂きましたが、大変、
参考になりました。ありがとうございます。
No.8
- 回答日時:
#6です。
配列に一旦収めて処理するようにしたのですね。
結局、しらみつぶしに比較するのであれば、
Like演算子でシンプルに比較してはどうでしょうか?
Sub test02()
Dim i As Long
Dim j As Long
Dim cv As Variant
Dim end_row As Long
Dim end_col As Long
Dim maru As Long
Dim d As Long
Dim first_s As Long
Dim last_s As Long
Dim pos_20 As Long
Dim search_words As String
search_words = "20??/*/*"
end_row = Cells.SpecialCells(xlCellTypeLastCell).Row
end_col = Cells.SpecialCells(xlCellTypeLastCell).Column
cv = Range(Cells(1, 1), Cells(end_row, end_col))
maru = 0 '○のセルの数
d = 0 '日付セルの数
For i = 1 To end_row
For j = 1 To end_col
If IsEmpty(cv(i, j)) Then
'何もしない
ElseIf cv(i, j) = "○" Then
maru = maru + 1 '○セル発見
ElseIf cv(i, j) Like search_words Then
d = d + 1 '日付セル発見
End If
Next j
Next i
MsgBox maru & " : " & d
End Sub
No.7
- 回答日時:
シート構成がどのような形式かが分かりませんので参考になるかどうかは微妙なのですが
前回も申し上げたとおりエクセル内での日付はシリアル値で収納されていますので文字列として "20??/*/"の検索をかけても引っかかりません
シリアル値で入力された日付セルを検索する為には
・該当するデータを検索する
"20??/*/"が2000/1/1~2099/12/31までとするとシリアル値は
36526~73050
の数値となりますのでこの範囲の数値データーを検索することで検索は可能
ただし日付以外の数値データーも該当してしまう為日付のみが入力されているセル範囲指定して検索する必要があります
・セルの表示形式が日付"年/月/日"の形式になっているセルを検索する
NumberFormatでセルの表示形式を調べることが可能です
表示形式=m/d/yyyy または yyyy/m/d や yyyy/mm/dd といった形式のセルを検索、ご質問の2010/03/05はyyyy/mm/ddに該当します
セルの表示形式と検索範囲のシリアル値両方に該当するセルを検索結果として表示する形にすれば目的は達成できるかとも思われます。
詳しくご回答いただきまして、本当にありがとうございます。
上記のご回答の方法が最適だと思い、数値セルだけを検索する方法
を調べていたところ、以下のHPにて、膨大なセルのデータを高速に
処理する方法が紹介されていました。
(例)10,000行×100列=1,000,000セルのセル情報を
高速に配列に格納
http://officetanaka.net/excel/vba/speed/s11.htm
この方法では、シリアル値で入力されている日付データも書式どお
りの値で配列に格納されます。「シリアル値の日付」も「文字列の
日付」も"20","/"などの文字列が含まれるかどうかを確認すること
で、目的が達成できそうです。
ちなみに、以下の処理を5000行×256列で試したところ、1~2秒で
終了しました。
Sub New_Script()
Dim i As Long
Dim j As Long
Dim cv As Variant
end_row = Cells.SpecialCells(xlCellTypeLastCell).Row
end_col = Cells.SpecialCells(xlCellTypeLastCell).Column
cv = Range(Cells(1, 1), Cells(end_row, end_col))
maru = 0 '○のセルの数
d = 0 '日付セルの数
For i = 1 To end_row
For j = 1 To end_col
If IsEmpty(cv(i, j)) Then
'何もしない
ElseIf cv(i, j) = "○" Then
maru = maru + 1 '○セル発見
Else
first_s = InStr(1, cv(i, j), "/", vbTextCompare)
last_s = InStrRev(cv(i, j), "/", , vbTextCompare)
If first_s <> last_s Then
pos_20 = InStr(1, cv(i, j), "20", vbTextCompare)
If pos_20 > 0 And pos_20 < first_s Then
d = d + 1 '日付セル発見
End If
End If
End If
Next j
Next i
MsgBox maru & " : " & d
'実行結果は、maru = 56914 : d = 474
End Sub
何度もご親切にご回答いただいたお陰で、今までよりかなり高速な
方法を見つけることができました。
本当にありがとうござました。
No.6
- 回答日時:
別案です。
Sub test01()
Dim c As Range
Dim search_words As String
search_words = "20??/*/*"
For Each c In ActiveSheet.UsedRange
If c.Value Like search_words Then
c.Select
MsgBox c.Address
End If
Next c
End Sub
No.3
- 回答日時:
シート内の日付を文字列に変換してみては?
=CONCATENATE(YEAR(A1),"/",MONTH(A1),"/",DAY(A1))
ご親切に再度ご回答いただきまして、誠にありがとうございます。
検索するシートは何千行もあり、そのようなシートを何十も検索しなけ
ればなりませんので、セルを一つひとつ確認する方法は取りたくないと
思っています。
「2010/03/05」や「2010/2/7」など日付だけのセルをすべて検索できる
方法があれば、そのセルだけをご回答頂いた方法で文字列に変換し、そ
の後で再度、"20??/*/"で検索すれば、「日付だけのセル」も「日付と
文字列のセル」も両方を検索することができると思うのですが、「日付
だけのセル」をすべて検索することは可能でしょうか。
ご存知でしたら、よろしくお願い致します。
No.2
- 回答日時:
(1) 2010/03/05が誕生日 は文字列
(2) 2010/03/05は、日付(シリアル値)
"20??/*/" は文字列にしか適用できないから検索不可なのだと思います。
2010/03/05 で検索すれば両方ともヒットすると思いますよ。
ご回答いただきまして、ありがとうございます。
検索する日付は、特定の日付ではなく、日付の入力されているセルを
全て検索したいのですが、「文字列の日付」も、「シリアル値の日付」
もどちらも検索できる方法をご存知でしたら、教えて頂けないでしょうか。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
都道府県穴埋めゲーム
都道府県の名前を1人1つずつ投稿してください。全ての都道府県が出たら締め切ります!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
Find関数で日付を検索した時に別の日付がヒットしてしまう
Excel(エクセル)
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
-
4
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
31:30:00が1900/1/1 7:30:0
-
Excelで半年後の日付を計算したい
-
入力後に日付順になるように自...
-
エクセル関数で日付かどうかの...
-
Excelで8/26等の日付を全てその...
-
日付だけを変更して印刷(Excel)
-
エクセルでENTERを押すと数式が...
-
エクセルで数字列の間に『/』を...
-
ファイルのオープン時に今日の...
-
エクセル グラフ 軸の日付表記...
-
☆Excelエクセルで入力した日の...
-
日付入力→指定のセルの色を塗り...
-
VBAでセルに入っている日付をシ...
-
WORDで翌日や翌々日の日付を表...
-
EXCELで直近の日付を抽出する関数
-
エクセル 当番表の作り方 エク...
-
エクセルで1年後の月末を表示さ...
-
エクセルのセルにたとえば「756...
-
エクセルで日付入力欄を作成し...
-
ワード差込について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
31:30:00が1900/1/1 7:30:0
-
Excelで半年後の日付を計算したい
-
日付だけを変更して印刷(Excel)
-
入力後に日付順になるように自...
-
エクセル関数で日付かどうかの...
-
エクセルでENTERを押すと数式が...
-
Excelで8/26等の日付を全てその...
-
エクセルで数字列の間に『/』を...
-
エクセル 当番表の作り方 エク...
-
Excelに入力した個々の日付の数...
-
ファイルのオープン時に今日の...
-
エクセルで1年後の月末を表示さ...
-
EXCELで直近の日付を抽出する関数
-
エクセルのセルにたとえば「756...
-
WORDで翌日や翌々日の日付を表...
-
☆Excelエクセルで入力した日の...
-
日付を入力したセルをファイル...
-
エクセルで日付入力欄を作成し...
-
エクセル グラフ 軸の日付表記...
-
ワード差込について
おすすめ情報