VBはまだ勉強出来ていないため 関数でお聞きしたい事です
A1に入力した 日にちに対して 
日付一覧(仮に B1~B25 4/18 4/30 5/25 6/20・・・)より
一番近い日 (但し 過ぎた日は 対象外)を A2に表示したい
VLOOKUPで 試しましたが すでに過ぎた日が 表示される為困っています
宜しくお願い致します

このQ&Aに関連する最新のQ&A

A 回答 (3件)

日付が昇順で並んでいても、VLOOKUP(TRUE型)では、検索値(A1の日付)を超えたデータの手前(つまりA1より前の日)が表示されます。



対策として思い浮かんだのは、
B列が昇順であり、
B列のデータは同じものが複数存在しない、
という前提ですが、

①作業列を使用できるのであれば、
その行の1つ下の日付を表示する列を作り、
VLOOKUPでこちらの列のデータを表示させる。

②MATCHによってVLOOKUPで表示された日付の位置(行番号)を特定し、
その位置+1の行番号のセルのデータをINDIRECTによって取得する。

の2つの方法です。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます
関数も 簡単な処理しか解らない初心者なので
2通りの回答 助かりました 
参考にさせて頂きます

お礼日時:2017/04/21 00:48

こんばんは!



A2セルに
=MAX(IF(B1:B25<=A1,B1:B25))

配列数式ですので、Ctrl+Shift+Enterで確定してください。
※ エラー処理はしていません。m(_ _)m
    • good
    • 0
この回答へのお礼

回答ありがとうございます
関数も 初心者に毛が生えた程度なので
実際の数式を 記入して頂いて感謝しています
ありがとうございました

お礼日時:2017/04/21 00:45

完全一致では無く近似一致ですね?


この場合には検索キーを昇順に並べて置かないと予期しない動きになります。

日付一覧を、日付をキーにして昇順に並べ替えてから行なえば、過ぎない1番近い日が求まります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
大変参考に させて頂きました
ありがとうございます

お礼日時:2017/04/21 00:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

Q(A1/B1/C1…→A1/A2/A3)X複数 の変換方法について

エクセルで
.|A|B|C|D|E
1|あ|い|う|え|お
2|か|き|く|け|こ
3|さ|し|す|せ|そ
4|・|・|
5|・|
6
7



という行・列を下のように書き換える(A列に集約する)簡単な方法がありましたら教えて下さい。

.|A|B|C|D|E
1|あ|
2|い|
3|う|
4|え|
5|お|
6|か|
7|き|
8|く|
9|・|
10|・
・|・
・|・

使用しているバージョンはexcel2003です。
今まではあまりデータが多くなかったので
「コピー→形式を選択して貼り付け→行列を入れ替えるにチェック」
で行っていたのですが、今回は2000行ぐらいあるので今までのやり方では厳しいと思い相談させていただきました。

Aベストアンサー

VBAで
K列に縦に並べます
Sub test01()
d = Range("A65536").End(xlUp).Row
For i = 1 To d
Range(Cells(i, "A"), Cells(i, "E")).Copy
Range("K65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
Next i
End Sub
ーーー
とか
Sub test02()
K = 1
d = Range("A65536").End(xlUp).Row
For i = 1 To d
For j = 1 To 5
Cells(K, "K") = Cells(i, j)
K = K + 1
Next j
Next i
End Sub

Qエクセルについてなのですが、 例えば指定の範囲内に A B B C A B C A B B C D

エクセルについてなのですが、

例えば指定の範囲内に
A B B C A B C A B B C D B D
と並んだセルからAとDの合計を出したい時はどのようにすればいいのですか?

COUNTIFSだったら複数条件を満たした数を表示するので希望とは違います。
希望はA or Dの合計を出したいのです。

Aベストアンサー

こんにちは!

COUNTIFS関数はAND条件になりますので、今回の質問には適しません。

=COUNTIF(範囲,"A")+COUNTIF(範囲,"D")
のように「A」のセル数と「D」のセル数をコツコツと足し算するのが
間違いないと思います。m(_ _)m

Q【EXCEL】数式=SUM(A1*B1+A2*B2+・・・+A100*B100)を簡略化したい

お世話になります。

今Excelで、A1~A100とB1~B100まで数値が入っています。
セルC1に「=A1×b1」、C2に「=A2*B2」…C100に「=A100*B100」と入力しました。
そしてセルC101に「SUM(C1:C100)」と入力して合計を出しました。
(実際はもっと複雑な計算なのですが、説明の為に簡略化しています)

そうすると、計算結果セルが多く発生するためファイルサイズが莫大になってしまうのと、それを数千行×6列以上を一気に計算するとXPのリソースが足りないと出て計算できません。
なので2~3列ずつ何回も数式コピペを繰り返すことになっています。

そこで【別セルに掛け算をしてから全部SUMで足す】のではなく【1つのセルに掛け算とSUMを組み込む】という事を考えて
=SUM(A1*B1+A2*B2+・・・+A100*B100)を
を入力しようとしたのですが、数式が長すぎて四苦八苦です。

この式、なんとか簡略化できませんか?

Aベストアンサー

積の合計なら
=SUMPRODUCT(A1:A100,B1:B100)
でいいのでは?

QA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示

エクセル初心者です

セルのA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示されるようなものを作りたいのですが・・・
どなたかご教授お願いします

例えば、A1に1を入れるとB1の値"北海道"がA1に表示され、A2に2を入れるとB2の値"青森"がA2に表示といった感じでです

宜しくお願いいたします

Aベストアンサー

No3,5,6です。
補足要求をしましたが時間がないので、No6での以下の理解、

B4がROOT,C4が♭9,D4が9,E4がm3,F4がM3~M4がM7
置き換え対象はB6:W11の範囲

ということでいいのなら以下で出来ます。

1.シートのタブを右クリックし、コードの表示を選択
2.出てきたVBエディター(白い画面)に下記をコピペ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
If Intersect(Target, Range("B6:W11")) Is Nothing Then Exit Sub
x = Target.Value
Application.EnableEvents = False
Target.Value = Range("A4").Offset(0, x)
Application.EnableEvents = True
End Sub

3.AltキーとF11キーを一緒に押してワークシートへもどります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報