No.7ベストアンサー
- 回答日時:
今後、自分で解決できる実力をつけるためのヒントを簡単に関数一発!などと欲張らずに段階を追って、後でも見直しが容易なようにやってみましょう。
① IDをキーに、表2にDATEDIFとVLOOKUPを用いて両方の日付の差異を出してみましょう。
注意点は、表Bの日付2と表Aの日付1のどちらを先に置くかを考慮すること。調べてね!
その理由により、表Aの日付1以降の日数は、反映されないようになります。
② 上記ができたら、IDと日付の差異の順番で昇降ソートしてみてください。
少し見えてくると思います。
③ 次にIFを用いて、30日以前のデータのみを反映する列と同じくデータを反映する列を作ってみましょう。
つまりこれが、結果になります。
④ 表Aと表BのIDをキーにVLOOKUPで拾えば完成。
あとで見直しも簡単にできると思いますし、修正もできると思います。 頑張って!
色々とアドバイスを含め、ご回答ありがとうございました
DATEDIFの関数が見つかりませんでしたが、他のやり方で何とかやってみました。
No.8
- 回答日時:
No.4です。
>近似日とは、日付1から1か月以内(30日以内)の日付です。
30日と限定してしまうと、大の月・小の月の兼ね合いもあると思いますので、
実質1か月以内としてみました。
前回のコードの
>If Abs(.Cells(i, "B") - FoundCell.Offset(, 1)) <= 3 Then '//←Sheet1、B列日付の前後3日以内★//
の行を
>If FoundCell.Offset(, 1) <= WorksheetFunction.EDate(.Cells(i, "B"), 1) Then
に変更してみてください。m(_ _)m
No.5
- 回答日時:
他の方も書かれている通り、近似値についての条件解説が、不足していますね。
既定日より、前の日なのか、後の日なのか?
もし、後を指定すれば、10日離れても、10日後なのか?例:3日前、1日前、10日後の場合
もし、前を指定すれば、10日離れても、10日前なのか?例:10日前、1日後、5日後の場合
3日前と4日後もあれば、1日前と1か月後もある、その逆もしかり。
つまるところ、1日前後の場合どっちなの?がポイントかな?
No.4
- 回答日時:
こんばんは!
>近似日・・・
Excel的にはこんな曖昧な検索はできません。
こちらで「近似日」の範囲を決めてやる必要があります。
例えば、Sheet1のB列日付の「前後3日以内」のように!
VBAになりますが、一例です。
とりあえず前後3日以内のデータがあればSheet1のF・G列に表示するようにしてみました。
尚、Sheet1・Sheet2は↓の画像のような配置だという前提です。
標準モジュールです。
Sub Sample1()
Dim i As Long, lastRow As Long, wS As Worksheet
Dim FoundCell As Range, FirstCell As Range
Set wS = Worksheets("Sheet2")
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(.Cells(2, "F"), .Cells(lastRow, "G")).ClearContents
End If
For i = 2 To lastRow
Set FoundCell = wS.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not FoundCell Is Nothing Then
Set FirstCell = FoundCell
GoTo 処理
Do
Set FoundCell = wS.Range("A:A").FindNext(after:=FoundCell)
If FoundCell.Address = FirstCell.Address Then Exit Do
処理:
If Abs(.Cells(i, "B") - FoundCell.Offset(, 1)) <= 3 Then '//←Sheet1、B列日付の前後3日以内★//
.Cells(i, "F").Resize(, 2).Value = FoundCell.Offset(, 1).Resize(, 2).Value
End If
Loop
End If
Next i
End With
MsgBox "完了"
End Sub
※ Sheet2のIDに重複があるというコトなので、条件に合致するデータが複数ある場合は
最終行のデータが反映されます。
※ コード内の「★」の行で前後○日としていますので、
仮に前後1週間まで範囲を広げたい場合は「3」を「7」に変更してください。m(_ _)m
No.3
- 回答日時:
こんにちは
レイアウトは把握していませんが、どうやらA列の値がIDとして使えるような感じなので、
A表に関数を設定するものとして、
1)A表と同じIDの行をB表から検索し、その行の値を参照する関数
(A表のD、E列に設定)
を設定すれば、ほぼ実現できるものと思います。
B表にだけ存在するID(=A表には記載がない)が出現する可能性がある場合は、1)だけでは全てをピックアップできませんので、
2)A表にないIDの行をB表から検索して、A表のA列に転記(追記)する関数
(A表のA列に設定)
(A列に追加のIDを表示できれば、後は1)を利用して検索すれば良い)
の2種類を考える必要がありそうな気がします。
2)のようなケースの可能性がないことがわかっている場合は比較的簡単です。
VLOOKUP関数を利用するだけで1)に相当するものが作成可能と想像しますので、この関数に関して調べてみることをお勧めします。
(ID欄がA列にない場合は、Match + Index関数など)
ご回答ありがとうございます。
ご回答いただいた1)のパターンです。
VLOOKUPを用いようとは考えたのですが、近似日のデータ抽出ができずに困ってしまいました。
No.1
- 回答日時:
この手の問題は、紙の上で鉛筆片手に手作業で処理を行う手順をそのまま再現すれば良い。
まず、B表のA列のデータを上から順番に、A表のA列に同じデータがあるかを調べますよね。
次に、その見つけた行の日付を確認して最も近い日付を選びますよね。
そして最も近い日付のデータをB表に書き写す。
ではありませんか。
この手順を関数を使って行うかマクロ(VBA)を使うかは質問者さん次第。
関数もマクロも分からないのであれば、手作業で一つ一つ拾ってくることになると思います。
意外とそのほうが早かったりすることもありますよ。
・・・注意・・・
どのようにして「同じ日付」か「もっとも近い日付け」かの判断をするのかもよく考えましょう。
ちゃんと条件を決めて判断しないといけないことは分かると思います。
質問文にはそれが明記されていません。
(例:11月5日に対して、11月4日と11月6日のデータがあったらどちらを採用するか…など)
ちなみに疑問を解決することが目的ですので、
「代わりに作ってください」
とか
「参照先を変えるだけで使えるテンプレートを寄こせ」
と言うのは質問ではなく依頼ですのでこの場にふさわしくありません。
てかルール違反なんだな。
「どんな関数を組み合わせればいいのか、どんなコードを使えばいいのか、アドバイスをください」
「自分はこんなやり方をしたけど、意図する結果ではなく、こうなった。何を間違えているのか教えてください」
のような質問をすることを勧めます。
・・・余談・・・
ごめんよ。
他人に頼ってばかりでは、目の前にある疑問を先送りにすることになる可能性があるんだ。
自分で問題を解けるようにならないと解決ではありませんよね。
愚痴っぽくなりましたが、それを理解できない質問者さんが多いのです。
ご理解ください。
意図しない内容で失礼しました。
関数でもわかればよいのですが、VLOOKUPを使用しようと考えたのですが、近似日の抽出に困難をしています。
近似日は、表Aの日付より表Bの日付が前のものを探します。
作って欲しいというわけではなく、どんな関数を用いればよいのかを教えていただきたく投稿させていただきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- その他(Microsoft Office) wordの差し込み印刷での日付表示 2 2023/08/15 16:51
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) エクセル関数のスペシャリストの方、教えてください。 写真のように A列にはデータ C列にはデータの中 7 2022/04/09 00:15
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
「段」と「行」の違いがよくわ...
-
VBA 指定した列にある日時デー...
-
Excel文字列一括変換
-
Excelの行数、列数を増やしたい...
-
CSVファイルの「0落ち」にVBA
-
エクセルのソートで、数字より...
-
リストからデータを紐付けしたい
-
Excel/VBA ステップインと通常...
-
横軸を日付・時間とするグラフ化
-
エクセルで最初の行や列を開け...
-
VBAで結合セルを転記する法を教...
-
VBA Splitで「引数の数が一致...
-
エクセルマクロの組み方
-
エクセル 重複したデータを別...
-
Alt+Shift+↑を一括で行うには、...
-
VBAで別ブックの列を検索し、該...
-
ListViewで列を指定して表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
「段」と「行」の違いがよくわ...
-
LEFT関数とIF関数の組み合わせ...
-
VBA
-
Excelの行数、列数を増やしたい...
-
VBA 指定した列にある日時デー...
-
エクセルで複数列の検索をマク...
-
CSVファイルの「0落ち」にVBA
-
エクセルマクロの組み方
-
エクセルのソートで、数字より...
-
えABのある列って
-
VBAで別ブックの列を検索し、該...
-
Excel文字列一括変換
-
エクセルで住所を県と市・郡と...
-
リストからデータを紐付けしたい
-
Alt+Shift+↑を一括で行うには、...
-
エクセル マクロ 範囲指定で...
-
エクセルで最初の行や列を開け...
-
エクセル 重複 隣の列 一番...
おすすめ情報
関連画像を添付しました。
分かりづらく、大変失礼しました。
質問文だと表Aと表Bは別シート扱いにしていますが、
添付画像は見やすさの為、一つにまとめています。
分かる方、ご教授お願いします。
近似日の詳細が記載していませんでした。
重ね重ね、すみません。
近似日とは、日付1から1か月以内(30日以内)の日付です。
後は求めていません。
宜しくお願いします。