こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

年月日合致の指定マークがついた氏名を返す

L列の年月日に合致する2C:2J年月日の下方☆印があればA列氏名をM列に列記したいのですがまた2C:2Jにない場合は順に7C:7J、12C:12Jの年月日も検索し合致する年月日と☆印でA列の氏名を入力したいです。どなたか関数もしくはVBAコードがわかる方ご教授願います。
バージョンはoffice Excel2013です。

投稿日時 - 2018-05-18 23:16:33

QNo.9499752

すぐに回答ほしいです

質問者が選んだベストアンサー

例示のレイアウトのデータなら以下の数式が計算負荷も少なく簡単です。

=INDEX($A$3:$A$6,MATCH("☆",OFFSET($B$1,MATCH(L3,C:C),DAY(L3),4,1)))

投稿日時 - 2018-05-20 12:37:19

補足

コメントに質問しましたがなんとか応用で処理できました勉強になり助かりました。ありがとうございます。

投稿日時 - 2018-05-22 20:31:15

お礼

ありがとうございます。問題なく名前入力ができたのですが6月、7月に名前が違った場合やはりA,B,C,Dの名前を返します。もしよければ名前が月毎に変更になった場合でも対応できる関数があれば申し訳ありませんがご教授願います。

投稿日時 - 2018-05-21 22:10:54

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

VBAで、コード行数を少なくを目指して(意地悪なデータ例だとアウトだが)
Sub test02()
k = 2
'--A列で最下セルに現れるDをデータ最終行とする
Set rng = Range("A:A").Find( _
What:="D", _
SearchDirection:=xlPrevious)
MsgBox rng.Address(False, False) '確認用
m = rng.Row 'データ最終行行番号
For Each cl In Range("C3:j" & m) ’☆を探すセル範囲
If cl = "☆" Then
MsgBox cl.Address '確認用
Cells(k, "M") = Cells(1, cl.Column) '該当分をM列にセット 日付
Cells(k, "N") = Cells(cl.Row, 1) '該当分をM列にセット 氏名
k = k + 1
End If
Next
End Sub
上の例では、M列の書式は日付に設定のこと。
適宜、結果のM列、N列を並び替えて、見てください。日付順や氏名順など。

投稿日時 - 2018-05-19 22:47:03

お礼

ありがとうございます。勉強になりました。

投稿日時 - 2018-05-22 20:28:41

ANo.4

提示された画像ではカレンダーの横方向が8日ですが、
月末日まで続きますね?
ならば、横方向の列数は月ごとにバラバラですね?

氏名の行は4人/日ですが、これは固定でいいですね?

>関数もしくはVBAコード
とのことなので、VBAの関数を作ってみました。
もしよかったら、また使えるようならテストしてみてください。



Function GetBanName(MyRange As Range, MyDate As Date) As String
 
 Dim wkCol As Integer
 Dim wkRow As Integer
 Dim wkCount As Integer
 
 wkRow = 1
 wkCol = 3
 GetBanName = ""
 
 Do
  wkCol = 3
  If MyRange(wkRow, wkCol).Value = "" Then Exit Do
  Do
   If MyRange(wkRow, wkCol).Value = "" Then Exit Do
   If MyRange(wkRow, wkCol).Value = MyDate Then
    For wkCount = 1 To 4
     If MyRange(wkRow + wkCount, wkCol).Value = "☆" Then
      GetBanName = MyRange(wkRow + wkCount, 1).Value
      Exit Function
     End If
    Next wkCount
   End If
   wkCol = wkCol + 1
  Loop
  wkRow = wkRow + 5
 Loop

End Function

投稿日時 - 2018-05-19 18:15:30

お礼

ありがとうございます。勉強になりました。

投稿日時 - 2018-05-22 20:28:21

ANo.3

画像の添付に失敗しました(^^;

投稿日時 - 2018-05-19 13:08:33

お礼

ありがとうございます。勉強になりました。

投稿日時 - 2018-05-22 20:28:10

ANo.2

抽出欄の縦横を変えてデータベース関数でやってみました。
セルL2に↓の式が入っています
=IFERROR(DGET($A$2:$J$6,$A$2,L3:L4),"")&IFERROR(DGET($A$7:$J$11,$A$2,L3:L4),"")&IFERROR(DGET($A$12:$J$16,$A$2,L3:L4),"")

投稿日時 - 2018-05-19 13:07:23

お礼

ありがとうございます。勉強になりました。

投稿日時 - 2018-05-22 20:27:56

ANo.1

M3: =MID("ABCD",MATCH("☆",OFFSET(A$1,MAX(IF(C$2:J$16=L3,ROW(C$2:J$16))),MAX(IF(C$2:J$16=L3,COLUMN(C$2:J$16)))-1,4,),),1)
【お断り】上式は必ず配列数式として入力のこと

投稿日時 - 2018-05-19 00:07:10

お礼

ありがとうございます。勉強になりました。

投稿日時 - 2018-05-22 20:27:51