[[20211204124343]] 『当日になると、数字が入っている内容を抽出したい』(やす) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『当日になると、数字が入っている内容を抽出したいです』(やす)

おそらく関数を使用しなければいけないと思ってますが、以下のような時には、どのような関数などを使えばよろしいでしょうか?

<質問>
シート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



< 使用 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.