![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
環境はWIN98、エクセル2000です。
注文表を日付、顧客コード、品目コード、価格の順で入力しています。
A列に2001/2/18のように日付を入れています。日付は古い方から順にならんでいます。また、同じ日付の行もたくさんあります。
例えば、2001年2月の注文だけをシート2に書き出すために、現在はdo loopを使用し、日付から年月のみを取り出し、該当年月の最初の行と、月が変わった行を探し、この範囲を範囲指定してコピーでシート2に写しています。
FINDを使えばもっと簡単に指定月の最初の行と、最後の行を簡単に見つけられるのでは、と思い、いろいろ試してみましたが、いい方法が見つかりません。
FINDNEXTでは、最初に2001/2/1とすると次の日付(2001/2/2)が検索され、2001/3月が検索できません。
簡単に探したい月の最初に日付行と最後の日付行を検索する方法はありませんでしょうか。
ご存じの方、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
問題を、昇順に並んだ日付から指定した年月のデータを抽出して別シートに書き出す。
と理解しましたので下記のコードを書いてみました。<条件>質問から、「日付、顧客コード、品目コード、価格」がA1からD1に入力されていて、データは2行目から連続に入力。またセル「F2」に抽出する年月日を「yyyy/m/d」で入力(日は月末までの任意)としています。
<要点>2月を検索する時に、翌月の3月1日を検索することにすると、まだ2月の時はデータがありませんし、休日とかで注文が無い場合も想定されると思い、指定した2月を1ヶ月間調べるようにしています。
Findを行った後、見つかったらFindNextを行って重複データを探しています。Sheet2は書き出すときにクリアしています。
コードを書きながら思ったことですが、このような処理はデータベースソフト(Accessとか)を使ったほうが便利かな・・・と。データがどんどん増えていく場合はExcelは不向きかもしれませんし・・・?
質問の意を汲んでいればと思います。がんばってください。
下記コードを標準モジュールを追加して、貼り付けてください。シート1からマクロKensakuを実行します。コードを登録すると先頭空白が消えるので、段下げをしてもらえば見やすくなると思います。
Option Explicit
Public Sub Kensaku()
Dim wk1, wk2 As Worksheet 'ワークシート
Dim schRg As String '検索範囲
Dim iYY, iMM As Integer '検索値(年、月)
Dim sDate As Date '検索値(年月日)
Dim tDate As String '検索値(テキスト)
Dim c '検索結果セル
Dim fstFind As String '最初に検索したセル
Dim Xpot1, Xpot2 As String 'セル座標(左上と右下)
Dim d As Integer '日付カウンタ
'設定
Set wk1 = Worksheets("Sheet1")
Set wk2 = Worksheets("Sheet2")
wk1.Activate: Range("A1").Select
iYY = Year(wk1.Range("F2")) 'セルF2に年月日を入力!!
iMM = Month(wk1.Range("F2"))
'検索範囲
schRg = "A1:A" & ActiveSheet.UsedRange.Rows.Count
'==============================
'F2に入力した年月を1ヶ月間検索
'==============================
With wk1.Range(schRg)
For d = 1 To Day(DateSerial(iYY, iMM + 1, 1) - 1)
sDate = DateSerial(iYY, iMM, d)
tDate = Application.Text(sDate, wk1.Range("A2").NumberFormat)
'検索実施
Set c = .Find(tDate)
'見つかった!
If Not c Is Nothing Then
fstFind = c.Address: Xpot2 = c.Offset(0, 3).Address
'最初の検索アドレス
If Xpot1 = "" Then Xpot1 = fstFind
'重複日を調べる
Do
Set c = .FindNext(c)
If c.Address <> fstFind Then
Xpot2 = c.Offset(0, 3).Address
End If
Loop While Not c Is Nothing And c.Address <> fstFind
End If
Next
End With
'=====================
'検索結果をシート2にコピー
'=====================
If Xpot1 <> "" Then
'シート2をクリア
wk2.Select: Cells.Select: Selection.ClearContents
'コピー
wk2.Range("A1") = wk1.Range("A1") '表題
wk2.Range("B1") = wk1.Range("B1")
wk2.Range("C1") = wk1.Range("C1")
wk2.Range("D1") = wk1.Range("D1")
wk1.Select: Range(Xpot1 & ":" & Xpot2).Select
Selection.Copy
'貼り付け
wk2.Select: Range("A2").Select: ActiveSheet.Paste
Range("A1").Select
'復帰
wk1.Select: Range("F2").Select
Else
MsgBox "該当データがありません"
End If
End Sub
ありがとうございました。
FINDNEXTをこのように使うと良いんですね。
早速組み込んでみます。
質問では、簡単に書きましたが、商品コード、区域など入力項目は20項目程度あります。
このデータはオンライン入力データを加工して、サーバーに保存され、必要な部署が自由に利用できるようになっています。
おっしゃるようにアクセスを利用する方が良いとは思いますが、当社の規定表計算ソフトはエクセルで、エクセルは全端末にインストールされており、どこでも利用出ます。
それと、アクセスは利用する部署で別途購入が必要になりますのと、使える人がいません。エクセルは集合研修も行い、ほとんどの人が使えます。
データ件数も月間4万件程度ですので、何とかエクセルで間に合わせてます。
ご助言ありがとうございました。
No.1
- 回答日時:
こんにちは
以下のページがご参考になるのでは?
[XL2000]Find メソッドで日付と時刻形式のデータを検索できない
http://www.microsoft.com/JAPAN/support/kb/articl …
参考URL:http://www.microsoft.com/JAPAN/support/kb/articl …
この回答への補足
ありがとうございました。
でも、ちょっと違うんです。
日付(2001/2/1のようにきろくされています)はFINDで検索できますが、この日付の内2001/2の最初の行及び2001/2/28の最後の行又は2001/3/1の最初の行を検索し、当該行の値を知りたいのです。
注文を受けたものを順に記録しますので、同じ日付はたくさんあります。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 祝日を除いた月曜から土曜までの1週間分の日付行を選択し、別シートへカットアンドペーストしたい 13 2023/07/13 22:46
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) Excel 同一セル内 年、日 入れ替え 5 2022/04/09 01:48
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) 単価シートから単価をエクセル関数で自動取得する方法 1 2023/07/02 22:00
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
EXCEL 年月表示をするVBAを教えてください。
Excel(エクセル)
-
VBA セル入力された日付データから年月のみを取り出してファイル名につけたい
Access(アクセス)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
5
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
6
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
7
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
8
アクセスで月単位の抽出
Access(アクセス)
-
9
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
10
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
11
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
12
(VBAにて)日付でデータを抽出するやり方
Excel(エクセル)
-
13
VBAで先月、先々月を求める方法
Visual Basic(VBA)
-
14
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
15
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
16
リンクをアップデートするしないの自動化
Excel(エクセル)
-
17
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
18
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
19
エクセルマクロで「1」を「01」に変換したい
Excel(エクセル)
-
20
エクセル if文で偽判定のとき、何も起こらないようにしたいのですが・・・
Access(アクセス)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンで購入したデーターが...
-
「24日の0時」って・・・
-
TODAY関数から次の火曜もしくは...
-
下の画像はアンドロイドタブレ...
-
回覧板の日付について質問です...
-
ACCESSで1月1日~12月31日まで...
-
「時間」、「期日」、「日付」...
-
エクセルで6ヵ月後を自動入力で...
-
エクセルで日付け表示で、明治...
-
Excelについて
-
Word365ですが、今日の日付と明...
-
Excelの関数について質問です。
-
満年齢(EXCEL)について・・・
-
VBA テキストボックスで日付を...
-
Googleスプレッドシートで ひと...
-
ORACLEでの日付編集形式
-
差し込み印刷に当日の日付が入...
-
送信済みアイテムの日付が合わ...
-
天皇(万世一系、皇紀、教育勅...
-
【Excelの不思議な日付処理の初...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンで購入したデーターが...
-
「24日の0時」って・・・
-
「時間」、「期日」、「日付」...
-
差し込み印刷に当日の日付が入...
-
日付の大小の表現
-
回覧板の日付について質問です...
-
エクセル マクロ 名前を付けて...
-
履歴書の日付間違いで落ちますか。
-
EXCELで日付を****年上期、****...
-
エクセルで6ヵ月後を自動入力で...
-
ACCESSで日付ごとに自動連番(...
-
WEEKDAYが反映されない
-
ACCESSで1月1日~12月31日まで...
-
会社や役所などに提出する書類...
-
日付以外のデータを抽出したい...
-
エクセルで日付別にシートを分...
-
Excelでヘッダに前日の日付を表...
-
エクセルで日付け表示で、明治...
-
2つの日付の中間の日付 エク...
-
差込印刷 縦書きで和暦(漢数...
おすすめ情報