[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『当日になると、数字が入っている内容を抽出したいです』(やす)
おそらく関数を使用しなければいけないと思ってますが、以下のような時には、どのような関数などを使えばよろしいでしょうか?
<質問>
シート1の情報を シート2へ情報を抽出したいのですが、
本日12/4であれば、1行目の日付の内容の列の内容を
シート2へは、以下のように抽出できる方法を教えていただきたいです。
【シート1】
A B C D E F
1 12/1 12/2 12/3 12/4
2 12/5 12/6 12/7 12/8
3 〇〇社 タイプa 100
4 ××社 タイプb 40
5 〇×社 タイプc 1000 5000
6 〇〇社 タイプd 300
7 △△社 タイプe 200 200
↓
【シート2】
A B C D E F
1 ××社 タイプb 12/8 40
2 〇×社 タイプc 12/8 5000
3
4
5
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(マナ) 2021/12/04(土) 17:49
マクロで作ってみました。 Sub Test() Dim ws1 As Worksheet, ws2 As Worksheet Dim myRng As Range, LastRow As Long, c As Range, i As Long
Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row Set myRng = ws1.Rows("1:2").Find(Date, LookIn:=xlFormulas, LookAt:=xlWhole) If myRng Is Nothing Then MsgBox Date & "が見つかりません。" Exit Sub End If ws2.Range("A1").CurrentRegion.ClearContents For Each c In ws1.Range(ws1.Cells(3, myRng.Column), ws1.Cells(LastRow, myRng.Column)) If c.Value <> "" Then i = i + 1 ws2.Cells(i, "A").Value = ws1.Cells(c.Row, "A").Value '社名 ws2.Cells(i, "B").Value = ws1.Cells(c.Row, "B").Value 'タイプ ws2.Cells(i, "C").Value = Date '本日 ws2.Cells(i, "D").Value = ws1.Cells(c.Row, c.Column).Value '数量 End If Next End Sub
(ピンク) 2021/12/04(土) 18:37
1.タイトルを1行目に書く(A1:D1)
2.数式を入力する (1) G1セル =MATCH(TODAY(),Sheet1!C1:F1,0)+2
(2) F3セル =IF(INDEX(Sheet1!A$1:F$10000,ROW(),G$1)<>"",ROW(),"") 下にコピー
(3) A2セル =IF($A1="","",IFERROR(INDEX(Sheet1!$A:$F,SMALL($F:$F,ROW()-1),1),"")) (4) B2セル =IF($A2="","",INDEX(Sheet1!$A:$F,SMALL($F:$F,ROW()-1),2)) (5) C2セル =IF($A2="","",INDEX(Sheet1!A$2:F$2,1,G$1)) (6) D2セル =IF($A2="","",INDEX(Sheet1!$A:$F,SMALL($F:$F,ROW()-1),G$1)) 上記各数式を下にコピー
<Sheet2 シート 結果図> 行 ___A___ ___B___ ___C___ __D__ _E_ _____F_____ _G_ _H_ 1 社名 タイプ 日付 金額 対象列番 6 2 ××社 タイプb 12月8日 40 対象行番号 3 〇×社 タイプc 12月8日 5,000 4 4 5 5 6
(半平太) 2021/12/04(土) 19:00
回答ありがとうございます。
マクロは、知識がないのですが、例で作ってみましたが、
シート1の1行目に記載している日になると、2行目の日付を
シート2のC列に持ってくるマクロはどのように設定すればよろしいでしょうか?
よろしくお願いします。
(やす) 2021/12/05(日) 08:27
回答ありがとうございます。
ちなみに、以下の数式がなければ、この方法では、できないということでしょうか?
関数INDEXが理解できてなく、教えていただければ幸いです。
>(2) F3セル =IF(INDEX(Sheet1!A$1:F$10000,ROW(),G$1)<>"",ROW(),"")
(やす) 2021/12/05(日) 08:35
>シート1の1行目に記載している日になると、2行目の日付をシート2のC列に持ってくる 日付は2行目を持ってくるのでしたね(;^_^A
Sub Test2() Dim ws1 As Worksheet, ws2 As Worksheet Dim myRng As Range, LastRow As Long, c As Range, i As Long Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row Set myRng = ws1.Rows("1:1").Find(Date, LookIn:=xlFormulas, LookAt:=xlWhole) If myRng Is Nothing Then MsgBox Date & "が見つかりません。" Exit Sub End If ws2.Range("A1").CurrentRegion.ClearContents For Each c In ws1.Range(ws1.Cells(3, myRng.Column), ws1.Cells(LastRow, myRng.Column)) If c.Value <> "" Then i = i + 1 ws2.Cells(i, "A").Value = ws1.Cells(c.Row, "A").Value '社名 ws2.Cells(i, "B").Value = ws1.Cells(c.Row, "B").Value 'タイプ ws2.Cells(i, "C").Value = myRng.Offset(1).Value '日付 ws2.Cells(i, "D").Value = ws1.Cells(c.Row, c.Column).Value '数量 End If Next End Sub
ws2.Cells(i, "C").Value = myRng.Offset(1).Value 'ここが変わりました。
本日の日付を探すのは1行目だけで良いのですね Set myRng = ws1.Rows("1:1").Find(Date, LookIn:=xlFormulas, LookAt:=xlWhole) ここも ws1.Rows("1:2") ⇒ ws1.Rows("1:1") に変わりました。
(ピンク) 2021/12/05(日) 09:34
早速のご回答、ありがとうございました。
マクロを勉強していきます(・_・;)
(やす) 2021/12/05(日) 10:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.